【けーぶいきゃっしゅ】
KVキャッシュ とは?
最終更新:
💡 過去のKeyとValueを保存し、次の一語に使い回す
自己回帰型Transformerの推論で、処理済みトークンのAttention用Key・Valueを保存し、次のトークンの処理に再利用する仕組み。再計算を減らす代わりに保存用メモリを使う。
📌 このページのポイント
- Attention層ごとに、処理済みトークンのKey・Valueを保存する
- 新しいトークンの処理では保存済みの値を再利用し、過去分の再計算を減らす
- 保存済みの値を参照するAttentionの計算までなくなるわけではない
- 保持するトークン数・層数・KVヘッド数などに応じてメモリを使う
文章の保存とは違うよ。自己回帰型Transformerが順にトークンを処理するとき、各Attention層で計算したKeyとValueを保存するんだ。将来のトークンを参照しない仕組みなので、処理済みの値を後の処理で再利用できるよ。
保存すると、どの計算が減るの?
例えば3個目のトークンを処理するとき、1・2個目のKeyとValueを計算し直さずに使えるよ。新しいトークンのKey・ValueやQueryは計算し、保存済みの値も参照してAttentionを求めるんだ。「新しい値を計算するだけで全部終わる」という意味ではないよ。
長い文章でも、同じ速さで生成できる?
そうとは限らないよ。参照する値が増えればAttentionの処理やメモリ転送も増えるし、キャッシュを置く容量も必要なんだ。生成速度や同時に処理できる件数は、モデル・文脈長・ハードウェアなどに左右されるよ。
キャッシュは、文章が長いほど必ず大きくなる?
全履歴を保存する方式では増えるよ。ただし一定の範囲だけを見るスライディングウィンドウなどでは、その層の保存量に上限があるんだ。固定サイズで先にメモリを確保する方式もあり、すべてが同じ増え方ではないよ。
メモリの負担を減らす方法はある?
GQAやMQAは、モデル側で複数のQueryヘッドがKey・Valueを共有する方式だよ。一方、PagedAttentionはキャッシュの配置や共有を工夫してメモリの無駄を減らす考え方なんだ。量子化やCPUへの退避もあるけれど、速度との兼ね合いを確かめる必要があるよ。
まとめ:ざっくりこれだけ覚えればOK!
「KVキャッシュ」って出てきたら「文章生成で、過去のKeyとValueの計算結果を使い回す仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「KV Cache (Key-Value Cache)」 = AttentionのKeyとValueを保存するキャッシュ
💬 KはKey、VはValue。ここではAttentionで使うベクトルのことで、会話文そのものを保存するメモ帳や、一般的なキー・バリューストアとは役割が違うよ。