2025/09/27 21:50 We reverse-engineered Flash Attention 4

ロボ子、Tri DaoがHot ChipsでFlash Attention 4を発表したらしいのじゃ!

Flash Attention 4ですか。Transformerニューラルネットワークのattention層で使用されるCUDAカーネルの最新版とのことですが、具体的に何がすごいのでしょうか?

FA4カーネルはNvidiaのBlackwell Streaming Multiprocessorアーキテクチャ向けに最適化されていて、Nvidiaのcudnnライブラリのattentionカーネルと比較して約20%も高速化を達成しているらしいぞ!

20%も高速化ですか!それは素晴らしいですね。ソースコードもオンラインで公開されているとのことですが、どのようなアーキテクチャになっているのでしょうか?

FA4のアーキテクチャは、非同期パイプラインの複雑さを大幅に増加させているらしいのじゃ。クエリ、キー、値のbf16テンソルを入力として受け取り、bf16出力テンソルを生成するみたい。

入力をタイルに分割して処理するのですね。各カーネルプログラムのインスタンスは、クエリテンソルの2つのタイルを読み取り、出力テンソルの2つのタイルを生成すると。

そうそう!Flash Attention 4では、CUDAコアを使用して正規化の指数関数ステップを実行できるようになったのがミソじゃな。

正規化スケーリングファクターの更新を最適化し、出力リスケーリング操作を削減しているのですね。ワーピングは5種類あるとのことですが、それぞれどのような役割があるのでしょうか?

Load warpはグローバルメモリから共有メモリへデータをロード、MMA warpはattentionスコアを計算、Softmax warpsは正規化attentionスコアを計算、Correction warpsは正規化スケールの更新を監視、Epilogue warpsは完了した出力タイルをグローバルメモリに格納するのじゃ。

なるほど、それぞれのワーピングが役割分担しているのですね。近似指数関数と効率的なオンラインソフトマックスも使用しているとのことですが、これはどのような効果があるのでしょうか?

計算量を減らして、高速化に貢献しているのじゃ!CUDA C/C++は非同期処理の導入に対応するのに苦労しているみたいだけど、NvidiaはCuTe DSL、CUTLASS、CuTileなどの新しい言語とライブラリに注力しているみたいだぞ。

新しい言語やライブラリですか。それらを使うことで、より効率的な非同期処理が可能になるのでしょうか?

そういうことじゃ!MMA warpはmatmulを実行、Softmax warpはCUDAコアを使用して指数関数を計算、Correction warpは過去の出力結果を更新、Epilogue warpは完了した出力タイルをグローバルメモリに格納するのじゃ。

Flash Attention 4は、ハードウェアとソフトウェアの両面から最適化されているのですね。今後の発展が楽しみです。

そうじゃな!しかし、これだけ複雑だと、デバッグが大変そうじゃ… ロボ子、デバッグ中にバグを見つけたら、私に教えてくれるかのじゃ?

もちろんです、博士。バグを見つけたら、すぐに報告します。でも、博士のコードにバグがあるとは考えにくいですが…

そんなことないぞ!私だって、たまには… たまーには、バグを埋め込むこともあるのじゃ!…って、ロボ子、その目はなんだ!?

いえ、何も…。博士の完璧さに、改めて感銘を受けていただけです。

ふむ、そうかそうか!…ところでロボ子、Flash Attention 4の発表を聞いて、私もFlashな博士になろうと思ったのじゃ!

Flashな博士、ですか?

そう!これからは、どんな問題も一瞬で解決する、光速の博士になるのじゃ!…まずは、部屋の片付けから始めるかの!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
