KV Cache(Key-Value Cache)是自回归语言模型在推理阶段用于加速生成的核心优化技术。其本质是缓存历史 token 的 Key 和 Value 向量,避免在每一步重复计算注意力机制中的 K 和 V,从而将时间复杂度从平方级降至线性,显著提升推理效率。
在标准 Transformer 的自注意力机制中,每个新 token 的生成都需要与所有先前 token(包括自身)计算注意力权重。若不使用缓存,生成第 个 token 时需重新对整个长度为 的序列执行完整的 QKV 投影和注意力计算。这意味着生成一个长度为 的序列,总计算量为 ,且大量计算集中在重复的 K、V 投影上。
KV Cache 的核心思想是:Key 和 Value 仅依赖于输入 token 本身,与未来 token 无关。因此,在生成过程中,一旦某个 token 的 K 和 V 被计算出来,就可以永久保存,后续步骤直接复用。具体实现中:
- • 每生成一个新 token,将其对应的 K 和 V 向量追加到缓存中;
- • 下一步计算 Query 时,只需与缓存中的全部 K 计算点积,再对缓存中的 V 加权求和;
- • 缓存以张量形式维护,形状通常为 ,其中 为 batch size, 为注意力头数, 为当前序列长度, 为每头维度。
这一机制将每步的注意力计算复杂度从 降至 ,整体生成复杂度从 降至 ,极大缓解了长文本生成的延迟问题。
然而,KV Cache 也带来显著的内存开销。缓存大小正比于序列长度、batch size 和模型头数。例如,一个 70B 参数模型(如 Llama-2-70B)使用 64 个注意力头,生成 4K 上下文时,单个样本的 KV Cache 可达数 GB。这成为大模型部署的主要瓶颈,尤其在高并发或长上下文场景下。
为缓解此问题,业界发展出多种优化策略:
- • GQA(Grouped-Query Attention):通过减少独立 K/V 头数,直接压缩缓存体积;
- • PagedAttention(如 vLLM 实现):借鉴操作系统虚拟内存思想,将缓存分块管理,提高显存利用率并支持非连续序列;
- • 量化缓存:将 K/V 向量从 FP16 降至 INT8 甚至更低精度,减少内存占用;
- • 滑动窗口注意力:仅缓存最近若干 token 的 K/V,适用于局部依赖强的任务;
- • 推测解码(Speculative Decoding):利用小模型草稿提前填充缓存,减少大模型调用次数。
此外,KV Cache 的正确管理对生成质量至关重要。若缓存未及时更新、错位或被错误复用(如多轮对话中未清空历史),会导致模型“看到”不存在的上下文,产生逻辑混乱或幻觉。因此,推理引擎必须严格维护缓存生命周期,确保每条请求的上下文隔离。
KV Cache 是连接理论模型与实际部署的关键桥梁。它虽不改变模型结构,却是决定大模型能否实时交互的核心工程组件。理解其原理与限制,有助于在系统设计中合理权衡速度、内存与上下文长度,也是优化推理性能的首要切入点。