HelloAI ← 可视化画廊
⚙️ 系统工程 · 8 分钟

KV Cache:让 LLM 推理快 10 倍的秘密

LLM 每生成一个新 token,会重复算所有之前 token 的注意力——除非用 KV Cache。 左边是没有 cache 的暴力版,右边是用 cache 的高效版。点击"生成下一个"看差异。

已生成 tokens
总共生成 0 个 token

❌ 没有 KV Cache

每次都从头算
每生成 1 个新 token,需要重算所有之前 token 的 K/V:
本轮重算次数
0
累计总计算
0
生成 n 个 token 的总计算复杂度 = O(n²)

✅ 有 KV Cache

只算新的
之前 token 的 K/V 已缓存,本轮只算新 token:
本轮新算
0
累计总计算
0
生成 n 个 token 的总计算复杂度 = O(n)
📊 性能对比
0
没有 cache 计算次数
0
有 cache 计算次数
速度提升倍数
⚠️ KV Cache 不是免费的

KV Cache 大幅减少了计算,但代价是显存占用快速增长

当前 token 数
0
KV Cache 大小(70B 模型)
0 KB
32k 上下文需要
~19 GB
单 A100 显存
80 GB

长对话越后面越慢、显存压力越大 —— 这是 PagedAttention(vLLM 核心创新)想解决的问题。

🧠

为什么 K, V 可以缓存

每个 token 的 K = x · W_kV = x · W_v 仅依赖该 token 本身—— 生成新 token 时它们不会变

Q = x · W_q 在每生成新 token 时只需要新算 1 行(新 token 的 Q)。

📉

从 O(n²) 到 O(n)

生成 1000 个 token:

  • · 没缓存: 1+2+3+...+1000 = 500,500 次
  • · 有缓存: 1000 次
  • · 提速: 500×

这就是为什么所有 LLM 推理框架(vLLM, TGI, llama.cpp)都默认开 KV Cache。

📝 演示说明: 这里的"计算次数"是简化模型——实际 LLM 推理还有 FFN、LayerNorm 等其它运算。 但 attention 的 O(n²) → O(n) 优化是核心思想,理解了这一点就理解了 LLM 推理优化的起点。详见 L7-03 推理优化。