【けーぶいきゃっしゅ】

KVキャッシュ とは?

💡 一度計算したことは覚えておく、Transformerの記憶術
📌 このページのポイント
KVキャッシュによる推論高速化 KVキャッシュなし 3トークン目生成時: K1,V1 K2,V2 新規 ← 再計算! 4トークン目生成時: K1,V1 K2,V2 K3,V3 新規 KVキャッシュあり キャッシュ(保存済み) K1,V1 K2,V2 3トークン目: K3,V3のみ 計算 4トークン目: K4,V4のみ 計算 計算量: 多い 計算量: 少ない トレードオフ: 速度UP ↑ / メモリ使用量UP ↑(長文ほどキャッシュが大きくなる)
KVキャッシュによる推論高速化のイメージ
ひよこ ひよこ

KVキャッシュって何をキャッシュしてるの?

ペンギン先生 ペンギン先生

Transformerが文章を生成するとき、Attentionという仕組みで過去のすべてのトークンを参照するんだ。その参照に使うKey行列とValue行列を保存しておくのがKVキャッシュだよ

ひよこ ひよこ

キャッシュしないとどうなるの?

ペンギン先生 ペンギン先生

新しいトークンを1つ生成するたびに、過去の全トークン分のKeyとValueをゼロから計算し直すことになる。100トークン目を生成するのに前の99トークン分を再計算、101トークン目で100トークン分を再計算…とどんどん遅くなるよ

ひよこ ひよこ

キャッシュがあれば全部解決?

ペンギン先生 ペンギン先生

速度の問題は解決するけど、今度はメモリの問題が出てくるんだ。長い文脈だとKVキャッシュだけで数GBになることもある。GPUメモリを圧迫して、同時に処理できるリクエスト数が減ってしまうよ

ひよこ ひよこ

メモリ問題はどうやって解決するの?

ペンギン先生 ペンギン先生

いろんな工夫があるよ。GQA(Grouped Query Attention)はKeyとValueのヘッド数を減らしてキャッシュサイズを削減する。vLLMで使われるPagedAttentionはOSの仮想メモリのようにキャッシュを管理して無駄を減らすんだ。KVキャッシュの効率化は今のLLM推論で最もホットな研究テーマの一つだね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「KVキャッシュ」って出てきたら「LLMが過去の計算結果を使い回して高速化する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「KV Cache (Key-Value Cache)」 = キー・バリューキャッシュ
💬 KはKey(検索キー)、VはValue(値)の略。Attentionの仕組みで使うKey行列とValue行列をキャッシュしておくからこの名前だよ
← 用語集にもどる