推理与部署推理优化KV Cache速答 · 约 5 分钟更新 2026-09-19

KV Cache 是什么?没有它为什么就快不起来

一句话结论

生成每个新词都要和前面所有词做注意力计算,KV Cache 把前面词算好的键值中间结果存下来复用,每步只算新词自己那份,省掉绝大部分重复计算。

先这样答

大模型生成文字是一个词一个词往外吐的,每个词在术语里叫一个 token。生成每个新 token 时,模型都要让它和前面所有 token 做注意力计算,也就是拿新词的查询向量去和前面每个词的键、值向量比对,判断该关注谁。KV Cache 做的事很简单:每个词的键和值算完一次就存进显存,后面所有生成步骤直接读,不再重算。

如果没有这个缓存,每生成一个新 token,都要把前面全部 token 的键值重新算一遍。生成到第一千个 token 时,九百九十九个旧 token 的中间结果被反复重算,而这些结果从它们生成那一刻起就没变过。重复计算随序列长度平方增长,序列越长浪费越大。有了缓存,每步只算新 token 自己的那一份,整体计算量从随长度平方增长降为随长度线性增长。

代价是显存。缓存大小和层数、键值头总维度、序列长度、并发请求数成正比,长上下文、高并发场景下它占的显存会逼近甚至超过模型权重本身。后面的很多推理优化都围绕它展开:GQA 在压缩它的体积,PagedAttention 在管理它的存放,前缀缓存跨请求复用它。一句总结:KV Cache 用显存换计算,长上下文推理的成本大头在这里。

面试官会怎么追问

  • 「KV Cache 占的显存怎么估?」 方法是键值头总维度乘二(键和值各一份)、乘层数、乘序列长度、乘并发数,再乘精度字节数。量级感受是:7B 级别的模型,单条几万 token 的上下文,缓存可以到 GB 量级;并发一多,显存先被缓存吃满,而不是被权重吃满。
  • 「为什么新模型都用 GQA?」 GQA 是分组查询注意力:多个查询头共用一组键值头,键值的存储量直接降到几分之一,缓存体积跟着缩小,效果损失通常很小。这是用结构换显存的典型设计,当前主流开源模型基本默认采用。
  • 「缓存能跨请求复用吗?」 公共前缀部分可以。两条请求如果开头完全一致,比如同一个系统提示词,这部分键值算一次就能给后来者直接用,这就是前缀缓存,前提是前缀按 token 逐字一致。

回答的坑

  • 把 KV Cache 说成「缓存了模型的回答」。它缓存的是注意力计算里的键值中间结果,不是输出文本,两个层面完全不同。
  • 只讲加速不讲代价。面试官想听的是这笔交换:省下重复计算,换来随长度和并发增长的显存占用,长上下文服务的主要压力正来自这里。
—— 本题完 ——