tilegym-improve-cutile-kernel-perf について
GPUカーネル開発者向けに、TileGymのcuTileカーネルを段階的に分析・最適化するスキルです。各反復で変更を1つに絞り、正確性テスト、レイテンシ測定、実験ログで結果を追跡します。
主な機能
- 01GPUとカーネルのベースライン設定
- 02演算強度に基づく調整優先度の分類
- 03反復ごとに1つのcuTile最適化を適用
- 04正確性テストとレイテンシ測定の実行
- 05Markdown表で実験結果を記録
活用シーン
- 01TileGymのcuTileカーネルのレイテンシ削減
- 02正確性を確認したベースラインとの最適化比較
- 03カーネル調整実験の記録
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nvidia/ skills --skill tilegym-improve-cutile-kernel-perfインストール後、Claude Code で/tilegym-improve-cutile-kernel-perfを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
BENCHMARK.mdskill-card.mdskill.oms.sigevals/evals.jsonreferences/cutile-api-reference.mdcutile-patterns-reference.mdir-dump-guide.mdoptimization-playbook.mdperf-knobs-catalog.mdperformance-model.md詳細
cuTile カーネルの反復的なパフォーマンス最適化
TileGym リポジトリで、cuTile カーネルのパフォーマンスを体系的にプロファイリングし、ボトルネックを診断して、反復的に調整します。
手順
次の3つのフェーズを順番に進めます。環境とベースラインをセットアップし、記録したログを使って実験ループを実行した後、パフォーマンス目標を達成するか、改善が頭打ちになるまで実験ループを繰り返します。
セットアップ
最適化環境を準備するため、ユーザーと作業します。
-
新しい git ブランチを作成します。ブランチ名(例:
cutile-perf-<kernel_name>-<date>)を現在のブランチから作成するよう提案します。git checkout -b <branch name>でチェックアウトします。 -
対象のカーネルを特定します。
- cuTile カーネルは
src/tilegym/suites/<suite>/cutile/またはsrc/tilegym/ops/cutile/の下にあります。 - カーネルファイルを読み、次の項目を特定します。
@ct.kernelデコレーターが付いた関数、起動ラッパー(ct.launch()またはct_experimental.autotune_launch())、@register_impl登録、および現在の自動チューニング設定(ある場合)。
- cuTile カーネルは
-
カーネルを分類します。
- Arithmetic Intensity < 10 → メモリバウンド
- Arithmetic Intensity 10-50 → バランス型
- Arithmetic Intensity > 50 → コンピュートバウンド
注:分類は、実験ループで最適化の優先順位を決めるためだけに使用します。コア指標は常に
latency (ms)です。 -
GPU 環境を確認します。
- GPU ノード(Blackwell または Ampere GPU)が利用可能であることを確認します。
- 以降のベンチマークコマンドはすべて GPU ノードで実行します。
-
関連するリファレンスを確認します。
references/optimization-playbook.md:最適化ごとの手順(A から J)と、変更前後のコード例references/perf-knobs-catalog.md:調整可能なパラメーターの完全な一覧(TMA、永続スケジューリング、占有率、タイルサイズ、レイテンシヒントなど)references/cutile-api-reference.md:cuTile API リファレンスと重要な18のルールreferences/performance-model.md:Roofline/パフォーマンスモデル、ボトルネック診断、自動チューニングreferences/ir-dump-guide.md:IR ダンプ、分析、エラー診断references/cutile-patterns-reference.md:一般的な cuTile パターンと変換のクイックリファレンス
-
進捗を記録するために
@sandbox/perf_results.mdを作成します。最初の実行でベースラインを記録します。 -
確認を得て開始します。確認後、実験を開始します。
実験
各実験の反復では、対象カーネルに最適化を1つ適用し、正しさを検証して、ベンチマークを再実行し、結果を記録します。各反復は10分以内に完了するようにします。
目標
- コア指標を改善します。
latency (ms)を短縮します。 - コア制約を守ります。正しさを損なってはなりません。すべての最適化で数値的な正しさを維持する必要があります。
latency (ms)がベースラインと比べて2%を超えて悪化してはなりません。
変更できる項目
src/tilegym/suites/<suite>/cutile/またはsrc/tilegym/ops/cutile/の対象カーネルファイル:カーネル本体、タイルサイズ、占有率、num_ctas、TMA の使用、レイテンシヒント、flush_to_zero、自動チューニング設定、永続スケジューリング、その他の cuTile 固有パラメーター- カーネルの起動ラッパー:グリッド計算、自動チューニング設定空間
- @sandbox/:新しいファイルの追加や、自分が作成したファイルの変更は自由ですが、git に追加しないでください。
変更できない項目
- カーネルの機能的な意味(入力、出力、許容誤差内での数値的な動作)
- テスト基盤とベンチマークハーネス
- 上記に記載されていないもの
実験出力の内容
正しさのテスト:
python -m pytest tests/suites/.../test_<kernel_name>.py -k "test_ and cutile and not test_perf" -v
パフォーマンスベンチマーク:
各反復で次の操作を行います。
- pytest ベンチマークを実行します:
python -m pytest ... --print-record→latency (ms)を抽出します。 - latency を
perf_results.mdに記録します。
ベンチマークコマンドライン:
python -m pytest tests/suites/.../test_<kernel_name>.py -k "test_perf and cutile" --print-record -v
latency のサンプル:
Cutile: {'forward': {'mean': 3.7903138461538455, 'std': 0.0016941310873207053, 'rel_std': 0.044696327430505396, 'median': 3.789880999999999, 'min': 3.7883389999999992, 'max': 3.7941230000000004, 'nrep': 13, 'peak_mem_mb': 913}} ms
実験の進捗を記録する
各イテレーションの結果を @sandbox/perf_results.md に記録します。ファイルには、次の 5 列からなる Markdown テーブルのみを記載してください。
iteration:イテレーション番号。0(ベースライン)から開始しますoptimization:適用した内容(例:「baseline」、「TMA replace gather」、「persistent scheduling」)latency_ms:カーネルのレイテンシー(ミリ秒)、小数点以下 6 桁correctness:PASS または FAILstatus:このイテレーションがkeep、revert、crashのいずれだったか
記入例:
| iteration | optimization | latency_ms | correctness | status |
|----------:|:-------------------|-----------:|:------------|-------:|
| 0 | baseline | 0.820000 | PASS | keep |
| 1 | TMA replace gather | 0.390000 | PASS | keep |
ファイルが空の場合は、テーブルのヘッダーを作成してください。イテレーションごとに 1 行追加します。
ベースライン
最初のイテレーション(イテレーション 0)ではコードを変更せず、正確性テストとパフォーマンスベンチマークを実行するだけです。結果はベースラインとして最初の行に記載します。
実験ループ
基本的な手順は、プレイブックからイテレーションごとに最適化を 1 つ適用し、正確性を検証し、ベンチマークを実行して、採用するか元に戻すかを判断することです。一度に試す最適化は 1 つだけにし、実験記録を整理してください。
ループ:
-
Git のステータスを確認します。現在の Git ブランチ/コミットを確認します
-
references/optimization-playbook.mdから最適化を 1 つ選択して適用します。 -
正確性を検証します。失敗した場合は、直ちに元に戻します。よくある原因:
flush_to_zero/rounding_mode=APPROXによる結果の変化、タイルサイズの OOB、allow_tma=Falseのセマンティクス、永続ループの境界条件の誤り -
再度ベンチマークを実行し、現在のベースラインと比較します
-
Git にコミットします
-
結果を @sandbox/perf_results.md に記録します
-
判断基準:
結果 対応 改善( latency (ms))が 5% 以上新しいベースラインとして採用し、続行します 改善が 2~5% 採用します。次のイテレーションでは優先度を下げます 改善が 2% 未満 採用しますが、ユーザーが続行を希望しない限り停止します いずれかの構成で性能が低下 直ちに元に戻し、次の最適化を試します 2 回連続のイテレーションで改善がない 停止します 根本原因が schedulingまたはunknownユーザーにエスカレーションします -
採用する場合はベースラインの数値を更新してループを続けます
-
元に戻す場合は、開始時点まで Git をリセットし、優先順位に従って次の最適化を試します 終了条件:すべての試行が完了した場合、25 回を超えるイテレーションが行われた場合、またはユーザーが中断した場合
自律的に進めてください:セットアップ段階では、ユーザーに確認を求めてください。実験ループに入ったら、ユーザーのフィードバックを求めるために立ち止まらないでください。判断には最善の判断を用い、最適化プレイブックとパフォーマンス調整項目カタログを速やかに参照し、行き詰まった場合はさらに深く考えてください。