Hugging FaceがPyTorchプロファイラ入門を公開
詳細を読む
Hugging Faceは2026年5月29日、PyTorchのプロファイリング入門ブログシリーズの第1回を公開しました。torch.profilerの使い方を、行列積とバイアス加算という最小構成の演算から段階的に解説する内容です。著者はAritra Roy Gosthipatyら5名で、NVIDIA A100 GPU上での実行トレースを題材に、プロファイラが出力するテーブルとトレースの読み解き方を丁寧に示しています。
記事ではまず64x64の小さな行列演算をプロファイリングし、CPU時間が2.3ms、GPU時間がわずか23μsとなるオーバーヘッド律速の典型例を示します。行列サイズを4096x4096に拡大すると、CPU・GPU双方がミリ秒オーダーとなり、計算律速へ移行することを確認しています。この比較を通じて、GPUが遊んでいるかどうかをプロファイラの数値から即座に判断する方法を読者に教えています。
トレースの可視化にはPerfetto UIを使用し、CPUレーンとGPUレーンの対応関係を視覚的に解説しています。初回ステップが長い理由として、cuBLASのヒューリスティクスやワークスペース確保といったコールドスタートコストを特定。ウォームアップの追加で計測対象から除外する手法も紹介されています。また、同一カーネルでも実行時間がばらつく現象について、GPUクロックや温度管理が原因であると指摘しています。
後半ではtorch.compileを適用した場合のトレースを分析しています。torch.add + torch.matmulがaten::addmmに統合されますが、これはディスパッチャレベルの融合であり、GPU上では依然として同じcuBLASカーネルが実行されます。バイアスのDevice-to-Deviceコピーが発生し、真のカーネル融合には至っていない実態が明かされています。
さらに、torch.compileのランタイムアーキテクチャとして、TorchDynamoのキャッシュルックアップ、AOTDispatcherのラッパー、CompiledFxGraphの実行という3層構造を解説しています。小規模な演算ではこれらのスタックがオーバーヘッドとなり、ステップあたりのCPU時間がeagerモードの約2倍に増加することも示されました。シリーズ第2回以降ではnn.LinearやLLMへと対象を拡大する予定です。