真实面经题目 · 原创解析

LLM 长上下文推理中,KV Cache 压缩如何降低显存占用,和 Prefix Cache 的作用有什么区别?

这题考长上下文 LLM 推理中的显存管理。回答要把 Prefix Cache 的跨请求前缀复用和 KV Cache 压缩的单次/多次请求显存降载区分开,再说明压缩策略、精度损失、服务集成和评估指标。

出现于:阿里巴巴 · C/C++

60 秒回答模板

我会先把 KV Cache 的作用讲清楚:自回归解码时,每生成一个 token 都会保留各层 attention 的 K/V,避免每步重新计算历史 token;长上下文、batch 变大或并发升高后,KV Cache 往往成为显存和带宽瓶颈。Prefix Cache 解决的是复用问题:多个请求共享相同系统提示词、长文档前缀或模板时,可以直接复用已经算好的前缀 KV,降低预填充延迟和重复计算。KV Cache 压缩解决的是占用问题:对已经需要保留的 KV 做低精度量化、分层保留、token 选择、滑动窗口或稀疏化等,让同样显存承载更长上下文或更高并发。工程上要注意压缩不能只看显存下降,还要看困惑度、答案质量、长上下文定位能力、解码吞吐、压缩/解压开销和与 Continuous Batching、PagedAttention、Prefix Cache 的兼容性。一个好的答案应该说明:Prefix Cache 是复用已有前缀,KV 压缩是减少单份缓存成本,两者可以组合,但优化目标和风险不同。

考点 两个目标
难度 真实面经题
回答目标 讲清设计、取舍和边界

深入解析

01

先定义 KV Cache 的瓶颈

LLM 解码阶段每一步都要访问历史 token 的 K/V。上下文越长、层数越多、batch 越大,KV Cache 占用越接近显存上限,并且解码时还会反复读取这些缓存,带来内存带宽压力。因此它既影响可支持的上下文长度,也影响并发和首/尾 token 延迟。

02

Prefix Cache 是复用前缀

Prefix Cache 的核心是发现不同请求拥有相同前缀,例如系统提示词、固定工具说明、公共文档片段或多轮会话的稳定部分。服务端把这段前缀的 KV 保留下来,后续请求命中后直接接着 decode 或 prefill 剩余部分。它减少重复计算和预填充延迟,但不一定减少单份 KV 的大小。

03

KV 压缩是降低单份缓存成本

KV Cache 压缩关注的是同一段历史 KV 本身太大。常见方向包括低精度量化、按层或按 head 采用不同精度、只保留近期或高重要性 token、滑动窗口、稀疏 attention 兼容策略,以及对长上下文做摘要或分块重取。它的收益是降低显存和带宽,但风险是注意力信息损失。

04

服务集成要处理元数据和调度

压缩后的 KV 需要记录精度、尺度、页表、token 范围、请求归属和可复用状态。它还要和连续批处理、分页 KV、前缀命中、请求抢占、流式输出和多卡切分协同,否则可能出现缓存碎片、命中率下降、解压开销抵消收益或调度复杂度上升。

05

质量评估不能只看显存

压缩策略必须用长上下文任务、needle 类定位、代码理解、多轮对话和真实业务样本验证。指标包括显存下降比例、最大并发、decode tokens/s、P95 延迟、prefix 命中率、回答准确率、长距离依赖保持、幻觉率和失败样本类型。

06

取舍取决于场景

如果业务有大量共享系统提示词或模板,Prefix Cache 的性价比很高;如果主要瓶颈是超长上下文和高并发显存占用,KV 压缩更直接。实际线上可以先做前缀复用和分页管理,再对长上下文或低敏感任务启用压缩,并保留回退策略。

易错点

  • 把 Prefix Cache 和 KV Cache 压缩混为一谈,只说都能省显存。
  • 只讲量化压缩率,不讲解压开销、显存带宽和实际 decode 延迟。
  • 忽略长上下文质量损失,默认压缩后答案不会变差。
  • 没有说明和 Continuous Batching、PagedAttention、请求抢占的兼容问题。
  • 把 Prefix Cache 描述成总能命中,忽略前缀规范化、模板变化和多租户隔离。
  • 只给单点优化,没有说如何用线上指标和 badcase 决定启用范围。

面试官追问

Prefix Cache 和 KV Cache 压缩可以同时使用吗?

可以。Prefix Cache 先复用共享前缀,压缩策略再降低被保留 KV 的单位成本。但要记录缓存状态和精度,避免复用时拿到不兼容或质量不可控的缓存。

为什么 KV Cache 会影响 decode 阶段速度?

decode 每生成一个 token 都要读取历史 K/V 做 attention。历史越长,读取量越大,容易从计算瓶颈转成显存带宽和缓存管理瓶颈。

KV Cache 量化最担心什么问题?

最担心长距离依赖和细粒度事实被破坏,导致模型在长上下文定位、代码细节、多轮状态上出错。因此必须按任务类型评估,而不是只看困惑度或平均分。

线上怎么判断应该优先做 Prefix Cache 还是压缩?

看流量结构。如果共享前缀多、prefill 重复明显,优先 Prefix Cache;如果请求上下文长、并发被显存卡住,优先 KV 管理和压缩。两者的收益指标不同。