KV Cache(鍵值快取)
又稱:KV cache · 鍵值快取 · KV 快取 · key-value cache · 注意力快取
把每個已處理 token 的 Key 與 Value 存起來,生成下一個 token 時不必重算。代價是這塊記憶體隨序列長度成長,正是「長上下文很吃 RAM」的原因。
你會在什麼時候遇到它
這是連接「上下文長度」「VRAM」「生成速度」三個概念的隱藏樞紐。你會在看推理引擎的記憶體設定、或困惑「為什麼開長上下文後 VRAM 暴增、並發數驟降」時遇到它。不懂 KV cache,你無法理解為什麼長對話越來越吃記憶體、為什麼高並發和長上下文不能同時要 —— 這些全是生產部署最實際的限制。
打個比方
像讀書時把每一頁的重點抄在一疊便利貼上。下次要接續講時,不必重讀整本書,直接翻便利貼(快取)就好,所以快。但書越讀越厚,便利貼也越貼越多,最後整張桌子(VRAM)被便利貼佔滿 —— 這就是長上下文吃記憶體的真相。
最小範例
沒有 KV cache:
生成下一個 token → 把前面所有 token 全部重算一遍 → 極慢
有 KV cache:
前面所有 token 的 Key/Value 已存好 → 只算新的這個 → 快
但記憶體代價:
KV cache 大小 ∝ 序列長度 × 並發請求數 ×(模型層數與維度)
· 上下文越長 → 每個請求的 KV cache 越大
· 並發越高 → 同時存在的 KV cache 越多
→ 這就是為什麼「長上下文」和「高並發」會互搶 VRAM推理引擎(例如 vLLM 的 PagedAttention)就是在聰明地管理這塊快取:切成小區塊、按需分配、共用前綴,用同樣的 VRAM 塞進更多並發請求。理解 KV cache 的成長行為,是調這些參數的前提。
最常搞錯的地方
- 以為 KV cache 是可有可無的加速。它是 decode 能快的根本前提;沒有它,每生成一個 token 都要重算整段,速度慢到不可用。
- 以為它佔的記憶體是固定的。它隨序列長度成長,長對話或長上下文時,KV cache 可能比模型權重還吃 VRAM。
- 以為上下文開到最大沒代價。上下文越長,預留給 KV cache 的 VRAM 越多,能同時服務的並發數就越少 —— 這是一個直接的取捨。