# LLMの学習ステップ時間を非侵入的に計測するには 結論として、**ステップ時間そのものを常時計測したいなら、NCCL 呼び出しの動的フックを反復境界として使い、RDMA の完了・トラフィックを補助信号にする構成が最も現実的である**。eBPF は実装手段として有望だが、ホスト側だけでは GPU の実行完了を直接見られないため、CUDA API の投入時刻だけをステップ時間とみなしてはならない。 ## 推奨構成 1. **反復境界を定義する** - Megatron-LM などでは、各 rank の反復で繰り返される NCCL の集合通信 API(`AllReduce`、`AllGather`、`ReduceScatter`、`Send`、`Recv`)を `uprobe` 相当の動的フックで捕捉する。 - 最初の境界イベントから次反復の同じイベントまでを rank ごとのステップ時間として記録する。並列方式・マイクロバッチ・パイプライン段は設定として別途与え、全 rank の中央値・最大値・ばらつきを保存する。 - MEGATRACE はこの狭い観測点で API の時刻・ストリーム・rank・ペイロードを取得し、訓練設定と合わせて反復の依存グラフを復元する。訓練フレームワークの改変を要さず、報告された性能オーバーヘッドは 0.16% である。(Source: [[@2026__ICDCS__MEGATRACE - Troubleshooting Hang and Slowdown in Large-scale LLM Training Clusters]]) 2. **通信完了を RDMA 側で確認する** - `ibv_post_send` と `ibv_poll_cq` をフックし、Work Request の発行・完了数と時刻を取る。これで「CUDA/NCCL 呼び出しを発行した時刻」と「通信が実際に進んだ時刻」を区別できる。 - 通信ストラグラーを詳細に追う必要がある場合は、RNIC 上で per-QP の RDMA レートをマイクロ秒粒度で測る Pulse 型が適する。Pulse は訓練コードと NCCL を改変せず、関数フックで得た最小限の通信文脈を RDMA フローに対応付ける。(Source: [[@2026__ASPLOS__Pulse - Fine-grained and Non-intrusive LLM Training Monitoring via Microsecond-level Traffic Measurement]]) 3. **eBPF はホスト側の実装に用いる** - `libcudart.so` の `cudaLaunchKernel`、`cudaEventRecord`、`cudaEventSynchronize`、`cudaStreamSynchronize`、`cudaMemcpy` へ uprobe/uretprobe を付ければ、コード改変なしに投入・同期・転送の時系列を収集できる。(Source: [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]]) - ただし `cudaLaunchKernel` は非同期の**投入**であり、GPU カーネルの完了時刻ではない。同期 API または NCCL/RDMA 完了信号と結合して初めて、実時間に近いステップ時間になる。 ## 計測粒度ごとの選択 |目的|観測点|得られる値|注意点| |---|---|---|---| |常時のステップ時間・遅い rank の検知|NCCL API フック|反復境界、rank 別時間、集合通信の待ち|計算カーネル内部の時間は直接分解できない| |通信原因の切り分け|RDMA verbs + RNIC/QP レート|発行・完了、通信量、マイクロ秒級の空隙|SmartNIC/RNIC 側の導入可否が制約| |軽量な導入検証|CUDA API への eBPF uprobe|カーネル投入、同期、転送、エラー|GPU 完了の直接観測ではない| |GPU カーネル内まで細分化|PTX 注入型 eGPU|メモリアクセス、帯域、カーネル内の信号|ワークショップ論文の初期評価であり、運用実証は限定的 (Source: [[@2025__HCDS__eGPU - Extending eBPF Programmability and Observability to GPUs]])| ## 最小実装案 - eBPF の uprobe で NCCL API と CUDA 同期 API、必要なら RDMA verbs を捕捉する。 - `(rank, stream, API種別, 時刻, payload)` をリングバッファへ出し、ユーザー空間で反復番号を推定する。 - 同一 rank の反復時間、全 rank の最大値、p50/p95、rank 間スキューを算出する。 - ステップ時間が閾値を超えたときだけ RDMA/QP の細粒度収集を有効化し、通常時のオーバーヘッドを抑える。 この構成は「完全に計装ゼロ」ではなく、**アプリケーションと訓練フレームワークの改変なし**という非侵入性である。eBPF だけで GPU 内部実行を正確に測ることはできないため、厳密な GPU 実行時間が必要なら CUDA Event/CUPTI 等との照合が必要になる。 ## 出典 - [[@2026__ICDCS__MEGATRACE - Troubleshooting Hang and Slowdown in Large-scale LLM Training Clusters]] - [[@2026__ASPLOS__Pulse - Fine-grained and Non-intrusive LLM Training Monitoring via Microsecond-level Traffic Measurement]] - [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]] - [[@2025__HCDS__eGPU - Extending eBPF Programmability and Observability to GPUs]]