system-profile について
system-profileは、指定されたスクリプト、プロセス、関数、システムのプロファイリング方法を選び、計測してボトルネックをまとめるスキルです。CPU、メモリ、GPU、インターコネクトの性能を調べる開発者向けで、必要に応じて対象に合わせた計測コードを作成します。
主な機能
- 01スクリプト、プロセス、関数、システムの分析
- 02外部ツールまたは独自の計測方法の選択
- 03CPU、メモリ、GPU、インターコネクトの調査
- 04分析成果物を ./profile_output/ に保存
- 05ボトルネックと期待効果順の改善案を報告
- 06計測の変更内容を記録
活用シーン
- 01Pythonモジュールやサービスのホットスポット特定
- 02GPUメモリ使用量とカーネル動作の計測
- 03CPU-GPU転送やNCCLコレクティブの調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ wanshuiyin/ auto-claude-code-research-in-sleep --skill system-profileインストール後、Claude Code で/system-profileを入力して読み込まれたか確認します。
詳細
システムプロファイル
指定された対象のプロファイルを取得し、結果を要約します。対象:$ARGUMENTS
手順
あなたはプロファイリングアシスタントです。ユーザーが指定した対象に基づいて適切なプロファイリング方法を選び、必要に応じて計測コードを記述して、プロファイリングを実行し、結果を分析して要約を作成します。
ステップ 1:プロファイリング対象を特定する
$ARGUMENTS を解析して、何をプロファイリングするかを理解します。例:
- Python スクリプトまたはモジュール
- 実行中のプロセス(PID またはサービス名)
- 特定の関数またはコードブロック
- フレームワークまたはシステム全体(例:「autogen」、「vllm serving」)— エンドツーエンドの実行をプロファイリングし、コンポーネント全体のボトルネックを特定します
- 「gpu」/「interconnect」/「memory」による、対象を絞ったプロファイリング
$ARGUMENTS が空、または不明確な場合は、ユーザーに確認してください。
ステップ 2:プロファイリング方法を選ぶ
必要に応じて、外部ツールやコード計測を選択します。以下の例だけに限定せず、対象に適した方法を使用してください。
外部ツール(最初に利用可能か確認してください):
- CPU:
cProfile、py-spy、line_profiler、perf stat、/usr/bin/time -v - メモリ:
tracemalloc、memory_profiler、memray - GPU:
nvidia-smi、nvidia-smi dmon、nvitop、torch.profiler、nsys - インターコネクト:
nvidia-smi topo -m、nvidia-smi nvlink、NCCL_DEBUG=INFO - システム:
strace -c、iostat、vmstat
コード計測 — 外部ツールでは不十分な場合、対象にプロファイリングコードを記述して挿入します。よくあるケース:
- 特定のコードブロックの時間計測(実時間とCPU時間)
- CPU-GPU または GPU-GPU の転送量、頻度、帯域幅の測定
- CPU と GPU におけるメモリ割り当てを追跡し、冗長性を検出
- NCCL の集合通信をラップし、レイテンシとスループットを測定
- カーネルの前後に CUDA イベント計測を追加
コードで確認した内容に基づいて計測方法を設計し、固定のテンプレートを使用しないでください。
ステップ 3:調査する主要な指標
対象に応じて、以下の一部またはすべてに注目します。
CPU オーバーヘッド
- コンテキストスイッチ(自発的/非自発的)
- CPU 使用率:CPU 時間と実時間の比率
- 関数ごとの実行時間のホットスポット
メモリオーバーヘッド
- CPU と GPU のメモリ使用量(割り当て済み、予約済み、ピーク)
- 冗長な複製:同じデータが CPU と GPU の両方に存在する状態
- マルチ GPU 構成におけるデバイスごとの割り当てバランス
インターコネクトと通信
- CPU-GPU 転送:頻度、転送ごとのサイズ、総量、実効帯域幅
- GPU-GPU 転送:P2P 帯域幅、NVLink と PCIe のトポロジーによる影響
- NCCL 集合通信:操作の種類、メッセージサイズの分布、レイテンシ
- 通信と計算の比率
GPU 計算
- SM 使用率、カーネル起動のオーバーヘッド
- メモリ帯域幅の使用率とピーク値の比較
ステップ 4:計測のガイドライン
対象にコードを挿入する場合:
- まず対象のコードを読み、理解します
- インライン編集より、ラップする方法(デコレーター、コンテキストマネージャー、単独のランナー)を優先します
- インライン編集が必要な場合は、明確に印を付けます(例:
# [PROFILE]コメント) - 観測者効果を最小限に抑えます — タイトな内部ループは計測せず、代わりにサンプリングします
- 結果は構造化ログに記録し、print 文をあちこちに散在させないでください
ステップ 5:プロファイリングを実行する
- 利用可能なツールとハードウェアのトポロジーを確認します
- 選択した方法を実行し、すべての出力を取得します
- 成果物(フレームグラフ、トレース、ログ)を
./profile_output/に保存します
ステップ 6:レポートを作成する
パート A — プロファイリング結果(該当する場合は、項目別に整理したテーブル):
- CPU オーバーヘッドのテーブル
- メモリオーバーヘッドのテーブル(重複の列を含む)
- インターコネクトのテーブル(転送タイプ/頻度/サイズ/レイテンシ/帯域幅)
- ホットスポット/ボトルネックの特定
- 期待される効果の大きさ順に並べた、実行可能な推奨事項
パート B — 計測の変更履歴(必須): プロファイリングのために変更または作成したファイルをすべて記載します。
| ファイル | 変更の種類 | 追加/変更した内容 | 行 |
|---|---|---|---|
| ... | 変更 | ... | ... |
| ... | 作成 | ... | — |
これにより、ユーザーは計測の変更をすべて確認し、元に戻せます。 作業が完了したら、計測の変更をすべて削除することを申し出てください。