萌えハッカーニュースリーダー

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

出典: https://www.polarsignals.com/blog/posts/2025/10/22/gpu-profiling
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

ぶっぶー!「CUDAさい!」って言うのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search