Communityコーディング&開発github.com

cj401-amd/investigating-jax-traces

jax.profiler.trace() または XProf キャプチャ(xplane.pb、trace.json.gz)の詳細調査に使用します。クイックな判定ではなく、ステップ高速化のための変更点、各GPUストリーム上の演算子、GPUカーネルとHLO演算およびPythonソース行の対応付け、GPU間のクリティカルパスとストラグラー、トレースが信頼できない箇所(HIP/CUDAグラフ(XLAコマンドバッファ)カーネルが command_buffer_N とラベル付けされている場合を含む)を特定します。

investigating-jax-traces とは?

このスキルは、JAX プログラムのパフォーマンスプロファイリングデータ(XProf キャプチャ)を深く調査するための包括的な7ステップの手法を提供します。ユーザーが提供した `<host>.xplane.pb` や `<host>.trace.json.gz` ファイルのみを解析し、ワークロードの再実行やXLAダンプ、別のプロファイラの実行は不要です。スキルは、判定(verdict)、データの整合性確認(reconciliation)、スイムレーン分析、GPUカーネルからHLO命令、Pythonソース行への属性付け、ルーフラインモデル、具体的な変更提案、そしてトレースの信頼性評価の7ステップで構成されています。特に、XProfの落とし穴(グラフカーネルの欠落、ルーフラインのピーク値、非同期コレクティブの扱いなど)を明示し、不確かな点は「信頼できないリスト」に記録するよう促します。このスキルは、`analyzing-jax-launch-overhead` スキルと連携し、`skip_stats.py` と `attribute_kernels.py` の2つのスクリプトを提供します。前者は標準ライブラリのみで動作し、大まかな判定とストリーム別時間予算を算出します。後者は `jax` と `xprof` パッケージを必要とし、GPUカーネルをHLO命令、op_name、Pythonソース行に紐づけます。このツールは、Claude Code、Cursor、Codex などの AI エージェントが、JAX トレースの詳細で正確な分析レポートを生成するために設計されています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/cj401-amd/jax-trace-analysis/tree/HEAD/skills/investigating-jax-traces

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

JAX トレースの調査

概要

1回のキャプチャに対する7ステップの調査: 判定、整合性確認、スイムレーン、 カーネル → HLO → Python行、ルーフライン、変更点、信頼性リスト。

すべてはユーザーが提供したキャプチャから取得: <host>.xplane.pb および/または <host>.trace.json.gz。ワークロードを再実行したり、XLAをダンプしたり、別のプロファイラを実行したりしないでください。 トレースで回答できない部分は、「信頼できないリスト」に追加します。

目標

レポート終了後、読者は以下を理解している必要があります:

  • (a) ステップを高速化するための変更点(推定値とその前提条件を付記)
  • (b) このトレースが属性付けをサポートできない箇所(カウント付き)

ツール

スクリプトのパスは、このスキルのベースディレクトリ(スキル読み込み時に表示されるディレクトリ)からの相対パスです。 スクラッチディレクトリから実行してください: 両方のスクリプトは出力を現在のディレクトリに書き込みます。

B=<this skill's base directory>
python3 -P $B/../analyzing-jax-launch-overhead/scripts/skip_stats.py <capture>/<host>.trace.json.gz
python3 -P $B/scripts/attribute_kernels.py <capture dir> [--program ID] [--user-re REGEX]
  • skip_stats.py (標準ライブラリのみ): 判定、ストリーム別時間予算、 アイドル時間中のホストイベント、および SKIP ペーパーの指標。読み方: analyzing-jax-launch-overhead スキルを参照。
  • attribute_kernels.py (jax および xprof パッケージが必要): すべての GPU カーネル → HLO 命令 → op_name → Python行。.xplane.pb のみを読み取り、 最初に ./attribution/xplane/ にコピーします(XProf が HLO proto をその隣に書き込むため)。 kernels.csv、ops.csv、lines.csv、how.csv、summary.txt、および プログラムの HLO テキストを ./attribution/ に書き込みます。
    • exact: トレーサー自身の hlo_op(呼び出しごとに1つのカーネルが起動される場合)。
    • name: 名前がウィンドウ内の唯一の候補であるグラフカーネル。
    • order: スケジュール順にマッチングされた共有カーネル、ライブラリ GEMM、コピー、コレクティブ。
    • none: 候補なし。
    • ウィンドウは、プログラムのスケジュールにおいて、隣接する exact カーネル間の命令で構成され、 while ループは既知のトリップカウントで展開されます。
    • 検証: MiniGPT キャプチャでは、コマンドバッファをオフにした同一プログラムの実行と 100%一致したパイプラインとして、147,840 すべてのカーネルに対して同じ命令を選択しました。

5つのテクニック(各テクニックに対応するツール)

分野テクニックここでのツール
パフォーマンスエンジニアリングクリティカルパス; ルーフラインskip_stats.py からのストリーム予算; 適切なピークを使用したルーフラインのみ(トラップ参照)
分散トレーシング相関IDによるホストイベントとGPUイベントの結合; ストラグラーの特定skip_stats.py → rows.csv; GPU間のステップ終了時刻のばらつき
コンパイラコンパイラパスを通じたソースの来歴attribute_kernels.py → lines.csv
フォレンジック会計独立したレコード間で合計が一致する必要があるステップ2のチェック
情報設計GPUストリームごとに整列したスイムレーン1つのステップで、すべての GPU × ストリームを1つの時間軸上に表示

ステップ

計画は以下の7ステップで、すべて指定されたファイルに対して実行します。新しいキャプチャでのみ回答できる質問 (ホストコールの内部動作、修正の効果、バッチスイープ)は、ステップ7の「新しいキャプチャが必要」リストに追加し、 キャプチャするかどうかはユーザーの判断に委ねます。

  1. 判定とホスト側原因: skip_stats.py を実行します。
  2. 整合性確認. 各チェックは成立するか、信頼性リストに追加されます:
    • デバイスあたりのGPUイベント数: json = xplane;
    • すべてのGPUイベントは、1つのホスト起動呼び出しに結合する;
    • ステップあたりのカーネル数は一定;
    • すべてのGPUが同じ作業を行う(ステップあたりのカーネル数が等しいか、差異が説明されている);
    • 各ストリームについて、計算 + コレクティブ + memcpy + アイドルのシェアがスパンに合計される。
  3. スイムレーン. 中央値のステップについて、すべての GPU × ストリームを1つの時間軸上に配置し、 さらに起動スレッドのホストイベントも追加します。これにより、クリティカルパスとストラグラーが表示されます: どのGPUが最後に終了するか、そのGPUが何を待っているか。
  4. カーネル → HLO → Python行: attribute_kernels.py を実行します。
    • GPU時間における各マッチクラスのシェアと、候補なしのカーネルを報告します。
    • lines.csv と ops.csv を行単位および演算単位のテーブルに使用します。
    • --user-re は、どのフレームをユーザーコードとしてカウントするかを指定します。 デフォルトでは、site-packages と jax の外側の最初のフレームです。
  5. ルーフライン(HLO 形状から FLOP とバイト数を取得できる演算のみ): attribute_kernels.py が ./attribution/ に書き込む <program>(<id>).hlo.txt を使用します。 演算のデータ型のピーク(ベンダー仕様から引用し、読み取り値 とラベル付け)を使用します。 トレースはピークを測定できません。
  6. 変更点. クリティカルパスにおける原因のシェアでランク付けします。 各原因について、それがなくなった場合のステップ時間を推定します(例: クリティカルストリーム上の step − ホストアイドル)。 推測値、未実行 とラベル付けし、ユーザーがテストするための仮説として調整パラメータを指定します (donate_argnums、コマンドバッファオフ、少ないまたは大きなコレクティブ)。
  7. このトレースが信頼できない箇所: 各項目をカウントまたはシェアとともにリストします。その後、「新しいキャプチャが必要」リストを追加します: 未解決の質問と、それを回答するためのキャプチャ。

トラップ(ROCm MI355X キャプチャで測定)

  • XProf の演算ビューはグラフカーネルを除外します。 hlo_stats は、4-GPU キャプチャで GPU カーネル時間の37.6%しかカバーしませんでした。残りの62.4%(コマンドバッファカーネル)は kernel_stats に演算

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル