【けーぶいきゃっしゅ】

KVキャッシュ とは?

最終更新:
💡 過去のKeyとValueを保存し、次の一語に使い回す

自己回帰型Transformerの推論で、処理済みトークンのAttention用Key・Valueを保存し、次のトークンの処理に再利用する仕組み。再計算を減らす代わりに保存用メモリを使う。

📌 このページのポイント
過去のK・Vを再計算するか、再利用するか3個目のトークンを処理する簡略例キャッシュなしキャッシュありK1・V1K2・V2K1・V1K2・V2過去分を再計算保存済みを再利用K3・V3K3・V3新しい分も計算新しい分を計算緑:今のトークンのKey・Valueどちらも、この後のAttention計算は必要再計算を減らす代わりに保存メモリを使う
因果的な自己Attentionの一つの層で、処理済みの2トークンと現在の1トークンを比較しています。QueryやAttentionの計算、モデルの他の層は省略しています。棒の長さによる速度比較や実測値は示していません。
ひよこ ひよこ
KVキャッシュは、AIが会話を覚える機能なの?
ペンギン先生 ペンギン先生
文章の保存とは違うよ。自己回帰型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で使うベクトルのことで、会話文そのものを保存するメモ帳や、一般的なキー・バリューストアとは役割が違うよ。

参考資料

← 用語集にもどる