研究オープンソース 🇺🇸 29.07.2026 23:03

PyTorch でのプロファイリング(第3回):アテンションこそプロファイリングの要

PyTorchPyTorch NVIDIANVIDIA
この記事では、PyTorch におけるアテンション機構のプロファイリングを行い、ナイーブなアテンション、インプレース最適化、Scaled Dot Product Attention(SDPA)バックエンドを比較します。SDPA の math バックエンドは、Tensor Core の未活用、マスクの再構築、セーフソフトマックスのオーバーヘッドにより、ナイーブなアテンションよりも遅いことが明らかになります。
PyTorchのプロファイリングシリーズ第3回では、アテンション機構のプロファイリングを行います。まず、単純なアテンションモジュール(matmul、スケーリング、マスキング、ソフトマックス、matmul)から始め、そのトレースからフォワード処理ごとに5つのGPUカーネルが起動されていることが分かります。インプレースでないmasked_fillをインプレースのmasked_fill_に置き換えることで、メモリコピーカーネルが1つ削減され、時間とメモリを節約できます。次に、スケーリングドット積アテンションが導入されます。その数学バックエンドは、より安全(NaNケースに対応)でより高精度(FP32)ですが、20個のGPUカーネルを起動し、テンソルコアを使用せず(bf16テンソルコアmatmulの代わりにsgemmを使用)、コールごとに因果マスクを再構築し、_safe_softmaxを使用するため、単純なアテンションより3.7倍遅くなります。この投稿では、スケーリングドット積アテンションが通常、最速のバックエンドを自動的に選択することに注意しています。
出典: Hugging Face blog — 原文
関連記事 ↓
新着ニュース