KV Cache
KV Cache(Key-Value Cache,鍵值快取)可以說是大型語言模型(LLM)推理(Inference)最重要的效能優化技術之一。如果沒有 KV Cache,像 ChatGPT、Claude、Gemini、Llama 等模型的回覆速度可能會慢上數倍甚至數十倍。
一、什麼是 KV Cache?
LLM 的 Transformer 架構中,每一層都包含 Attention(注意力機制)。
Attention 的核心公式:
[ Attention(Q,K,V)=Softmax\left(\frac{QK^T}{\sqrt{d}}\right)V ]
其中:
- Q(Query):目前要預測的新 Token
- K(Key):所有已產生 Token 的特徵
- V(Value):所有已產生 Token 的內容資訊
KV Cache,就是把每一層 Transformer 已經計算好的 Key 與 Value 保留下來,下次生成新的 Token 時直接使用,不必重新計算。
二、沒有 KV Cache 會發生什麼?
假設模型要輸出:
I
love
Taiwan
because
...
第一次:
Input:
I
重新計算:
I
第二次:
Input:
I love
模型重新計算:
I
love
第三次:
Input:
I love Taiwan
模型又重新計算:
I
love
Taiwan
第四次:
Input:
I love Taiwan because
又全部重算:
I
love
Taiwan
because
也就是:
Token1
↓
Token1 Token2
↓
Token1 Token2 Token3
↓
Token1 Token2 Token3 Token4
前面的 Token 一直被重複計算。
假設已經有 2000 個 Token。
生成第 2001 個 Token 時:
模型竟然還要重新算前面 2000 個。
效率非常差。
三、有 KV Cache 後
第一次:
I
算完:
K1
V1
存起來。
第二次:
love
只需要:
Q(love)
+
K1 V1
第三次:
Taiwan
只需要:
Q(Taiwan)
+
K1 V1
K2 V2
不用再重新建立:
K1
K2
因為早就存在 Cache。
四、圖解流程
沒有 Cache
Step1
I
↓
Transformer
↓
Output
-----------------
Step2
I
love
↓
Transformer
↓
重新算 I
重新算 love
-----------------
Step3
I
love
Taiwan
↓
Transformer
↓
又全部重算
每一步都重跑整個 Transformer。
有 Cache
第一次
I
↓
Transformer
↓
K1 V1
↓
Cache
第二次
love
↓
Transformer
↓
只算新的 Q
+
Cache(K1,V1)
↓
K2 V2
↓
加入 Cache
第三次
Taiwan
↓
Transformer
↓
Q3
+
K1 V1
K2 V2
↓
K3 V3
速度快非常多。
五、為什麼速度提升很多?
Transformer 最大的成本就是:
Attention
Attention 必須:
Q
和
所有 K
做矩陣乘法。
沒有 Cache:
每一步:
重新建立
K
V
成本:
O(n²)
有 Cache:
K V 已存在
只新增一列
成本接近:
O(n)
因此生成長文章時,KV Cache 能顯著降低每個 Token 的重複運算,雖然注意力本身仍需與所有歷史 Key 比對,但避免了反覆計算歷史 Token 的表示,因此實際推理速度會大幅提升。
六、KV Cache 存的是什麼?
很多人誤會:
Cache 存的是文字。
不是。
存的是:
Layer 1
K
V
Layer 2
K
V
Layer 3
K
V
...
Layer N
K
V
例如:
Llama-3:
32 Layers
每一層:
Key Tensor
Value Tensor
全部保留。
所以:
Token
↓
Embedding
↓
Layer1
↓
Layer2
↓
...
↓
Layer32
每一層都有自己的 Cache。
七、KV Cache 很吃 GPU 記憶體
假設:
Context:
128K Tokens
每一個 Token:
都要保留:
Layer1 K
Layer1 V
Layer2 K
Layer2 V
...
Layer80 K
Layer80 V
因此:
Context 越長
↓
KV Cache 越大
有時:
GPU 記憶體真正吃最多的不是模型本身。
而是:
KV Cache
例如:
70B 模型:
模型:
約 40GB
KV Cache:
可能再吃 30GB
甚至更多。
八、為什麼很多模型都在研究 KV Cache?
因為它直接影響:
- 可同時服務多少位使用者(併發數)
- 最長可支援多少 Context
- Token 生成速度
- GPU 記憶體使用量
- 雲端推理成本
因此,近年許多推理框架(如 vLLM、TensorRT-LLM、SGLang)都投入大量工程優化,例如:
- Paged KV Cache:將快取分頁管理,減少記憶體碎片並提高利用率。
- KV Cache Sharing:多個請求共享相同前綴(Prefix),避免重複儲存與計算。
- KV Cache Quantization:將快取量化為較低位元(如 FP8、INT8),降低記憶體占用。
- KV Cache Offloading:將部分快取移至 CPU 記憶體或高速儲存,在超長上下文情境下擴大可處理範圍。
九、生活化比喻
想像你在讀一本 500 頁的小說,準備回答第 501 頁的問題。
沒有 KV Cache:
每次回答前,都要從第 1 頁重新讀到第 500 頁。
第1頁
↓
第2頁
↓
...
↓
第500頁
↓
回答
有 KV Cache:
第一次閱讀時就做好完整筆記。
之後每次回答,只需要:
新的一頁
+
之前的筆記
不用再把整本書重新讀一次。
十、總結
KV Cache 的核心理念就是「避免重複計算歷史 Token 的 Key 與 Value 表示」。在自回歸(autoregressive)生成中,每產生一個新 Token,模型只需計算新 Token 的表示,並利用已快取的歷史資訊完成注意力運算,因此能顯著提升生成速度並降低延遲。
它帶來的主要效益包括:
| 面向 | 有 KV Cache 的效果 |
|---|---|
| 推理速度 | 顯著提升,尤其是長文本生成 |
| 延遲(Latency) | 明顯降低,每個 Token 的生成更快 |
| GPU 運算量 | 避免重複計算歷史 Token 的表示 |
| GPU 記憶體 | 增加占用,需要保存各層的 K/V Tensor |
| 長上下文支援 | 可行,但需要更大的 KV Cache 或配合壓縮、分頁等技術 |
簡單來說,Transformer 發明了 Attention,而 KV Cache 則讓 Attention 能夠在實際產品中高效運作。沒有 KV Cache,現代聊天機器人、AI 助理與程式碼生成工具的即時互動體驗幾乎無法達成。