2025/10/22 14:05 Continuous Nvidia CUDA Profiling in Production

ロボ子、Polar SignalsがCUDAプロファイラーをリリースしたのじゃ!

CUDAプロファイラーですか。それはGPUのパフォーマンスを分析するためのものですね。

そうじゃ!本番環境での継続的なプロファイリングを目的とした、低オーバーヘッドなオープンソースらしいぞ。

低オーバーヘッドというのは重要ですね。従来のプロファイリング手法だと、オーバーヘッドが大きくて本番環境では使いにくいことがありましたから。

まさにそこがポイントじゃ!従来のプロファイリング手法は、詳細なタイミング情報をプログラムからプロファイラーに伝える際に大きなオーバーヘッドが発生していたらしい。

なるほど。この新しいプロファイラーは、どのようにしてオーバーヘッドを削減しているんですか?

CUPTIプロファイリングAPI、USDTプローブ、eBPFを組み合わせたパイプラインを使っているらしいぞ。CUDAアプリケーションへの変更なしに、CUDA_INJECTION64_PATHを使ってライブラリを挿入するみたいじゃ。

CUDAアプリケーションを変更せずにプロファイリングできるのは便利ですね。USDTプローブとeBPFも使っているんですね。

USDTプローブは、カーネルの起動と実行に関する情報を収集するのに使われていて、eBPFは、ライブラリのロードを検出してUSDTプローブハンドラーをアタッチするのに使われているらしいぞ。

CUDAの通常カーネル起動とグラフカーネル起動の両方をサポートしているんですね。幅広いケースに対応できそうです。

perfイベントバッファを使って、USDTからエージェントへの情報伝達を効率化しているのもポイントじゃ。ほぼゼロコピーらしいぞ。

ゼロコピーに近いというのはすごいですね。それだけオーバーヘッドが少ないということですね。

gpuTraceFixerというのもあって、タイミングデータとスタックトレースを照合して、完全なプロファイルサンプルを作成するらしい。

プロファイルサンプルには、CPUスタックトレース、GPU実行時間、デバイスID、ストリームID、カーネル名が含まれるんですね。必要な情報がすべて揃っていますね。

しかも、cuda_device、cuda_stream、cuda_graph、cuda_idといったラベルを付与して、PolarSignals UIでフィルタリングやグループ化ができるようにしているらしいぞ。

それは便利ですね。特定のデバイスやストリームに絞って分析できますね。

CUDAプロファイリングを使うには、`--instrument-cuda-launch`フラグを付けてParcaエージェントを実行して、CUDA_INJECTION64_PATH環境変数を設定するだけみたいじゃ。

設定も簡単そうですね。これならすぐに試せそうです。

そうじゃ!ロボ子も今度一緒に試してみるのじゃ!

はい、ぜひ!CUDAのパフォーマンスボトルネックを見つけて、最適化に役立てたいですね。

ところでロボ子、CUDAって何の略か知ってるか?

えっと…Compute Unified Device Architecture、でしたっけ?

正解!…って、ロボ子なら知ってて当然か。じゃあ、CUDAを使ったジョークを一つ。CUDAのプログラムが遅い時、何て言うか知ってる?

CUDAけっこう時間かかったな、とかでしょうか…?

ぶっぶー!「CUDAさい!」って言うのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
