← 返回题目列表

什么是 KV Cache?它为什么能加速大模型推理?

高频 中等 第 1 / 25 题 更新于 2026/07/28
KV Cache推理优化Attention

简化版

自回归生成时,历史 token 的 Key 和 Value 在每一步都不会改变。KV Cache 把各层历史 K、V 保存下来,新一步只计算新 token 的 Q、K、V,再让新 Q 查询缓存,从而避免重复计算全部前缀。

详细版

没有缓存时,生成第 t 个 token 会再次对前 t−1 个 token 计算各层投影,产生大量重复工作。有 KV Cache 后:

  1. Prefill 阶段一次计算输入提示的 K、V 并缓存;
  2. Decode 阶段只计算最新 token 的 K、V;
  3. 将新 K、V 追加到缓存;
  4. 新 Q 与全部缓存 K 计算注意力,再加权缓存 V。

它显著降低生成阶段计算量,但不会消除对历史 K、V 的读取,注意力长度仍随输出增长。缓存还会占用大量显存,大小大致与批量、层数、序列长度、KV 头数、头维度和数据精度成正比。

完整版教学

一、重复计算从哪里来

因果模型生成 token 时,历史前缀保持不变。对同一层而言,历史 token 的 K、V 已经确定;下一步只有最新 token 是新增信息。若每步把整个序列重新前向一次,就会反复计算相同结果。

Q 只服务于当前位置发起查询,历史 Q 不需要缓存;历史 K 用于与新 Q 匹配,历史 V 用于汇总内容,因此缓存叫 KV Cache。

二、Prefill 和 Decode

Prefill 并行处理完整提示,计算密集度较高;Decode 每步只处理一个 token,但要读取所有层的大量历史缓存,往往更受显存带宽和调度影响。首 token 延迟主要受 Prefill 影响,后续生成速度主要看 Decode。

三、缓存为什么很占显存

每层都要为每个历史位置保存 K 和 V。批量越大、上下文越长、层数越多,缓存越大。多用户并发服务时,模型权重是共享的,但每条请求都有独立缓存,因此 KV Cache 经常成为并发量的真正限制。

四、MQA 与 GQA

标准多头注意力为每个查询头保留独立 K、V 头。Multi-Query Attention 让多个查询头共享一组 K、V;Grouped-Query Attention 让若干查询头共享一组。它们显著减少缓存和内存带宽,同时尽量保留多头表达能力。

五、Paged Attention 与前缀复用

连续显存分配容易产生碎片,且不同请求长度变化很大。Paged Attention 把缓存按块管理,类似虚拟内存分页,提高显存利用率。若多个请求共享相同系统提示,还可以复用前缀缓存,避免重复 Prefill。

其他优化还包括 KV Cache 量化、滑动窗口注意力和淘汰低价值 token,但都需要在速度、显存和质量之间权衡。

六、它没有解决什么

KV Cache 避免的是历史 K、V 投影和前层计算的重复,不会让每步注意力变成常数开销。新 Q 仍需读取并关注历史缓存,生成也仍是串行过程,所以输出越长,总延迟依然会上升。

训练时整段目标可以并行计算,通常不依赖推理式 KV Cache;缓存主要服务于自回归解码。

七、面试拆解算例

这类题最怕只讲术语,最好把它落成一次资源账。假设模型有 32 层、hidden size 为 4096、序列长度从 2K 增到 16K,标准注意力的相关度矩阵规模会从 2K × 2K 变成 16K × 16K,理论元素数量放大 64 倍。即使具体算子不会真的把所有中间矩阵都落到 HBM,复杂度曲线仍然决定了 prefill 延迟和显存压力会快速上升。

attention_scores_per_head = seq_len * seq_len
2K  ->  2,048 * 2,048   ≈ 4.19M
16K -> 16,384 * 16,384  ≈ 268.44M
放大倍数 ≈ 64
观察维度面试要说清的问题工程判断
张量形状Q/K/V、hidden state 或路由权重怎样变化能否解释实现差异
复杂度随层数、序列长度、head 数怎样增长谁先成为瓶颈
质量风险是否改变训练分布或表达能力会不会掉点
部署代价算子、框架、缓存是否支持能不能稳定上线
输入 token -> embedding -> 注意力/FFN/归一化模块 -> hidden state -> logits
                |             |                 |
             位置/掩码       显存与吞吐        质量与稳定性

所以回答「什么是 KV Cache?它为什么能加速大模型推理?」时,推荐先讲结构变化,再讲这条变化怎样影响资源曲线,最后补一句质量和部署的边界。这样比单纯背「某某结构更快、更省」更像工程答案。

八、常见误区与追问

  • 误区:把「什么是 KV Cache?它为什么能加速大模型推理?」理解成单个模块的孤立优化。 架构题通常要同时联系训练稳定性、推理显存、吞吐和长上下文表现,孤立背结论不够。
  • 追问:这个设计改变了哪一类张量或计算? 回答时要能指出 Q/K/V、隐藏状态、归一化、FFN 或路由中的具体变化,否则容易停留在概念层。
  • 误区:新结构一定全方位优于旧结构。 很多优化是在显存、并发、质量、实现复杂度之间做交换,不存在无代价替代。
  • 追问:batch、序列长度或并发变大时会发生什么? 架构设计最终会落到复杂度和资源曲线上,要能解释哪一项先成为瓶颈。
  • 误区:论文里的指标可以直接迁移到业务线上。 线上还要看框架支持、算子融合、缓存命中、模型规模和请求分布,实验结论需要重新压测。

九、加强记忆

KV Cache 像给已经读过的资料做索引卡:下一步不必重新整理整本书,只计算新一页并查询旧卡片;代价是卡片会随着上下文变长,占用越来越多桌面。