mcpField
G
get-available-resources

get-available-resources

github.com/ovachieverクラウド・DevOps5649 回インストール48 週間前に更新
リポジトリ

get-available-resources について

マシンの CPU、GPU、メモリ、ディスク、OS を調べ、計算方法を提案するスキルです。計算負荷の高い科学技術タスクを計画する研究者や開発者向けです。

主な機能

  1. 01CPU、GPU、メモリ、ディスクの検出
  2. 02NVIDIA、AMD、Apple Silicon GPU の確認
  3. 03リソース状況に応じた計算方法の提案
  4. 04JSON レポートの生成

活用シーン

  1. 01モデル学習前の GPU バックエンド確認
  2. 02大規模データセットの読み込み方法の選択
  3. 03並列処理のワーカー数の見積もり
  4. 04大容量ファイル操作前のディスク容量確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ovachiever/droid-tings --skill get-available-resources

インストール後、Claude Code で/get-available-resourcesを入力して読み込まれたか確認します。

同梱ファイルscripts/detect_resources.py

詳細

利用可能なリソースを取得

概要

科学計算タスクのために、利用可能な計算リソースを検出し、戦略的な推奨事項を生成します。このスキルは、CPU の性能、GPU の利用可能性(NVIDIA CUDA、AMD ROCm、Apple Silicon Metal)、メモリの制約、ディスク容量を自動的に特定し、計算手法について適切な判断を行えるよう支援します。

このスキルを使用するタイミング

計算負荷の高いタスクを実行する前に、このスキルを積極的に使用してください。

  • データ分析の前: データセットをメモリに読み込めるか、それともアウトオブコア処理が必要かを判断します
  • モデルトレーニングの前: GPU アクセラレーションが利用可能か、またどのバックエンドを使うべきかを確認します
  • 並列処理の前: joblib、multiprocessing、Dask に最適なワーカー数を特定します
  • 大容量ファイル操作の前: 十分なディスク容量があり、適切なストレージ戦略を使えるかを確認します
  • プロジェクト初期化時: アーキテクチャの決定に向けて、基本的な能力を把握します

利用例:

  • 「この 50GB のゲノムデータセットを分析してください」→ まずこのスキルを使用して、Dask/Zarr が必要かどうかを判断します
  • 「このデータでニューラルネットワークを学習させてください」→ このスキルを使用して、利用可能な GPU とバックエンドを検出します
  • 「10,000 個のファイルを並列処理してください」→ このスキルを使用して、最適なワーカー数を決定します
  • 「計算負荷の高いシミュレーションを実行してください」→ このスキルを使用して、リソースの制約を把握します

このスキルの動作

リソース検出

このスキルは scripts/detect_resources.py を実行し、以下を自動的に検出します。

  1. CPU 情報

    • 物理コア数と論理コア数
    • プロセッサのアーキテクチャとモデル
    • CPU の周波数情報
  2. GPU 情報

    • NVIDIA GPU: nvidia-smi で検出し、VRAM、ドライバーバージョン、コンピュート機能を報告します
    • AMD GPU: rocm-smi で検出します
    • Apple Silicon: Metal サポートとユニファイドメモリを備えた M1/M2/M3/M4 チップを検出します
  3. メモリ情報

    • 合計および利用可能な RAM
    • 現在のメモリ使用率(%)
    • スワップ領域の利用可能状況
  4. ディスク容量情報

    • 作業ディレクトリの合計および利用可能なディスク容量
    • 現在の使用率(%)
  5. オペレーティングシステム情報

    • OS の種類(macOS、Linux、Windows)
    • OS のバージョンとリリース
    • Python のバージョン
出力形式

このスキルは、現在の作業ディレクトリに .claude_resources.json ファイルを生成します。このファイルには次の内容が含まれます。

{
  "timestamp": "2025-10-23T10:30:00",
  "os": {
    "system": "Darwin",
    "release": "25.0.0",
    "machine": "arm64"
  },
  "cpu": {
    "physical_cores": 8,
    "logical_cores": 8,
    "architecture": "arm64"
  },
  "memory": {
    "total_gb": 16.0,
    "available_gb": 8.5,
    "percent_used": 46.9
  },
  "disk": {
    "total_gb": 500.0,
    "available_gb": 200.0,
    "percent_used": 60.0
  },
  "gpu": {
    "nvidia_gpus": [],
    "amd_gpus": [],
    "apple_silicon": {
      "name": "Apple M2",
      "type": "Apple Silicon",
      "backend": "Metal",
      "unified_memory": true
    },
    "total_gpus": 1,
    "available_backends": ["Metal"]
  },
  "recommendations": {
    "parallel_processing": {
      "strategy": "high_parallelism",
      "suggested_workers": 6,
      "libraries": ["joblib", "multiprocessing", "dask"]
    },
    "memory_strategy": {
      "strategy": "moderate_memory",
      "libraries": ["dask", "zarr"],
      "note": "Consider chunking for datasets > 2GB"
    },
    "gpu_acceleration": {
      "available": true,
      "backends": ["Metal"],
      "suggested_libraries": ["pytorch-mps", "tensorflow-metal", "jax-metal"]
    },
    "large_data_handling": {
      "strategy": "disk_abundant",
      "note": "Sufficient space for large intermediate files"
    }
  }
}
戦略的な推奨事項

このスキルは、コンテキストに応じた推奨事項を生成します。

並列処理の推奨事項:

  • 高い並列性(8 コア以上): Dask、joblib、または multiprocessing を使用し、ワーカー数はコア数 - 2 とします
  • 中程度の並列性(4〜7 コア): joblib または multiprocessing を使用し、ワーカー数はコア数 - 1 とします
  • 逐次処理(4 コア未満): オーバーヘッドを避けるため、逐次処理を優先します

メモリ戦略の推奨事項:

  • メモリ制約あり(利用可能なメモリが 4GB 未満): アウトオブコア処理のために Zarr、Dask、または H5py を使用します
  • 中程度のメモリ(利用可能なメモリが 4〜16GB): 2GB を超えるデータセットには Dask/Zarr を使用します
  • メモリに余裕あり(利用可能なメモリが 16GB 超): ほとんどのデータセットを直接メモリに読み込めます

GPU アクセラレーションの推奨事項:

  • NVIDIA GPU を検出した場合: PyTorch、TensorFlow、JAX、CuPy、または RAPIDS を使用します
  • AMD GPU を検出した場合: PyTorch-ROCm または TensorFlow-ROCm を使用します
  • Apple Silicon を検出した場合: MPS バックエンドを備えた PyTorch、TensorFlow-Metal、または JAX-Metal を使用します
  • GPU を検出しなかった場合: CPU 向けに最適化されたライブラリを使用します

大規模データ処理の推奨事項:

  • ディスク容量が限られている場合(10GB 未満): ストリーミングまたは圧縮の戦略を使用します
  • 中程度のディスク容量(10〜100GB): Zarr、H5py、または Parquet 形式を使用します
  • ディスク容量に余裕あり(100GB 超): 大きな中間ファイルを自由に作成できます

使用手順

ステップ 1: リソース検出を実行する

計算負荷の高いタスクを開始する際に、次の検出スクリプトを実行します。

python scripts/detect_resources.py

オプション引数:

  • -o, --output <path>: 出力先のパスを指定します(デフォルト: .claude_resources.json)
  • -v, --verbose: リソース情報の全体を標準出力に表示します
ステップ 2: 推奨事項を読み取り適用する

検出を実行したら、生成された .claude_resources.json ファイルを読み取り、計算処理の判断に役立ててください:

# Example: Use recommendations in code
import json

with open('.claude_resources.json', 'r') as f:
    resources = json.load(f)

# Check parallel processing strategy
if resources['recommendations']['parallel_processing']['strategy'] == 'high_parallelism':
    n_jobs = resources['recommendations']['parallel_processing']['suggested_workers']
    # Use joblib, Dask, or multiprocessing with n_jobs workers

# Check memory strategy
if resources['recommendations']['memory_strategy']['strategy'] == 'memory_constrained':
    # Use Dask, Zarr, or H5py for out-of-core processing
    import dask.array as da
    # Load data in chunks

# Check GPU availability
if resources['recommendations']['gpu_acceleration']['available']:
    backends = resources['recommendations']['gpu_acceleration']['backends']
    # Use appropriate GPU library based on available backend
ステップ 3: 情報に基づいて判断する

リソース情報と推奨事項を使って、戦略的な選択を行ってください:

データ読み込みの場合:

memory_available_gb = resources['memory']['available_gb']
dataset_size_gb = 10

if dataset_size_gb > memory_available_gb * 0.5:
    # Dataset is large relative to memory, use Dask
    import dask.dataframe as dd
    df = dd.read_csv('large_file.csv')
else:
    # Dataset fits in memory, use pandas
    import pandas as pd
    df = pd.read_csv('large_file.csv')

並列処理の場合:

from joblib import Parallel, delayed

n_jobs = resources['recommendations']['parallel_processing'].get('suggested_workers', 1)

results = Parallel(n_jobs=n_jobs)(
    delayed(process_function)(item) for item in data
)

GPU アクセラレーションの場合:

import torch

if 'CUDA' in resources['gpu']['available_backends']:
    device = torch.device('cuda')
elif 'Metal' in resources['gpu']['available_backends']:
    device = torch.device('mps')
else:
    device = torch.device('cpu')

model = model.to(device)

依存関係

検出スクリプトには、次の Python パッケージが必要です:

uv pip install psutil

それ以外の機能はすべて Python 標準ライブラリのモジュール (json, os, platform, subprocess, sys, pathlib) を使用します。

プラットフォームサポート

  • macOS: Apple Silicon (M1/M2/M3/M4) の GPU 検出を含め、完全にサポートされています
  • Linux: NVIDIA (nvidia-smi) および AMD (rocm-smi) の GPU 検出を含め、完全にサポートされています
  • Windows: NVIDIA GPU の検出を含め、完全にサポートされています

ベストプラクティス

  1. 早めに実行する: プロジェクトの開始時や大規模な計算処理の前にリソース検出を実行してください
  2. 定期的に再実行する: システムリソース (メモリ使用量、ディスク容量) は時間とともに変化します
  3. 拡大前に確認する: 並列ワーカー数やデータサイズを増やす前に、リソースを確認してください
  4. 判断内容を記録する: リソースを考慮した判断を文書化するため、.claude_resources.json ファイルをプロジェクトディレクトリに保管してください
  5. バージョン管理と併用する: マシンごとに性能は異なるため、リソースファイルがあると移植性の維持に役立ちます

トラブルシューティング

GPU が検出されない場合:

  • GPU ドライバーがインストールされていることを確認してください (nvidia-smi、rocm-smi、または Apple Silicon の場合は system_profiler)
  • GPU ユーティリティがシステムの PATH に含まれていることを確認してください
  • GPU が他のプロセスで使用されていないことを確認してください

スクリプトの実行に失敗する場合:

  • psutil がインストールされていることを確認してください: uv pip install psutil
  • Python のバージョン互換性を確認してください (Python 3.6 以降)
  • スクリプトに実行権限があることを確認してください: chmod +x scripts/detect_resources.py

メモリの読み取り値が不正確な場合:

  • メモリの読み取り値はスナップショットであり、実際に利用可能なメモリは常に変動します
  • 「利用可能」なメモリを正確に把握するため、検出を実行する前に他のアプリケーションを終了してください
  • 検出を複数回実行し、結果の平均を取ることを検討してください

コメント