# CUDA API トレース ## 定義 CUDA API トレース(CUDA API tracing)とは、[[CUDA]] ランタイムライブラリ `libcudart.so` やドライバ API の呼び出しを傍受し、GPU アプリケーションのメモリ割当・データ転送・カーネル起動・同期・デバイス操作を外部から可視化する手法である。ソースコード改変やプロプライエタリプロファイラへの依存を避けるため、eBPF の [[uprobe]] が頻繁に使われる。(Source: [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]]) ## 横断的知見 - **CPU 側傍受は「リクエスト単位」の観測であり、GPU 内部の実行詳細とは異なるレイヤー**: eBPF uprobe による CUDA API トレースは、`cudaLaunchKernel` の発行時刻や引数を捉えられるが、実際の SM 占有率・ワープ分岐・メモリアクセスは見えない。このため、ホスト側トレース(eInfer/ProfInfer/eunomia-bpf tutorial)とデバイス内計装(eGPU/bpftime)は補完的な 2 層として整理される。(Source: [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]], [[@2025__eBPF__eInfer - Unlocking Fine-Grained Tracing for Distributed LLM Inference with eBPF]], [[@2025__HCDS__eGPU - Extending eBPF Programmability and Observability to GPUs]]) - **CUDA API トレースのオーバーヘッドは実用上無視できる水準に達しつつある**: eunomia-bpf の実装例では 1,024 KiB・10,000 イテレーションのベンチマークで、CUDA API 呼び出しあたり約 2 µs の追加レイテンシを報告している。eInfer では 4% 未満、ProfInfer では 5% 未満の速度低下という独立した実装群も同様の低オーバーヘッドを主張する。(Source: [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]], [[@2025__eBPF__eInfer - Unlocking Fine-Grained Tracing for Distributed LLM Inference with eBPF]], [[@2026__MLSys2026__ProfInfer - An eBPF-based Fine-Grained LLM Inference Profiler]]) - **トレース対象関数がライフサイクルをカバーする**: メモリ管理(`cudaMalloc`/`cudaFree`)、転送(`cudaMemcpy`)、カーネル起動(`cudaLaunchKernel`)、ストリームとイベント、デバイス選択の 5 グループを計測することで、GPU 利用の入出力パターンを再構成できる。(Source: [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]]) - **非同期境界を越えるためには、ストリーム・イベントとの相関が必要**: CUDA API トレースは enter/exit の時系列を出すが、非同期実行の完了順序や依存関係を正しく解釈するには、ストリームハンドルやイベントハンドルの識別が不可欠である。(Source: [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]]) - **eBPF uprobe 以外にも、CUPTI コールバック/アクティビティ API による CUDA API トレースが実運用で使われている**: 本ページはこれまで eunomia-bpf・eInfer・eGPU という eBPF uprobe ベースの実装のみを扱ってきたが、[[@2026__arXiv__TELLER - Non-intrusive Cross-Layer Root-Cause Analysis for LLM Inference]](TELLER)は CUPTI のコールバック/アクティビティレコードでランタイム/ドライバ呼び出しと GPU カーネルを捕捉し、相関 ID(cid)でホスト呼び出しとカーネルを束縛する($\Gamma(a) = \{k \in K \mid (a.tid,a.cid)=(k.tid,k.cid) \land \tau(a)\le\tau(k)\}$)。eBPF uprobe が「ソース変更なしに任意の CUDA API 呼び出し点にフックできる」柔軟性を持つのに対し、CUPTI は NVIDIA 公式のコールバック機構であり、両者は「ベンダー非依存の任意フック」対「ベンダー公式 API の構造化コールバック」という異なるトレードオフを持つ。TELLER は非同期境界の相関を CUPTI の cid で解決しており、本ページが未解決の問いとして挙げてきた「ストリーム・イベントとの相関」の一つの実装解になっている。(Source: [[@2026__arXiv__TELLER - Non-intrusive Cross-Layer Root-Cause Analysis for LLM Inference]] §3.3) ## 未解決の問い - CUDA API トレースのイベントを、[[分散トレーシング]]のスパンや ML フレームワークの演算子履歴と自動的に結合する識別子は何か。 - ホスト側 API トレースだけで、GPU 内部のボトルネック(メモリアクセス非連続化、スレッドダイバージェンス)をどの程度推定できるか。 - 大規模 GPU クラスタ([[GPUクラスタ運用]])で、全プロセスの CUDA API トレースを常時収集した場合のオーバーヘッドとストレージコストはどう見積もるか。 ## 関連 - 概念: [[CUDA]] / [[eBPF]] / [[uprobe]] / [[GPU観測性]] / [[動的計装]] / [[リングバッファ]] - エンティティ: [[eunomia-bpf]] / [[bpftime]] / [[libbpf]] / [[NVIDIA]] - ソース: [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]] / [[@2025__eBPF__eInfer - Unlocking Fine-Grained Tracing for Distributed LLM Inference with eBPF]] / [[@2025__HCDS__eGPU - Extending eBPF Programmability and Observability to GPUs]] / [[@2026__MLSys2026__ProfInfer - An eBPF-based Fine-Grained LLM Inference Profiler]] / [[@2026__arXiv__TELLER - Non-intrusive Cross-Layer Root-Cause Analysis for LLM Inference]] - 関連 MOC: [[AI Infra Telemetry - MOC]]