PagedAttention(ページドアテンション)(ページドアテンション)
LLMの自己回帰生成で蓄積されるKVキャッシュをOSのページング方式で管理する技術。非連続メモリブロックに分散配置することでVRAMの断片化を解消し、同時処理できるシーケンス数を最大化する。
PagedAttention(ページドアテンション)とは
PagedAttentionは、LLMの自己回帰的なトークン生成で蓄積するKVキャッシュ(Key/Valueキャッシュ)を、OSの仮想メモリシステムからインスパイアされた非連続ページ管理で最適化する技術です。2023年のvLLM論文(Kwon et al., SOSP 2023)で提案され、LLMサービングの効率を根本から改善しました。
KVキャッシュの問題
従来の事前割り当て問題: リクエスト受付時に最大生成長(例: 4096トークン)分のVRAMを予約するため、実際には300トークンしか生成されなくても4096分のメモリを消費(平均利用率20-40%)。
断片化問題: 各リクエストのKVキャッシュが連続したメモリ領域を要求するため、中間サイズのリクエスト終了後に「穴」が発生し外部断片化が起きます。
PagedAttentionの解決策
OSのページングメカニズムをKVキャッシュに適用します:
KVキャッシュブロック:
- ブロックサイズ: 固定(例: 16トークン分)
- 各リクエストのKVは複数の非連続ブロックに分散
- ブロックテーブル: 論理ブロック→物理ブロックのマッピングを管理
例:
リクエストA(100トークン):
ブロックテーブル: [物理ブロック3, 物理ブロック7, 物理ブロック1, ...]
(連続している必要はない)
メモリ効率の改善
従来の事前割り当て:
GPUメモリ 80GB / 最大長4096トークンのリクエスト × 8 = 64GB予約
実際の使用: 20GB(利用率25%)
PagedAttention:
GPUメモリ 80GB
実際の使用量に応じて動的割り当て → 利用率85-95%
→ 同じGPUで3-4倍多くのリクエストを並列処理可能
コピーオンライト(Copy-on-Write)共有
PagedAttentionはビームサーチや並列サンプリングでKVブロックを共有できます:
from vllm import LLM, SamplingParams
llm = LLM(
model="meta-llama/Meta-Llama-3-8B-Instruct",
block_size=16, # KVキャッシュブロックサイズ(トークン数)
gpu_memory_utilization=0.9
)
# 並列サンプリング: 同プロンプトから3つの応答
# プロンプト部分のKVブロックをコピーオンライトで共有
sampling_params = SamplingParams(
temperature=0.8,
n=3, # 3つの応答を並列生成
max_tokens=512
)
outputs = llm.generate(
["自作PCで80万円の予算ならどんな構成がベスト?"],
sampling_params
)
vLLMのメモリ管理確認
# vLLMサーバー起動時のブロック割り当て確認
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-8B-Instruct \
--block-size 16 \
--gpu-memory-utilization 0.9 \
--port 8000
# 起動ログ例:
# INFO: # KV cache blocks: 8432
# INFO: GPU KV cache size: 8432 * 16 * 32 * 128 * 2 bytes = 5.5 GB
他のKVキャッシュ最適化との組み合わせ
PagedAttentionはGQA・SWA・量子化と組み合わせてさらなる効率化が可能です。GQA + PagedAttentionではKVブロックのヘッド数削減でブロックあたりサイズが縮小し、KVキャッシュ量子化(INT8)でブロックサイズを半分に削減(精度との兼ね合い)、SWA + PagedAttentionでは古いウィンドウ外ブロックを解放して長文脈でのメモリ節約が可能です。
PagedAttentionはvLLMの中核技術として、LLMのAPI提供コストを劇的に削減した革新的手法です。2026年現在、SGLang・TensorRT-LLM・TGIなど主要エンジンが同様の仕組みを採用しており、LLMサービングインフラの標準技術となっています。