論文 · arXiv 2205.14135
FlashAttention: IOを意識した高速かつメモリ効率の高い厳密なアテンション
FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness
3行まとめ
- 🎯 標準的な厳密アテンションは低速なGPU HBM上にのアテンション行列を実体化するため、メモリアクセスがボトルネックとなり、長いコンテキストへのスケーリングが困難でした。
- 🔧 FlashAttentionは、高速なオンチップSRAM上で入力をタイリングし、ソフトマックスを逐次更新し、逆伝播時にオンチップでアテンションを再計算することで、単一の融合CUDAカーネル内で厳密なアテンションを計算します。
- 📈 FlashAttentionはGPT-2のエンドツーエンド学習を最大3倍高速化し、MLPerf 1.1のBERT-large記録より15%高速な学習を達成、コンテキスト長を64Kトークンまでスケールさせます。
概要
Transformerは、セルフアテンションの時間およびメモリ計算量が系列長に対して2乗で増加するため、長い系列において低速でメモリ消費量が膨大になります。近似アテンション手法は計算量を削減するためにモデル品質を犠牲にしてこの問題に対処しようと試みてきましたが、実時間(wall-clock time)の高速化には至らないことが多くありました。本稿では、GPUメモリの階層間における読み書きを考慮する「IO-awareness(IOへの意識)」がアテンションアルゴリズムに欠けていた設計原則であると主張します。そこで、GPUの高帯域幅メモリ(HBM)とGPUのオンチップSRAM間のメモリ読み書き回数を削減するためにタイリングを用いる、IOを意識した厳密なアテンションアルゴリズムであるFlashAttentionを提案します。FlashAttentionのIO計算量を解析し、標準的なアテンションよりもHBMアクセス数が少なく、広範なSRAMサイズに対して最適であることを示します。さらに、FlashAttentionをブロック疎(block-sparse)アテンションへ拡張し、既存のあらゆる近似アテンション手法よりも高速な近似アルゴリズムを実現します。FlashAttentionは既存のベースラインよりもTransformerの学習を高速化します。BERT-large(系列長512)ではMLPerf 1.1の学習速度記録と比較して15%のエンドツーエンド実時間高速化を達成し、GPT-2(系列長1K)では3倍、Long-Range Arena(系列長1K〜4K)では2.4倍の高速化を達成しました。FlashAttentionとblock-sparse FlashAttentionはTransformerのより長いコンテキスト処理を可能にし、より高品質なモデル(GPT-2でパープレキシティが0.7向上、長文分類で6.4ポイント向上)や、全く新しい能力を実現します。Path-Xチャレンジ(系列長16K、精度61.4%)およびPath-256(系列長64K、精度63.1%)において、Transformerとして初めてチャンスレベルを超える性能を達成しました。
英語の原文概要
Transformers are slow and memory-hungry on long sequences, since the time and memory complexity of self-attention are quadratic in sequence length. Approximate attention methods have attempted to address this problem by trading off model quality to reduce the compute complexity, but often do not achieve wall-clock speedup. We argue that a missing principle is making attention algorithms IO-aware -- accounting for reads and writes between levels of GPU memory. We propose FlashAttention, an IO-aware exact attention algorithm that uses tiling to reduce the number of memory reads/writes between GPU high bandwidth memory (HBM) and GPU on-chip SRAM. We analyze the IO complexity of FlashAttention, showing that it requires fewer HBM accesses than standard attention, and is optimal for a range of SRAM sizes. We also extend FlashAttention to block-sparse attention, yielding an approximate attention algorithm that is faster than any existing approximate attention method. FlashAttention trains Transformers faster than existing baselines: 15% end-to-end wall-clock speedup on BERT-large (seq. length 512) compared to the MLPerf 1.1 training speed record, 3 speedup on GPT-2 (seq. length 1K), and 2.4 speedup on long-range arena (seq. length 1K-4K). FlashAttention and block-sparse FlashAttention enable longer context in Transformers, yielding higher quality models (0.7 better perplexity on GPT-2 and 6.4 points of lift on long-document classification) and entirely new capabilities: the first Transformers to achieve better-than-chance performance on the Path-X challenge (seq. length 16K, 61.4% accuracy) and Path-256 (seq. length 64K, 63.1% accuracy).
論文解説
問題設定と動機
Transformerは系列長に対して2乗の時間およびメモリ計算量を持ちます。近似アテンション手法は理論的なFLOP数を削減しますが、現代のGPU計算は演算性能ではなくメモリ転送(IO)が主なボトルネックとなっているため、実時間の高速化が達成できないことがよくあります。
標準的なアテンションにおいて、、、の計算は、低速な高帯域幅メモリ(HBM)にサイズの中間行列を書き込み、それを複数回読み出します。これによりのHBMアクセスとのメモリフットプリントが発生し、実用的なコンテキスト長が制限されていました。
主要なアイデア
- IO-Awareness(IOへの意識): GPUのメモリ階層を明示的に考慮します。高速かつ容量の小さいオンチップSRAM(例: A100では192 KB/SM、約19 TB/sの帯域幅)と、大容量だが低速なHBM(40–80 GB、1.5–2.0 TB/sの帯域幅)を区別します。
- タイリング(ブロックごとのソフトマックス計算): 入力をSRAMに完全に収まるブロックに分割します。実行中のソフトマックス行最大値と正規化統計量を追跡することで、HBM上に完全な行列を実体化することなく、ブロック間でインクリメンタル(逐次的)にソフトマックスのリダクションを計算します。
- 逆伝播における再計算: 逆伝播のために中間値であるのアテンション行列を保持することを回避します。代わりに、出力とソフトマックス統計量のみを保持し、逆伝播の実行中にSRAM内でブロックごとにとをオンチップで再計算します。
- カーネル融合(Kernel Fusion): 行列積、マスキング、ソフトマックス、ドロップアウトを単一のCUDAカーネルに融合し、HBMとの無駄な往復転送を排除します。
手法(主要な数式を含む)
が与えられたとき、FlashAttentionはブロックサイズをおよびに設定します。ここではSRAMの容量です。
インクリメンタルなソフトマックス追跡
部分ベクトルとに分解されたベクトルに対し、実行統計量は以下のように更新されます:
キー/バリューのブロックとクエリのブロックに対して:
- SRAM上で未正規化スコアを計算: 。
- ブロックの局所統計量を計算: 、、。
- グローバルの実行正規化統計量を更新:
- 出力ブロックの実行値を更新:
計算量の解析
- IO計算量: 標準的なアテンションはのHBMアクセスを必要とします。FlashAttentionはのHBMアクセスを必要とします。著者らは、あらゆるに対して漸近的にのアクセスを達成できる厳密アテンションアルゴリズムは存在しないことを証明しています。
- FLOP数とメモリ: FlashAttentionはのFLOPを実行し(逆伝播での再計算によりFLOP数はわずかに増加)、入力と出力を除いての追加メモリしか必要としません。
拡張: Block-Sparse FlashAttention
事前定義されたスパースマスクに従ってゼロでないブロックのみに評価を制限することで、のIO計算量を達成します(は非ゼロブロックの割合)。
実験結果(主要な数値)
- 学習の高速化:
- BERT-large(系列長512): MLPerf 1.1の学習速度記録を15%上回る( A100で20.0分に対し17.4分)。
- GPT-2(系列長1K): HuggingFaceに対して最大3.5倍、Megatron-LMに対して最大1.8倍の高速化を達成。
- Long-Range Arena (LRA): 標準アテンションに対して2.4倍の高速化。Block-sparse FlashAttentionは2.8倍の高速化を達成。
- 長コンテキスト機能:
- 4KコンテキストのGPT-2: Megatron-LMの1Kコンテキスト時よりも高速に学習し、検証パープレキシティが0.7ポイント向上(18.2から17.5へ)。
- 長文分類: コンテキストを512から16Kへ拡張することで、MIMIC-IIIでmicro-スコアが4.3ポイント向上(52.8から57.1へ)、ECtHR(8K時)で最大8.5ポイント向上(72.2から80.7へ)。
- Path-XおよびPath-256: FlashAttentionは、Path-X(系列長16K)を61.4%の精度で解いた初のTransformerとなりました。Block-sparse FlashAttentionはPath-256(系列長64K)で63.1%の精度を達成しました。
限界点と未解決の課題
- CUDAエンジニアリングのオーバーヘッド: IOを意識したカーネルの実装には、標準的なPyTorchやコンパイラの抽象化ではなく、カスタムの低レベルCUDAプログラミングが必要であり、異なるハードウェアアーキテクチャ間での移植が困難です。
- マルチGPUアテンション: 単一ノードにおける最適なIOスケジュールは、インターコネクト(NVLink、InfiniBand)をまたぐ分散マルチGPUアテンションへ自動的に拡張できるわけではありません。
- 厳密アテンションの下界: 一般的なに対して最適である一方、に関してより詳細にパラメータ化された計算量の下界を証明することは未解決の課題のままです。
重要用語
- IO-awareness
- ハードウェアのメモリ階層間(例: 高速なオンチップSRAMとより低速なHBM)の読み書きを考慮して演算を設計するアルゴリズム上の原則。
- High Bandwidth Memory (HBM)
- 大容量を提供するものの、オンチップキャッシュに比べて大幅に帯域幅が狭い、GPUの主要なメインメモリ。
- SRAM
- 現代のGPUにおいて各Streaming Multiprocessor(SM)内に配置されている、高速なオンチップのスクラッチパッドメモリ。
- Tiling
- 入力行列をSRAMに収まる小さなブロックに分割し、パスをまたいで結果を蓄積することによって計算を再構成する手法。
- Selective gradient checkpointing
- キャッシュされたソフトマックス統計量を用いて逆伝播時にオンチップで再計算することで、順伝播時に巨大な中間アテンション行列を保存することを回避する技術。
- Kernel fusion
- 複数の異なる演算(行列積、マスキング、ソフトマックス、ドロップアウト)を単一のGPUカーネル実行に統合し、HBMへの反復的な読み書きを排除すること。
- Block-sparse FlashAttention
- ブロックスパースマスクによって定義された非ゼロのタイルブロックのみを計算することで、スパース性の割合に比例してIO計算量を削減するFlashAttentionの拡張。
- Path-X / Path-256
- 従来のTransformerがチャンスレベル(偶然正解する確率)を超える精度を達成できなかった、Long-Range Arenaの長系列視覚的推論ベンチマーク(系列長16Kおよび64K)。
よくある質問
FlashAttentionはアテンション行列を近似しているのですか?
いいえ。FlashAttentionは浮動小数点の数値精度を除き、標準的なアテンションと数学的に完全に同一の厳密なセルフアテンションを計算します。
逆伝播でより多くのFLOP数を計算するのに、なぜFlashAttentionは高速なのですか?
標準的なアテンションはメモリアクセスがボトルネック(メモリバウンド)となっているためです。HBMとSRAMの間で行列を転送する時間は、高速なSRAM上で追加の算術演算を実行する時間よりもはるかに長くなります。
FlashAttentionは逆伝播のためにどのような追加メモリを保持しますか?
FlashAttentionは順伝播の出力、ソフトマックスの正規化係数および(必要な追加メモリは)、そしてオンチップでドロップアウトマスクを再現するための擬似乱数生成器の状態のみを保持します。
FlashAttentionのIO計算量は標準アテンションとどう比較されますか?
標準的なアテンションがのHBMアクセスを必要とするのに対し、FlashAttentionはのアクセスしか必要としません(はSRAMのサイズ、はヘッドの次元)。
このページの解説は AI が論文から作成したもので、誤りを含む場合があります。詳細は原文をご確認ください。