LLM推論・最適化

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などの圧縮技術が開発されています。


関連用語