2026-05-07

Question

请你解释一下 KV Cache 是什么。为什么它能加速 LLM 的自回归生成?如果没有 KV Cache,生成第 N 个 token 时会发生什么额外计算?

Your Answer

大模型的注意力机制需要通过计算每个 token 的 Q、K、V 来得到最终的概率评分,每个 token 的 K 和 V 每次计算的结果都是相同的,只要缓存起来可以在后续的对话中持续使用,如果没有 kv cache 计算下一个 token 的复杂度是 O(n2),有了 kv cache 以后可以降低到 O(n)

Review

你的回答抓住了核心点:KV Cache 缓存历史 token 的 K/V,避免重复计算,从而把生成阶段每步计算从 O(n²) 降到 O(n)。这是这道题最关键的部分。

不足的地方主要有三点:

  1. “最终的概率评分”表述不够准确。Attention 里的 Q/K/V 计算得到的是当前 token 的上下文表示,不是直接得到最终 token 概率。最终概率还要经过后续 Transformer 层、LM head、logits、softmax。
  2. “后续的对话中持续使用”需要限定。KV Cache 通常是在一次请求 / 一次连续生成过程中复用。多轮对话当然也可以把历史消息重新放进 prompt,然后在本次请求中建立 cache,但不是说缓存天然跨任意对话永久复用。
  3. 可以更明确地区分 prefill 和 decode 阶段。KV Cache 最主要优化的是 decode 阶段:每生成一个新 token,只需要计算新 token 的 Q/K/V,并让它的 Q 去 attend 已缓存的历史 K/V。

Improved Answer

KV Cache 是 LLM 自回归生成时缓存历史 token 的 Key / Value 向量的机制,用来避免每一步生成都重复计算完整上下文。

具体来说:

  1. Transformer attention 中每个 token 会生成 Q/K/V。Q 表示当前 token 要查询什么信息;K 表示每个历史 token 可以被匹配的特征;V 表示被聚合的实际内容。
  2. 在自回归生成中,历史 token 不会改变。生成第 1 个新 token 后,前面的 prompt token 已经固定;生成第 2、3、4……个 token 时,之前所有 token 的 K/V 都不会变化;所以这些 K/V 没必要每一步重新计算。
  3. KV Cache 的做法是缓存历史 K/V。prefill 阶段:一次性处理 prompt,计算并缓存 prompt 中所有 token 的 K/V;decode 阶段:每生成一个新 token,只计算这个新 token 的 Q/K/V;然后用新 token 的 Q 去和缓存里的所有 K 做 attention,再聚合对应的 V。
  4. 它能加速,是因为没有 KV Cache 时,生成第 N 个 token 需要重新对前面 N 个 token 做完整 attention 计算,历史 K/V 会被反复重算;有 KV Cache 时,历史 K/V 已经存好,只需要处理新增 token。因此每步生成的计算量从接近 O(n²) 降到 O(n),显著提升长文本生成速度。

一句话总结:KV Cache 用空间换时间:缓存历史 token 的 K/V,避免自回归生成中重复计算历史上下文,使每一步 decode 只关注新增 token,从而大幅加速推理。