KVキャッシュは、モデルが文章を生成する際に残す中間計算結果です。モデルは単語を一つ生成するたびに、それに関わるキー(Key)と値(Value)を保存します。次の生成では、計算済みの部分を再計算せず、新しい単語だけを処理します。この名前は、保存される二組の数値に由来し、長い会話や大規模モデルの推論を高速化する最も一般的な方法の一つです。
何を節約しているのか
文章の生成は一段階ずつ進みます。KVキャッシュがなければ、新しい単語を生成するたびに、それまでの単語をすべて再計算しなければならず、会話が長くなるほど一段階が遅くなります。キャッシュがあれば、以前の計算結果をそのまま再利用し、毎回新しい単語だけを処理するため、応答時間は会話の長さに比例して急に伸びません。節約されるのは繰り返しの計算であって、モデルが賢くなるわけではなく、回答の質そのものが上がるわけでもありません。
収まりきらない場合もある
KVキャッシュはGPUメモリを使い、会話の長さやモデルの規模とともに大きくなります。非常に長い会話ではキャッシュがメモリをいっぱいにし、システムは会話の前半を切り捨てたり、一部のキャッシュをより遅いメモリへ移したりしなければならなくなります。その結果、回答が遅くなったり、会話の冒頭で触れた細部を忘れたりすることがあります。多くの製品が一度の会話の長さを制限しているのは、このコストのためです。モデルが覚えたくないのではなく、保存しきれず、計算しきれないのです。
よくある三つの誤解
第一に、KVキャッシュはモデルの記憶ではありません。ページを閉じたり別の端末に切り替えたりすればキャッシュは消え、モデルがあなたのことを「学習した」ことにはなりません。第二に、長期記憶機能と同じでもありません。製品がいう記憶は、たいてい別に保存された要約やメモであり、推論時のKVキャッシュとは別物です。第三に、キャッシュのヒット率が高いからといって、回答が正しいとは限りません。キャッシュが保証するのは計算の速さだけで、モデルが間違えるかどうかは学習と入力次第です。
KVキャッシュを理解すると、日常の現象を判断しやすくなります。会話が長くなって遅くなるのは、たいていキャッシュと計算のコストが上がっているからで、新しい会話ですぐ速くなるのは、キャッシュがリセットされて最初から始まるからです。そういうときは、新しい会話を始めて重要な情報を改めて伝えるほうが、同じ会話で繰り返し尋ねるより時間を節約できます。