PagedAttention(ページドアテンション)
vLLMが2023年に提案したLLM推論のためのKVキャッシュ管理手法。OSの仮想メモリ・ページングと同じ原理でKVキャッシュをブロック単位で管理し、メモリの断片化を排除してGPU VRAM利用率を最大化する技術。
PagedAttention とは
PagedAttention(ページドアテンション)は、UC Berkeley BDD研究室が2023年に発表した論文「Efficient Memory Management for Large Language Model Serving with PagedAttention」で提案された、LLM推論時のKVキャッシュ管理手法。オープンソース推論エンジンvLLMの中核技術として実装されている。
なぜKVキャッシュの管理が難しいのか
LLMの自己回帰生成では、Transformer各レイヤーの過去トークンに対するKey/Value(KV)行列をキャッシュして再計算を省く(KVキャッシュ)。しかしこのキャッシュには2つの問題がある。
- 事前割り当て(Pre-allocation): 生成長が未知のため最大長を確保 → VRAM無駄(内部断片化)
- 連続割り当て(Contiguous Allocation): 物理的に連続したVRAM領域を要求 → 断片化で大きな割り当てが不可能(外部断片化)
従来手法ではVRAMの60〜80%がKVキャッシュに割り当てられながら、実際に使用されるのは20〜40%にとどまるケースが多かった。
PagedAttentionの仕組み
ページングの原理
OSの仮想メモリと同じ概念を適用:
- KVキャッシュを固定サイズのブロック(デフォルト16 tokens)に分割
- 各ブロックは物理的に非連続なVRAMに配置可能
- ブロックテーブル(仮想→物理アドレスマップ)で管理
Copy-on-Write(平行ビームサーチ)
同じプレフィックスを共有する複数の生成候補(ビームサーチ・サンプリング)でKVキャッシュブロックを共有。書き込み時のみコピーすることでメモリを節約。
Prefix Sharing
システムプロンプトが同一の複数リクエスト(チャットボットのシステムメッセージ等)では、共通プレフィックスのKVキャッシュブロックを複数リクエスト間で共有。計算コストを削減しながらスループットを向上させる。
メモリ効率の改善
- 従来(HuggingFace): KVキャッシュ無駄60〜80% / 実VRAM利用率20〜40%
- PagedAttention(vLLM): KVキャッシュ無駄<4% / 実VRAM利用率>96%
この改善によりGPU 1台あたりの同時処理リクエスト数(Concurrency)が数倍に拡大し、スループットが2〜24倍向上する(負荷条件による)。
vLLMでの実装
from vllm import LLM, SamplingParams
# PagedAttentionは自動的に有効(デフォルト)
llm = LLM(model="meta-llama/Llama-3-8B-Instruct",
gpu_memory_utilization=0.90, # VRAM使用率
block_size=16) # ブロックサイズ
params = SamplingParams(temperature=0.8, max_tokens=512)
outputs = llm.generate(["AIとは何ですか?"], params)
業界への影響
PagedAttentionの論文発表(2023年6月)以降、主要LLM推論フレームワークが類似のブロック型KVキャッシュ管理を採用:
- TensorRT-LLM: Paged KV Cache実装
- MLC-LLM: Paged KV Cache実装
- SGLang: RadixAttention(ツリー構造KVキャッシュ管理)
まとめ
PagedAttentionは、LLMサービングの効率を根本的に変えた画期的なメモリ管理手法。OSの仮想メモリという成熟したアイデアをGPUのKVキャッシュに適用するという逆転の発想が、高密度・高スループットのLLM推論インフラを可能にした。vLLM使用時は意識せずに恩恵を受けられるが、block_size・gpu_memory_utilizationのチューニングでさらなる性能向上が見込める。