# 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]]