【ページドアテンション】
PagedAttention とは?
最終更新:
💡 KVキャッシュを分割し、離れた場所から参照する
LLM推論のKVキャッシュを固定サイズのブロックに分け、離れたメモリー領域に置いたままAttentionの計算で参照できる方式。vLLMでは、対応表と必要に応じたブロックの割り当てでメモリーの無駄を減らす。
📌 このページのポイント
PagedAttentionは何を解決するの?
大きな連続領域に置けばよさそうだけど?
最大の生成長に合わせて先に領域を予約すると、まだ使わない場所や、結局使わなかった場所が生じるよ。PagedAttentionは固定サイズのブロックに分け、離れた保存場所からでも計算に使えるようにするんだ。
順番がばらばらでも計算できる?
空きや無駄は完全になくなる?
ほかの要求とキャッシュを共有すれば、いつでも速くなる?
共通の入力から複数の出力を生成する場合など、共有できる部分があるよ。出力が分かれれば別の領域も必要になる。多くの要求をまとめて処理する助けになるけれど、速度の改善率はモデルや要求の長さ、実装やGPUなどで変わるんだ。
もっと詳しく知りたい人へ
FlashAttentionと同じ技術?
同じではありません。PagedAttentionは、離れたブロックに置いたKVキャッシュを参照できることが中心です。原論文のvLLMでは、入力を処理する段階に従来のAttention実装を使い、生成段階にPagedAttentionを使う構成を説明しています。メモリーの配置とAttention計算の効率化は、組み合わせて考えられます。
📖 おまけ:英語の意味
「PagedAttention」 = ページに分けたメモリーを参照するAttention
💬 OSの仮想メモリーとページングの発想を取り入れた名称だよ。LLMのKVキャッシュをブロックに分ける方式で、OSの仕組みをそのまま動かすという意味ではないんだ。