【フラッシュアテンション】

Flash Attention とは?

最終更新:
💡 GPUのメモリ読み書きを減らし、アテンションを効率化

Transformerのアテンションを、GPUのメモリ間の読み書きを減らして計算するアルゴリズム。大きな中間行列をHBMに保存せず、ブロック単位で処理してメモリ使用量と実行時間の削減を目指す。

📌 このページのポイント
GPUのメモリ間の読み書きを減らす 中間行列を保存 FlashAttention HBM:大容量 SRAM:小さく速い 計算 HBM:大容量 SRAM:小さく速い 計算 N × N 中間行列 入力・中間値・出力 入力・出力・統計値 行列を読み書き ブロックを読み書き 中間値は保存せず再計算 大きな中間行列のHBM保存を避ける 基本の計算量は2乗 / 丸め差はあり得る
基本の密なアテンションの模式図。左はN×Nの中間行列をHBMへ保存する実装、右はブロック単位の処理。青は計算領域、緑は入力等のブロック、矢印は読み書きで繰り返す。再計算は学習の逆伝播で使い、出力もHBMへ書く。数値の完全一致や一定の速度倍率は保証しない。
ひよこ ひよこ
ペンギン先生、Flash Attentionって普通のアテンションと何が違うの?
ペンギン先生 ペンギン先生
基本のアテンションでは、トークン同士の関係を表す大きな中間行列ができるよ。それを保存する実装では、行列の要素数はトークン数の2乗になる。1024から2048へ倍にすると、その行列の要素数は4倍。モデル全体のメモリが必ず4倍になるという意味ではないんだ。
ひよこ ひよこ
4倍!Flash Attentionならどうするの?
ペンギン先生 ペンギン先生
入力を小さなブロックに分け、GPU上の小さく速いSRAMで計算するよ。大容量のHBMへ中間行列を丸ごと書き出さず、メモリ間の読み書きを減らす。HBM自体も高速だけど、SRAMに比べてアクセスの負担が大きいんだ。
ひよこ ひよこ
計算結果は同じになるの?近似計算とかじゃないの?
ペンギン先生 ペンギン先生
基本の密なアテンションは、関係を間引く近似ではなく、同じ数式を計算するよ。ただし浮動小数点では計算順序や精度による丸め差があるので、ビット単位の完全一致を保証するわけではない。公式実装も数値の許容誤差を設けて確認しているんだ。
ひよこ ひよこ
なんでそんな工夫ができるの?
ペンギン先生 ペンギン先生
タイリングでブロックごとの結果を正しく合成し、学習の逆伝播では必要な中間値を再計算するんだ。入力と出力はHBMにあり、ブロックを繰り返し読み、結果も書き戻す。「一度読むだけ」ではないよ。中間行列を保存しないことで追加メモリを長さに対して線形に抑えるけど、基本の計算量は2乗のままなんだ。
ひよこ ひよこ
実際に使うと必ず8倍速くなるの?
ペンギン先生 ペンギン先生
速度の倍率はGPUや入力の長さ、比較対象、実装によって変わるよ。アテンション単体の高速化とモデル全体の学習速度も別。公式実装にはGPUやデータ精度などの対応条件があり、非公開モデルも含めて全部が使っているとは断定できないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Flash Attention」って出てきたら「GPUメモリを賢く使うアテンション高速化技術」と思えばだいたいOK!
📖 おまけ:英語の意味
「FlashAttention」 = 高速なアテンション計算の名称
💬 GPUでアテンションを計算するアルゴリズムの名前だよ。データを保存するフラッシュメモリを指す言葉ではないんだ

参考資料

← 用語集にもどる