High-Performance FP16 General Matrix Multiplication on NVIDIA Ada Lovelace via CUTLASS and WMMA: A Benchmark and Pipeline-Depth Analysis
この論文は、NVIDIAのAda Lovelaceアーキテクチャに基づくRTX 4060におけるFP16 GEMMの性能をcuBLAS、CUTLASS、およびカスタムWMMA実装を用いてベンチマークしており、特定のタイルジオメトリを用いたパイプライン深度3がピークスループットの52.7%を達成することを示すとともに、さらなる最適化を制限している主要なボトルネックはパイプライン深度ではなく共有メモリの圧力であることを明らかにしている。
原論文は CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
超高速なキッチン(GPU)と、その中で働く専門のシェフたち(テンソルコア)を想像してみてください。彼らは食材を刻んだり混ぜたりする(行列演算)のが非常に得意で、巨大な宴会(ディープラーニング)の準備を進めています。新しい「Ada Lovelace」製のコンロ(RTX 4060 グラフィックスカード)を備えたこのキッチンは、理論上 60.55 TFLOPS(毎秒60.55兆回の演算が可能)の能力を持っています。
しかし、ここには落とし穴があります。シェフたちがそれだけの速さで刻める能力があったとしても、実際にその速さで刻めているとは限りません。彼らはしばしば、パントリーから食材が届くのを待たなければならないからです。
大規模な実験:シェフをいかに忙しくさせるか
研究者たちは、シェフの手を止めさせないためにキッチンをどのように構成するのがベストかを突き止めようとしました。彼らは、キッチンを動かす3つの異なる方法をテストしました。
- ブラックボックス (cuBLAS): NVIDIAが提供する、パッケージ化されたクローズドソースのレシピです。通常は非常に優れた働きを見せますが、詳細を微調整することはできません。
- オープンな設計図 (CUTLASS): 柔軟なオープンソースのツールキットで、ゼロから自分専用のキッチン・レイアウトを構築できます。
- DIYアプローチ (WMMA): シェフの一挙手一投足を完全にコントロールできるカスタムメイドのキッチンですが、構築するのは非常に困難です。
彼らは、食材のサイズを 8192 × 8192 に設定し、異なる「パイプラインの深さ(pipeline depth)」で調理チャレンジを行いました。パイプラインの深さとは、キッチンに常に用意しておく食材トレーの数だと考えてください。
- 深さ 2: 用意されたトレーは2枚。
- 深さ 誤差 3: 用意されたトレーは3枚。
- 深さ 4: 用意されたトレーは4枚。
一般的な常識(および単純な数学モデル)では、**「トレーが多いほど、スピードは上がる」**と考えられていました。その論理はこうです。「もしトレーが増えれば、シェフは食材切れを起こさなくなるので、より速く働けるはずだ」というものです。
驚きの結果:増やすことが裏目に出る
研究者たちが速度を測定したところ、以下の結果が得られました。
- 深さ 2: キッチンは 25.6 TFLOPS で動作しました。シェフたちは待ちぼうけを食らっていました。
- 深さ 3: キッチンは 31.9 TFLOPS まで加速しました(これは理論上の最大値の 52.7% です)。ここが「スイートスポット」でした!
- 深さ 4: キッチンは逆に 3回 31.1 TFLOPS へと減速してしまいました。
これが主要な発見です: 4枚目のトレーを追加しても効果はなく、むしろ悪化させました。単純な数学モデルでは、速度は 35.4 TFLOPS まで跳ね上がると予測されていました。しかし、実際にはなりませんでした。モデルの予測は 13.8% 外れていたのです。
なぜトレーを追加すると逆効果になったのか?
論文では、キッチンには限られたスペースがあることが説明されています。4枚目のトレーを追加したことで(共有メモリの使用量が 96 KB に増加)、同時に作業できる調理チーム(スレッドブロック)の数を減らさざるを得なくなりました。
- 深さ 3 のとき、キッチンには各コンロに 2チーム のシェフが収まっていました。
- 深さ 4 になると、キッチンには 1チーム しか収まりませんでした。
たとえ1チームあたりの食材は増えたとしても、作業が滞ったときに交代できるチームの数が減ってしまったため、結果として遅くなってしまったのです。キッチンは食材によって「混雑」しましたが、働き手は「空洞化」してしまいました。研究者たちは、占有率(occupancy:どれだけのチームが動いているか)が低下し、シェフたちが使う「レジスタ(個人のメモ帳)」が増えたことも、速度低下の原因であると測定しました。
勝者と敗者
- 勝者: CUTLASS ツールキットの、深さ 3 かつタイルサイズ 256 × 128 の組み合わせです。これは 31.9 TFLOPS を叩き出しました。これは標準的な「ブラックボックス」(cuBLAS)をわずかな差(ほぼ誤差の範囲ですが、1.3%)で上回っており、オープンな設計図がクローズドなものに匹敵することを証明しています。
- DIYの準優勝: カスタムの WMMA カーネル(完全なDIYキッチン)は、少し小さめのテストで 25.1 TFLOPS を記録しました。これは、食材の配送と調理を重ね合わせる「ダブルバッファリング」のような高度なテクニックを使用していなかったため、低速でした。
- 敗者: 「パイプラインの深さは常に大きい方が良い」という考え方です。論文は、この特定のハードウェアにおいては、この考えを明確に否定しています。
信頼性はどの程度か?
著者たちは、ハードウェア上で直接測定を行い、テストを 10回 繰り返して平均を出しているため、これらの数値に非常に自信を持っています。彼らはさらに、自作のコードをNVIDIAの内蔵ツール(プロファイラ)と比較し、自作コードが完璧に一致することも確認しました。
ただし、以下の点については証明できていないことも認めています。
- 特定のサイズ(8192)の課題のみをテストしています。「深さ3がベスト」というルールが、より小さい問題や特殊な形状の問題でも通用するかどうかは不明です。
- パイプラインの深さを4以上に上げるテストは、メモリ不足により物理的に不可能でした。
- テストをWindows上で実行する必要があり、ドライバーの不具合により、カスタムコードと標準コードを全く同じ実行環境で比較することができませんでした(別々の実行としては行っています)。
まとめ
もしあなたが、計算負荷の高いタスクのためにRTX 4060のようなコンシューマー向けグラフィックスカードを最大限に活用したいのであれば、単にバッファを増やし続ければよいわけではない、ということを覚えておいてください。そこには「ゴルディロックス(ちょうど良い)」な領域が存在します。今回のケースでは、3段階 の準備が完璧でした。これを 4段階 にすると、キッチンが窮屈になりすぎて、全員の動きを鈍らせてしまいます。
研究者たちは、すべてのコードをオープンソースとして公開しており、誰でも自分のキッチンを構築して 31.9 TFLOPS の記録に挑戦できるようになっています。彼らは、今後の研究として、異なる問題サイズを試したり、よりクリーンなデータを得るためにLinuxを使用したりすることを推奨していますが、現時点では、このセットアップにおけるピークは 31.9 TFLOPS であり、31.1 TFLOPS はメモリに対して欲張りすぎた時に起こる結果であることを示しています。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。