问题
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 管理。
- 外置全闪存储:全部历史会话,并且可以让多个推理实例共享同一份缓存。
实测收益有多大
什么时候不适用
收益来自缓存命中。短对话、低并发的场景里,会话很少被逐出,也很少回来,这一层就没有多少内容可读。长上下文、多轮对话、Agent 和代码助手这类会话恢复频繁的负载,收益才明显。
所以在决定采购之前,应该先用自己的会话长度分布和并发量测一遍。
相关问题
相关实测报告
- R2FX100 KV Cache 性能测试报告(480B · TP8 长上下文)Qwen3-Coder-480B-FP8 以八卡单实例(TP=8)的标准生产形态部署,在长上下文冷恢复负载下做三方对照:FX100、本地 NVMe 单盘、无外存整段重算,并按并发 8 / 16 / 32 做梯度。本站引用最多的吞吐与 TTFT 数字出自这份报告。
AMD Instinct MI308X × 8 · ROCm 7.2 - R3FX100 KV Cache 性能测试汇总报告(480B · TP4×2 · 全指标)同一台 8 卡服务器改为四卡双实例(TP4×2)部署,九档负载记录全部指标:TTFT 的 p50 / p90 / p99、TPOT、吞吐与盘带宽。这份报告还验证了两件事:fs:// 共享池能让两个实例热共享同一份缓存;同一档位做两轮独立测量,偏差不超过 5%。
AMD Instinct MI308X × 8 · ROCm 7.2 - R8FX100 KV Cache 测试代码导出包与原始测试数据让第三方能自己重跑一遍的全部材料:LMCache 并行读补丁(git patch 与修改前后全文)、负载客户端、编排脚本、探针取证脚本,以及原始测试数据。
AMD Instinct MI308X · ROCm 7.2
外部参考资料
- 01Efficient Memory Management for Large Language Model Serving with PagedAttention · arXiv (SOSP '23)
vLLM 的 PagedAttention 显存管理与 KV Cache 分页的设计动机
- 02
- 03
延伸阅读
KV Cache 被逐出后重算还是读回?480B 模型实测
480B 模型、并发 16 的长上下文冷恢复负载下,整段重算与从 FX100 读回 KV Cache 的首 token 延迟和吞吐对比,附测试条件、两个对照基线和复现方式。
出处R2R3R4R8
KV Cache 分层在什么场景下没用?
KV Cache 分层的收益来自缓存命中。短对话、低并发、上下文从不重复、瓶颈在输出阶段,这四类负载收益有限。本文说明原因和自查方法。
出处R2
KV Cache 放本地 NVMe 还是外置 NVMe-oF 阵列?
两种做法都能避免整段重算。480B 模型三档并发的实测里,外置 FX100 阵列相对本地 NVMe 单盘吞吐更高、首 token 延迟更低;本文同时说明对照条件的局限。
出处R1R2R3