KV Cache
KVキャッシュ
けいぶいきゃっしゅ
Definition
KV cache is an inference optimization that stores intermediate key/value states from attention during generation to speed up next-token computation. It is important for reducing latency in long outputs.
AIチャットで会話を続けていると、過去のメッセージすべてを毎回モデルに送り直しているのに、応答がそこまで遅くならないと感じたことはないでしょうか。その裏側で活躍しているのがKVキャッシュです。KVキャッシュ(KV Cache)とは、Transformerモデルのアテンション計算で使われるKey(キー)とValue(バリュー)のペアを保存し、同じ計算の繰り返しを省略することでテキスト生成を高速化する技術です。
なぜキャッシュが必要なのか
Transformerがテキストを1トークンずつ生成するとき、新しいトークンは過去のすべてのトークンとのアテンション計算を行います。素朴に実装すると、出力が長くなるにつれて同じ計算を何度も繰り返すことになります。KVキャッシュは、過去のトークンから計算済みのKeyとValueを保存しておき、新しいトークンの生成時にはそれを再利用することで、計算量を大幅に削減します。
メモリとのトレードオフ
KVキャッシュは計算速度を向上させる一方で、GPUメモリを消費します。コンテキスト長が長くなるほど保存するKVペアが増え、メモリ使用量も増大します。128Kトークンのコンテキストウィンドウを持つモデルでは、KVキャッシュだけで数十GBのメモリが必要になることもあります。速度とメモリのバランスを取ることが、実運用では重要な課題です。
プロンプトキャッシュとの違い
AnthropicやOpenAIが提供する「プロンプトキャッシュ」は、KVキャッシュの概念をAPI利用者向けに拡張したものです。同じシステムプロンプトやプレフィックスを含むリクエストを送ると、すでに計算済みのKV状態がサーバー側で再利用され、入力トークンのコストが最大90%割引されます。長いシステムプロンプトやRAGのコンテキストを繰り返し送る場合に、コストとレイテンシの両方が改善されます。
最適化技術の進化
KVキャッシュのメモリ問題を解決するため、さまざまな最適化技術が研究されています。GQA(Grouped Query Attention)はKeyとValueのヘッド数を削減してキャッシュサイズを圧縮します。PagedAttention(vLLMで採用)はメモリを効率的にページ単位で管理します。量子化を適用してKVキャッシュ自体のビット数を下げる手法も登場しています。これらの技術は、長いコンテキストを扱うモデルの実用性を支える縁の下の力持ちです。