mcpField
G
get-available-resources

get-available-resources

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

get-available-resources について

Get Available Resourcesは、科学計算向けにCPU、GPU、メモリ、ディスク、OSを検出し、環境に応じた推奨事項を作成するスキルです。負荷の高い処理に先立ち、データ処理や並列化、アクセラレーションの方法を検討できます。

主な機能

  1. 01CPU・GPU能力の検出
  2. 02メモリ・ディスク空き容量の報告
  3. 03OSとPythonバージョンの識別
  4. 04リソース情報のJSON出力
  5. 05並列化・メモリ・GPU戦略の提案

活用シーン

  1. 01データセットがメモリに収まるか確認
  2. 02モデル学習前にGPUバックエンドを選択
  3. 03並列処理のワーカー数を見積もる
  4. 04大容量ファイル操作前に空き容量を確認

インストール

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

$npx skills add https://github.com/crazymsn/academic-skills --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

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

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

コメント