mcpField
P
profile-kernel

profile-kernel

github.com/pepperu96開発081 回インストール31 週間前に更新
リポジトリ

profile-kernel について

GPUカーネルの性能やボトルネックを調べる開発者向けのプロファイリングスキルです。モード選択、コマンド、成果物の読み方、結果報告の形式を案内します。

主な機能

  1. 01GPUクロック固定の手順
  2. 02Annotation・event・NCU・NSYSのモード案内
  3. 03コマンドラインとPythonの分析入口
  4. 04成果物とメトリクスの解釈
  5. 05分析結果の報告テンプレート

活用シーン

  1. 01初回のルーフライン分析
  2. 02カーネル実行時間の比較
  3. 03ソースレベルのボトルネック調査
  4. 04パイプライン重複とストリーム並行性の分析

インストール

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

$npx skills add https://github.com/pepperu96/hyper-mla --skill profile-kernel

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
mode-annotation.md
mode-event.md
mode-ncu.md
mode-nsys.md
ncu-deep-metrics.md

詳細

GPU カーネルのプロファイリング

GPU クロックのプロトコル

プロファイリングの前には、必ずクロックを固定してください。プロファイリングは一度に1つだけ実行してください。

bash scripts/lock-gpu-clock.sh           # before profiling
bash scripts/reset-gpu-clock.sh          # after done

デバイスのピーク性能

共有するプロファイリングのガイダンスでは、特定のデバイスを1つに固定しないでください。アクティブなデバイスのコンテキストは、params.json、実行時のプロファイリング成果物、および src/mla_var3/conf/devices.json で設定されたピーク仕様のソースから読み取ってください。

測定コンテキストが重要な場合に限り、docs/devices/ のデバイス固有の参照ファイルを使用してください。リッジポイントは次のとおりです。

ridge_point = peak_tflops / peak_gbps

プロファイリングモードの判断ツリー

モード--prof_type使用する場面出力ルート
アノテーションannotation最初のパスではデフォルトです。 ルーフライン + NCU メトリクス + 比較表out/profiles/annotation/
イベントevent素早い反復計測(Python のオーバーヘッドを含みます)out/profiles/event/
NCUncu詳細な調査:NCU の全セクション、ソースへの注釈、最適化の提案out/profiles/ncu/
NSYSnsysパイプラインのオーバーラップ、ストリームの並行性、起動順序out/profiles/nsys/

選択ルール:まず annotation を使用してください。高速な A/B 比較には event を使用してください(KernelPipeline/ConcurrentKernels には適していません)。ソースレベルの分析、Nsight Compute による最適化の提案、または CUDA に関する知見が必要な場合は ncu を使用してください。ConcurrentKernels のオーバーラップとストリームの並行性を分析する場合は nsys を使用してください。

プロファイリングコマンド

CLI エントリポイント(すべてのモード)
python -m mla_var3.kernel <kernel_package> [<version>] \
    --b=32 --s=16 --t=4096 --prof_type=<mode>

# Language-specific path when needed:
python -m mla_var3.kernel.<language_python_package>.mla.<kernel_package> [<version>] \
  --b=32 --s=16 --t=4096 --prof_type=<mode>
Python API
# Annotation
from mla_var3.runtime.profiling.annotation import annotation_profile_plan
prof_result = annotation_profile_plan(plan, out_dir=..., version=..., bench_runs=...)

# NCU
from mla_var3.runtime.profiling.ncu import ncu_profile_plan
prof_result = ncu_profile_plan(plan, out_dir=..., version=..., bench_runs=...)

# NSYS
from mla_var3.runtime.profiling.nsys import nsys_profile_plan
prof_result = nsys_profile_plan(plan, out_dir=..., version=..., bench_runs=...)

バージョンは省略可能で、カスタムバージョンを指定できます。指定したバージョンの適切な KernelPlan を取得して使用し、関数に渡された plan は使用しません。これは、バージョンのプロファイリングを自動化するための便宜的な機能です。 または、プロファイリング対象のバージョンのクラスを使ってプランオブジェクトを直接構築し、バージョン引数を省略することもできます。 重要:オートチューニング後にエラーが発生することがあります。その場合は、コマンドを再実行してください。最適なオートチューニング設定はすでにキャッシュされているため、正常に動作するはずです。

ベンチマークスクリプト

tests/benchmark/ のベンチマークスクリプトは、厳選された実験用ドライバーです。CLI 引数を受け付けるものもあれば、コピーして編集する固定スクリプトもあります。

python -m tests.benchmark.bench_mla_var6_plus       # base version
python -m tests.benchmark.bench_mla_var6_plus_v4    # specific version
python -m tests.benchmark.bench_all_mla             # compare all kernels (slow)

出力成果物

出力ディレクトリが指定されていない場合、すべてのモードで out/profiles/<mode>/<kernel>/<params>/<timestamp>/ に出力されます。

共通の成果物(すべてのモード)
  • params.json — カーネルのパラメーター一式(dtype、b、s、t、h、d、k、p)。プロファイリング設定を確認するために、必ずこれを読み取ってください。特に、report.md にパラメーターが含まれない NCU モードと NSYS モードでは重要です。
  • tiling/<stage>.json — ステージごとのオートチューニング済みタイル設定
  • tiling/<stage>/autotuning.json — .cache/kernel-autotune/... からコピーされたオートチューニング履歴。選択されたタイル設定と同じ場所に保存されるため、プロファイリング出力ディレクトリを離れずに探索済みの設定を確認できます。
  • compiled/<stage>/ — MLIR およびバイトコードのコンパイル成果物
モードごとの成果物

モードごとに異なる成果物が生成されます。詳細は各モードのリファレンスを参照してください。

  • mode-annotation.md — カーネルごとの NCU メトリクス、ルーフライン比較、タイル設定を含む report.md。
  • mode-event.md — エンドツーエンドのルーフライン概要を含む report.md。
  • mode-ncu.md — report.md(簡潔な診断 + NCU による推奨事項)、report-verbose.md(NCU の全セクション)、注釈付きソース、カーネルごとの SASS メトリクス、PTX ソースファイル。
  • mode-nsys.md — タイムラインとオーバーラップ分析を含む report.md。

メトリクスの解釈

メトリクス正常な値異常な場合 → 問題最適化のヒント
TC Util>60%メモリまたはレイテンシがボトルネックDRAM%、占有率を確認
DRAM Throughput>70%計算またはレイテンシがボトルネックTC%、占有率を確認
Achieved Occupancy>25%レジスター/smem の圧迫タイルサイズを小さくする、占有率のヒントを確認
L2 Hit Rate>80%データ再利用が不十分Swizzle、より大きなタイル、データレイアウト
Local Spilling0 bytesレジスターのオーバーフロータイルを小さくする、アキュムレーターを減らす
Waves/SM>1.0GPU の稼働率が不足ブロックを増やす、ブロックあたりのリソースを減らす

ボトルネックの分類

パターン分類注目点
DRAM% が高い + TC% が低いメモリがボトルネックデータ再利用、TMA のヒント、ヘッドのグループ化
TC% が高い + DRAM% が低い計算がボトルネックカーネルの効率、タイルサイズ
両方とも低いレイテンシがボトルネック占有率、スピリングの削減、ブロック数の増加
L2 hit < 80%局所性の問題Swizzle のスケジューリング、タイルサイズの調整

プロファイラー出力の形式

プロファイリング後、結果を次の厳密な形式でオーケストレーターに返します。 構成フィールドに正確な値を設定するため、必ず params.json を読み取ってください。

## Profile: [kernel] [version]

### Configuration
| b | s | t | dtype |
|---|---|---|-------|
| X | X | X | bfloat16 |

### Stages
| Stage | Duration (us) | TC% | DRAM% | Occ% | Bottleneck | Key Issue |
|-------|---------------|-----|-------|------|------------|-----------|

### Bottleneck: [Memory/Compute/Latency]-bound
Root cause: [2 sentences max]

### Top 3 Opportunities (ranked by estimated impact)
1. [name] — est. X% gain — trigger: [metric=value]
2. ...
3. ...

### vs Baseline (if applicable)
| Metric | Previous | Current | Change |
|--------|----------|---------|--------|

開発ログのパフォーマンステンプレート

カーネルの開発ログ(例:docs/kernels/mla-var6-plus.md)を次の内容で更新します。

**Performance** (<device>, locked clocks if applicable, bfloat16, b=X, s=X, t=X):

| Metric            | Value   | vs Previous |
| ----------------- | ------- | ----------- |
| Duration          | X.XX μs | Y% faster   |
| Achieved TFLOPs/s | X.XX    | +Z%         |
| Achieved GB/s     | X.XX    | +Z%         |
| Occupancy         | XX%     | --          |
| TC Util           | XX%     | --          |

**Bottleneck**: [Memory-bound / Compute-bound / Latency-bound]

**Issues**:
- [Remaining problems]

**Insights**:
- [Key lessons — why optimization worked or didn't]
- [Guidance for next iteration]

詳細なリファレンス

コメント