KVキャッシュ けーぶいきゃっしゅ
KV CacheKey-Value Cache推論高速化アテンションTransformerメモリ
KVキャッシュについて教えて
簡単に言うとこんな感じ!
AIが文章を生成するとき、「すでに計算した部分の計算結果を保存しておいて、次のトークン生成に再利用する」仕組みだよ!同じ計算を何度もやり直さなくて済むから、長い文章の生成がすごく速くなるんだ!
KVキャッシュとは
KVキャッシュ(Key-Value Cache) とは、Transformerのアテンション計算で使うKeyとValueのベクトルを保存しておき、次のトークン生成時に再利用する最適化手法です。LLMが文章を1トークンずつ生成する際、前のすべてのトークンのKV値を毎回再計算するのは非効率で、KVキャッシュはこれを解消します。
キャッシュなしでは、長い文章を生成するほど同じ計算が繰り返され処理時間が二乗的に増加しますが、KVキャッシュを使うと新しいトークン分だけ計算すればよいため、生成速度が大幅に改善します。一方で、キャッシュはGPUメモリを消費するため、コンテキスト長が長くなるほどメモリ使用量が増える課題もあります。
KVキャッシュの仕組み
【KVキャッシュなし】(非効率)
トークン1生成: [A] のK,V計算
トークン2生成: [A,B] のK,V計算(Aを再計算)
トークン3生成: [A,B,C] のK,V計算(A,Bを再計算)
→ 生成が進むほど同じ計算を何度も繰り返す
【KVキャッシュあり】(効率的)
トークン1生成: [A] のK,V計算 → キャッシュに保存
トークン2生成: キャッシュから[A]のK,V取得 + [B]のK,V計算
トークン3生成: キャッシュから[A,B]のK,V取得 + [C]のK,V計算
→ 新しいトークン分だけ計算すればOK
歴史と背景
- 2017年:Transformerの推論時に自然な副産物として考案
- 2020年代初頭:GPUメモリ効率化の観点でKVキャッシュ管理が重要課題に
- 2023年:vLLMがPagedAttentionを提案しKVキャッシュ管理を大幅改善
- 現在:量子化KVキャッシュ(INT8/INT4)でメモリ使用量を削減する研究が進む
メモリ消費量の目安
| コンテキスト長 | モデル規模 | KVキャッシュのメモリ(目安) |
|---|---|---|
| 4K トークン | 7B | 約1 GB |
| 32K トークン | 7B | 約8 GB |
| 128K トークン | 70B | 約100 GB以上 |
長コンテキストになるほどキャッシュが膨大になるため、量子化やスパースKVなどの圧縮技術が開発されています。
関連用語
- スケールドドット積アテンション — KVキャッシュが保存するKey・Valueを使う計算
- Flash Attention — KVキャッシュと組み合わせて推論を高速化する手法
- コンテキスト長 — KVキャッシュのメモリ消費量に直結する指標
- 量子化 — KVキャッシュのメモリを削減するための圧縮技術
- スペキュレイティブデコーディング — KVキャッシュと組み合わせる別の推論高速化技術