AI・機械学習
上級

Paged Attention(ページドアテンション)

vLLMが提案したKVキャッシュのメモリ管理手法で、OSの仮想メモリページング方式を応用して固定サイズブロックでK/Vを管理し、メモリフラグメンテーションを解消する技術。

0 回閲覧
0 いいね

Paged Attentionとは

Paged Attention(ページドアテンション)は、UCバークレーのKwon et al.が2023年に発表したKVキャッシュのメモリ管理手法であり、LLM推論フレームワークvLLMの中核技術である。従来のLLM推論では各リクエストのKVキャッシュに最大シーケンス長分のメモリを連続領域として事前確保していたが、Paged AttentionはOSの仮想メモリ管理と同様に、固定サイズの「ブロック」単位でKVキャッシュを非連続的に割り当てる。

従来方式の問題点

メモリの無駄遣い

従来の推論フレームワーク(HuggingFace Transformers、FasterTransformer等)では:

  1. 事前確保: 各リクエストに最大シーケンス長(例: 4,096トークン)分のKVキャッシュメモリを一括確保
  2. 内部フラグメンテーション: 実際の生成が500トークンで終了しても、残り3,596トークン分のメモリは無駄に確保されたまま
  3. 外部フラグメンテーション: 異なるサイズのリクエストが終了・開始を繰り返すことで、使用可能だが小さすぎるメモリ断片が蓄積
  4. メモリ利用率: 実測で20〜40%程度。80%のメモリが無駄になるケースも

スループットの制約

メモリの非効率な使用は直接的にバッチサイズ(同時処理リクエスト数)を制限する:

GPUVRAMTotalモデル従来方式バッチPaged Attention バッチ
A100 80GB80GBLlama 2 13B8〜1232〜48
H100 80GB80GBLlama 3 8B16〜2464〜96
A100 80GB80GBLlama 2 70B1〜24〜8
L40S 48GB48GBMistral 7B12〜1648〜64

Paged Attentionの仕組み

ブロックベースのメモリ管理

Paged Attentionは以下の概念でKVキャッシュを管理する:

  1. Physical Block(物理ブロック): GPUメモリ上の固定サイズ領域(デフォルト16トークン分)。全ブロックが同一サイズ
  2. Logical Block(論理ブロック): 各リクエストが「見る」KVキャッシュの論理的な連続領域
  3. Block Table(ブロックテーブル): 論理ブロック→物理ブロックのマッピング。OSのページテーブルに相当
  4. Block Allocator(ブロックアロケータ): 空き物理ブロックの管理と割り当て。OSのメモリアロケータに相当

動作フロー

リクエスト到着
  → 論理ブロック0を物理ブロック#42にマッピング
  → プリフィル: ブロック#42にK/Vを格納

デコード開始(トークン生成)
  → ブロック#42が満杯(16トークン)
  → 新しい物理ブロック#107を割り当て
  → ブロックテーブル更新: 論理1 → 物理#107

リクエスト完了
  → 物理ブロック#42, #107を解放
  → 即座に他のリクエストで再利用可能

Copy-on-Write

Beam Searchやパラレルサンプリングでは、複数の生成候補が共通のプレフィックスを持つ。Paged Attentionは:

  • 共通プレフィックスのブロックを参照カウントで共有
  • 候補が分岐する時点で初めてブロックをコピー(Copy-on-Write)
  • Beam Search width=4で最大75%のKVキャッシュメモリを削減

Paged Attention v2

vLLM 0.4で導入された改良版:

  • 非同期ブロック割り当て: デコードと並行してブロック割り当てを実行
  • マルチGPU対応: Tensor Parallelism時のブロックテーブル同期を最適化
  • Prefetch: 次に必要になるブロックを先読みしてHBM→L2キャッシュに配置
  • 性能: v1比で15〜20%のレイテンシ改善

Prefix Cachingとの統合

SGLangが導入したRadixAttentionの概念をvLLMも取り入れ、Paged AttentionとPrefix Cachingを統合:

  • ハッシュベースの検索: プレフィックスのハッシュ値でキャッシュ済みブロックを特定
  • LRUエビクション: 参照されなくなったプレフィックスブロックをLRUで管理
  • 効果: システムプロンプトやFew-shotの共通部分を再利用し、プリフィル時間を最大90%削減
リクエスト1: [System Prompt] + [User Query 1]
  → System Prompt のKV: ブロック#1-5(新規計算)
  → User Query 1のKV: ブロック#20-22

リクエスト2: [System Prompt] + [User Query 2]
  → System Prompt のKV: ブロック#1-5(キャッシュヒット!再利用)
  → User Query 2のKV: ブロック#30-31

性能比較

HuggingFace TGI(従来方式)とvLLM(Paged Attention)の実測比較:

指標HF TGIvLLM改善率
メモリ利用率20〜40%95%+2.5〜5×
スループット(req/s)12363×
P99レイテンシ850ms420ms2×
同時バッチサイズ8324×
TTFT(Llama 2 13B, 2K入力)180ms145ms1.2×

測定条件: A100 80GB, Llama 2 13B, ShareGPT データセット, 出力平均256トークン

採用状況

2026年時点での主要推論フレームワークのPaged Attention対応:

  • vLLM: オリジナル実装。デファクトスタンダード
  • SGLang: RadixAttention(Paged Attention + Prefix Caching統合)
  • TensorRT-LLM: NVIDIA独自実装のPaged KV Cache
  • llama.cpp: KVキャッシュのスロットベース管理(概念的に類似)
  • Ollama: llama.cpp経由で間接的にサポート
  • HuggingFace TGI: vLLMバックエンド経由でサポート

よくある質問(FAQ)

Q1: Paged Attentionのブロックサイズはどう選べばよいですか? A: vLLMのデフォルトは16トークン/ブロックで、ほとんどのユースケースに最適。ブロックサイズを大きくすると管理オーバーヘッドは減るが内部フラグメンテーションが増え、小さくすると逆になる。128Kコンテキストの長文処理では32〜64トークン/ブロックが効率的な場合がある。

Q2: Paged Attentionは推論品質に影響しますか? A: 数学的にはフルKVキャッシュと完全に等価な結果を返すため、品質への影響はゼロ。メモリの物理配置が変わるだけで、計算結果は同一である。FlashAttentionとの組み合わせでも等価性は保たれる。

Q3: FlashAttentionとPaged Attentionの違いは何ですか? A: FlashAttentionはAttention計算自体をGPU SRAMタイリングで高速化する技術で、HBM→SRAM間のデータ転送を最小化する。Paged AttentionはKVキャッシュのメモリ割り当て・管理の効率化技術。両者は直交する最適化であり、vLLMでは両方を組み合わせて使用する。FlashAttention v2.5以降はPaged Attentionのブロック配列に対応したカーネルを提供している。

まとめ

  • Paged AttentionはOS仮想メモリの概念をKVキャッシュ管理に応用
  • メモリ利用率を20〜40%から95%以上に向上し、スループット2〜4倍改善
  • Copy-on-WriteでBeam Search時のメモリ共有を効率化
  • Prefix Cachingとの統合で共通プレフィックスの再利用が可能
  • vLLM、SGLang、TensorRT-LLMなど主要フレームワークが採用するデファクトスタンダード