LLM推論時にTransformerのAttention計算で生成されるKey-Value(KV)ペアをGPUメモリ上に効率的にキャッシュ・管理する技術群で、メモリ使用量とレイテンシの両方を削減する
KVキャッシュ最適化は、LLM(大規模言語モデル)の推論において最も重要なメモリ管理技術の一つである。Transformerモデルの自己回帰生成(Autoregressive Generation)では、各トークン生成時に過去の全トークンのKey(K)とValue(V)テンソルを参照する必要がある。これらのKVペアをGPUメモリ(VRAM)にキャッシュすることで再計算を回避し、推論速度を大幅に向上させる。しかし、KVキャッシュはモデルサイズとシーケンス長に比例してメモリを消費するため、2026年現在の128Kトークン対応モデルではKVキャッシュだけで数十GBのVRAMを必要とすることもあり、効率的な管理が不可欠である。
KVキャッシュの基本的な仕組みは、Transformerの各層・各AttentionヘッドにおけるKとVの射影ベクトルを保存し、新しいトークン生成時に過去トークンの再計算を省略することである。例えば、Llama 3.1 70Bモデル(80層、64ヘッド、ヘッド次元128)でシーケンス長4,096トークンの場合、KVキャッシュは 80×64×4096×128×2(KとV)×2バイト(FP16)= 約10.7GBのVRAMを消費する。バッチサイズ8なら約86GBとなり、A100 80GBでもモデル重み(140GB FP16)と合わせて収まらない。
この問題を解決するために、PagedAttention、GQA(Grouped-Query Attention)、MQA(Multi-Query Attention)、KVキャッシュ量子化、Sliding Window Attentionなど、多数の最適化手法が開発されてきた。
--kv-cache-dtype fp8 オプションで利用可能| 最適化手法 | メモリ削減率 | 速度影響 | 精度影響 | 代表的な採用例 |
|---|---|---|---|---|
| PagedAttention | 断片化95%削減 | スループット2〜4x |
| なし |
| vLLM |
| GQA(8:1) | KVサイズ1/8 | 同等〜微向上 | ほぼなし | Llama 3, Gemma 2 |
| MQA(1:1) | KVサイズ1/64 | 向上 | わずかに低下 | Falcon, StarCoder |
| KV量子化(FP8) | 50%削減 | 同等 | 微低下(<1%) | vLLM, TensorRT-LLM |
| Sliding Window | 固定メモリ | 同等 | 長文で低下 | Mistral 7B |
KVキャッシュはAttention計算の中間結果を保存するメモリ領域であり、モデル重み(Weight)とは別にGPUメモリを消費する。モデル量子化(AWQ/GPTQ等)はモデル重みの圧縮、KVキャッシュ量子化はAttention中間結果の圧縮であり、両者は独立に適用可能。PagedAttentionはKVキャッシュのメモリ配置を最適化する手法であり、量子化とは異なりデータ精度を変更しない。
Q1: KVキャッシュはモデルサイズと別にどれくらいVRAMを使いますか? A: Llama 3.1 70B(GQA 8:1)でシーケンス長4096・バッチ1の場合、約670MB。バッチ16なら約10.7GB。非GQAモデルではこの8倍が必要。
Q2: PagedAttentionとKVキャッシュ量子化は併用できますか?
A: vLLMでは --kv-cache-dtype fp8 とPagedAttentionを同時に有効化可能。メモリ断片化削減と量子化圧縮の両方の恩恵を受けられる。
Q3: Sliding Window AttentionのモデルでKVキャッシュOOMが起きることはありますか? A: ウィンドウサイズ分のKVキャッシュは常に必要だが、シーケンス長に比例して増加しないため、OOMのリスクは大幅に低減される。ただしバッチサイズが大きい場合は注意。