Interactive

アテンション変種比較可視化

full・疎・低ランク・線形・FlashAttention・GQA/MQAという6つの変種の時間計算量・中間メモリ・KVキャッシュ量を、実際の式で計算して比較します。 系列長を伸ばすとO(n²・d)のfullがどう爆発するか、 FlashAttentionが計算量を一切変えずメモリだけを削る様子、 GQA/MQAが計算量ではなくKVキャッシュだけを削る様子を、それぞれ実測できます。

ヘッド次元d=64固定。系列長nを動かすと、6つの変種の時間計算量・中間メモリ・KVキャッシュ量が実際にどう変わるかを計算します(対数目盛のグラフは何桁も違う値を同時に見るため)。

基準Full Attention演算 2.15G / 中間メモリ 16.78M / KVキャッシュ 16.78M
漸近(近似あり)疎(Sparse, window=w)演算 134.22M / 中間メモリ 1.05M / KVキャッシュ 16.78M
漸近(近似あり)低ランク(Linformer, rank=k)演算 134.22M / 中間メモリ 1.05M / KVキャッシュ 16.78M
漸近(近似あり)線形(Performer型カーネル)演算 33.55M / 中間メモリ 4.1K / KVキャッシュ 16.78M
実機入出力(厳密)FlashAttention演算 2.15G / 中間メモリ 262.1K / KVキャッシュ 16.78M
推論帯域(厳密)GQA/MQA(group=g)演算 2.15G / 中間メモリ 16.78M / KVキャッシュ 4.19M

時間計算量(n=512〜32768、対数目盛)

Full: O(n²d)線形系: O(n・d²)

中間メモリ(n=512〜32768、対数目盛)

Full: O(n²)FlashAttention: O(n)

右のグラフが記事の核心を数値で示します——FlashAttentionの時間計算量は左のグラフのFullと完全に同じ線(近似なし、厳密等価)である一方、中間メモリだけがO(n²)からO(n)へ落ちる。左のグラフでは、Full(赤)が二乗で急伸するのに対し線形系(緑)はゆるやかにしか伸びず、nが大きいほど差が開きます。

すべてブラウザ内で各変種の時間計算量・メモリ・KVキャッシュ量の式を実際に計算しています。MAC(乗加算)回数・要素数で統一した単位で比較しており、実機のFLOPS値やバイト数そのものではありません。

ここが分かる

  • fullの時間計算量は系列長nを2倍にすると4倍に増える(O(n²))のに対し、疎・低ランク・線形系は2倍にしかならない(O(n)級)——nを大きく動かすほど差が開く様子をグラフで確認できる。
  • FlashAttentionの時間計算量はfullと完全に同じ値(近似なし、厳密等価)——変わるのは中間メモリだけで、fullのO(n²)に対しFlashAttentionはO(n)にとどまる。「同じ計算を速く実行する」と「近似で計算量そのものを減らす」の違いが数値で分かる。
  • GQA/MQAはグループ数gを1(MQA)からh(MHA相当)まで動かしても時間計算量は一切変わらない——変わるのはKVキャッシュ量だけで、正確にg/h倍に縮む(g=8・h=32なら25%)。「計算量ではなく推論帯域を攻める」という記事の主張を実測できる。