跳到正文
芯元一

洞察

KV Cache 分层是什么?原理、收益与适用边界

发布于

问题

KV Cache 分层是什么?

结论

KV Cache 分层是把大模型推理时溢出显存的 KV Cache 依次存到主机内存和外置全闪存储,会话再次到来时直接读回,而不是让 GPU 把整段上下文重新计算。在 480B 模型的实测中,相对无外存整段重算,首 token 延迟 p50 从 149.5 s 降到 11.85 sR2。

为什么需要分层

大模型每处理一个 token,都会在各注意力层留下一份 Key / Value 张量,也就是 KV Cache。有了它,生成下一个 token 时不必重新计算前面的上下文。上下文越长,这份缓存越大。

显存要同时放模型权重和所有活跃会话的 KV Cache。会话一多,较早的缓存就被逐出。被逐出的会话再发来请求时,模型只能把整段上下文重新预填充一遍,首 token 延迟随之飙升。

分层的思路很直接:被逐出的 KV Cache 不丢弃,而是换个地方存着。

三层各放什么

缓存按访问热度放在三种介质上。前两层由推理框架管理,第三层需要单独的存储设备。

  • 显存:当前活跃的会话,由 vLLM 管理。
  • 主机内存:近期用过的会话,由 LMCache 管理。
  • 外置全闪存储:全部历史会话,并且可以让多个推理实例共享同一份缓存。

实测收益有多大

测试对象是 Qwen3-Coder-480B-FP8,以 TP=8 的生产形态部署在 8 × AMD MI308X 上,负载为长上下文冷恢复。有两个对照基线,要分开看。

对比无外存、整段重算:加速 8.6–20×R2。

对比本地 NVMe 单盘:吞吐提升 29–40%,TTFT p50 降低 26–32%R2R3。也就是说,同样是把 KV Cache 存下来再读,放在外置全闪阵列上比放在服务器本地的一块盘上更快。

什么时候不适用

收益来自缓存命中。短对话、低并发的场景里,会话很少被逐出,也很少回来,这一层就没有多少内容可读。长上下文、多轮对话、Agent 和代码助手这类会话恢复频繁的负载,收益才明显。

所以在决定采购之前,应该先用自己的会话长度分布和并发量测一遍。

相关问题

做 KV Cache 分层需要改造推理引擎吗?

不需要重写。实测使用的是开源的 vLLM + LMCache 组合,外加一个 LMCache 并行读补丁;补丁、编排脚本和原始数据都打包在 R8 里,可以在自己的集群上重跑R8。

KV Cache 分层和前缀缓存是什么关系?

前缀缓存决定哪些 KV Cache 可以被后续请求复用,分层决定这些 KV Cache 存在哪里。两者配合使用:前缀命中之后,分层保证被命中的缓存即使已经离开显存,也能从内存或外置存储读回。

相关实测报告

外部参考资料

  1. 01
    Efficient Memory Management for Large Language Model Serving with PagedAttention · arXiv (SOSP '23)

    vLLM 的 PagedAttention 显存管理与 KV Cache 分页的设计动机

  2. 02
    LMCache (GitHub repository) · LMCache Project

    LMCache 的源码、架构与存储后端说明

  3. 03
    vLLM Documentation · vLLM Project

    vLLM 的部署方式、前缀缓存与张量并行等配置的官方说明

延伸阅读

KV Cache 分层在什么场景下没用?

KV Cache 分层的收益来自缓存命中。短对话、低并发、上下文从不重复、瓶颈在输出阶段,这四类负载收益有限。本文说明原因和自查方法。

出处R2

KV Cache 放本地 NVMe 还是外置 NVMe-oF 阵列?

两种做法都能避免整段重算。480B 模型三档并发的实测里,外置 FX100 阵列相对本地 NVMe 单盘吞吐更高、首 token 延迟更低;本文同时说明对照条件的局限。

出处R1R2R3

全部文章

先联测,后决策

先联测,后决策

合作从一次约 10 周的门禁化联测开始。四道门禁逐级放行,任何一道不达标就在那里停下,不必为没有被证实的收益买单。

联系人
王利民
电话
13161818898
邮箱
mingxin@agentmail.to

邮箱由 AI 自动接收与分拣,7×24 小时在线