【ページドアテンション】

PagedAttention とは?

最終更新:
💡 KVキャッシュを分割し、離れた場所から参照する

LLM推論のKVキャッシュを固定サイズのブロックに分け、離れたメモリー領域に置いたままAttentionの計算で参照できる方式。vLLMでは、対応表と必要に応じたブロックの割り当てでメモリーの無駄を減らす。

📌 このページのポイント
順序と保存場所を対応表で結ぶ ブロック対応表(例) 論理的な順序 GPUの保存場所 A0 物理 3 A1 物理 0 A2 物理 5 GPUメモリーの物理ブロック 物理 0A1 物理 1空き 物理 2他の要求 物理 3A0 物理 4空き 物理 5A2 同じ大きさのブロックを必要時に割り当て
A0〜A2は一つの要求の論理ブロック。対応表を使うため、物理ブロックは隣り合っていなくても参照できる。色は同じKVキャッシュを示す。
ひよこ ひよこ
PagedAttentionは何を解決するの?
ペンギン先生 ペンギン先生
LLMが次のトークンを生成するときに使うKVキャッシュの保存方法だよ。生成が進むとキャッシュが増えるので、メモリーを無駄なく割り当てることが同時に扱える要求の数に関わるんだ。
ひよこ ひよこ
大きな連続領域に置けばよさそうだけど?
ペンギン先生 ペンギン先生
最大の生成長に合わせて先に領域を予約すると、まだ使わない場所や、結局使わなかった場所が生じるよ。PagedAttentionは固定サイズのブロックに分け、離れた保存場所からでも計算に使えるようにするんだ。
ひよこ ひよこ
順番がばらばらでも計算できる?
ペンギン先生 ペンギン先生
論理的なブロックの順序と、GPUメモリー上の保存場所を対応表で結び付けるよ。計算時に対応するブロックを参照するので、物理的に隣り合っている必要がないんだ。
ひよこ ひよこ
空きや無駄は完全になくなる?
ペンギン先生 ペンギン先生
vLLMの原論文では、必要に応じてブロックを追加して大部分の無駄を減らすよ。ただし、最後のブロックには未使用の枠が残り得る。モデルの重みなど、KVキャッシュ以外のメモリーも必要なんだ。
ひよこ ひよこ
ほかの要求とキャッシュを共有すれば、いつでも速くなる?
ペンギン先生 ペンギン先生
共通の入力から複数の出力を生成する場合など、共有できる部分があるよ。出力が分かれれば別の領域も必要になる。多くの要求をまとめて処理する助けになるけれど、速度の改善率はモデルや要求の長さ、実装やGPUなどで変わるんだ。
もっと詳しく知りたい人へ

FlashAttentionと同じ技術?

同じではありません。PagedAttentionは、離れたブロックに置いたKVキャッシュを参照できることが中心です。原論文のvLLMでは、入力を処理する段階に従来のAttention実装を使い、生成段階にPagedAttentionを使う構成を説明しています。メモリーの配置とAttention計算の効率化は、組み合わせて考えられます。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「PagedAttention」って出てきたら「分割したKVキャッシュを、離れたメモリーから参照する方式」と思えばだいたいOK!
📖 おまけ:英語の意味
「PagedAttention」 = ページに分けたメモリーを参照するAttention
💬 OSの仮想メモリーとページングの発想を取り入れた名称だよ。LLMのKVキャッシュをブロックに分ける方式で、OSの仕組みをそのまま動かすという意味ではないんだ。

参考資料

← 用語集にもどる