@akshay_pachaar:你的 KV 缓存中 90% 从未被重用。(提示缓存从未旨在解决此问题)如果你的系统提示和工具定义…
摘要
CacheBlend,EuroSys 2025 最佳论文,解决了由于提示缓存中严格的前缀匹配导致 90% 的 KV 缓存从未被重用的问题。通过选择性地仅重新计算文档之间的边界令牌,它在不损失质量的情况下实现了 2-4 倍的多文档处理速度提升,并在开源 LMCache 层中实现。
90% 的 KV 缓存从未被重用。
(提示缓存从未旨在解决此问题)
如果你的系统提示和工具定义是稳定的,那么提示缓存是目前可用最高杠杆的优化手段。缓存的输入令牌最多可便宜 90%,命中率可达 60% 到 85%。
但它有一条硬性规则:缓存的部分必须与新请求的精确字节前缀完全匹配。只要在该区域更改一个字符,就会导致完全缓存未命中。
这条规则在你经常遇到的三种情况下会失效:
→ RAG 涉及多个文档。你分别缓存了文档 A 和文档 B。现在某个查询同时需要两者。文档 B 的缓存状态是在不知道 A 的情况下计算的,因此它失效了,需要从头重新计算。
→ 文档顺序变化。相同的三个文档在不同请求中顺序不同。每种排列都是缓存未命中,即使内容完全相同。
→ 对话历史不断增长。每一轮新对话都会改变稳定前缀之后的所有内容,因此超出前缀的早期缓存状态变得毫无用处。
阿里云的生产数据展示了问题的严重性:10% 的 KV 缓存块服务了 77% 的命中。其余部分存放在存储中,从未被重用,因为前缀匹配不允许它们被复用。
CacheBlend,来自 LMCache 团队的研究论文(EuroSys 2025 最佳论文奖),正是针对这一问题。其核心洞察是:在现代 Transformer 中,令牌绝大多数关注自己的局部上下文。只有一小部分令牌携带跨文档边界的真正连接。
因此,CacheBlend 不会重新计算第一个缓存文档之后的所有内容,而是重用每个文档的缓存,仅选择性地重新计算那些少量的边界令牌。这些就是图中文档之间的小橙色修正,也是全部的开销。结果是在多文档查询上实现 2 到 4 倍的加速,且无质量损失。
顺序问题也随之消失。随意打乱相同文档的排列,每种排列都保持缓存状态,而前缀缓存则每次都会重新计算所有排列。图的底部并排展示了这一点。
这才是真正的转变:从缓存前缀转向缓存知识。知识库中的每个文档都成为可重用的缓存资产,无论它以什么顺序出现,或者旁边是什么文档。
CacheBlend 集成在 LMCache 中,这是一个开源的缓存管理层,运行在推理引擎之外,并与 vLLM、SGLang 和 TensorRT-LLM 集成,支持 NVIDIA 和 AMD GPU。
在 GitHub 上查看:https://github.com/LMCache/LMCache
(别忘了点星 ⭐)
我写了完整的架构解析,包括为什么缓存管理永远不应该放在推理引擎内部。文章引用如下。
敬请关注更多内容!
查看缓存全文
缓存时间: 2026/07/20 15:33
面向可扩展LLM推理的KV缓存管理层
博客 | 文档 | 加入Slack | 社区会议 | 路线图
相似文章
@akshay_pachaar: https://x.com/akshay_pachaar/status/2074502882812952666
一份关于KV缓存管理的实践指南,介绍开源LMCache架构,该架构通过消除代理工作流中的冗余上下文处理,将输入令牌成本降低90%,并将LLM推理速度提升高达14倍。
探究提示KV缓存:何处变得可舍弃
本文系统性地探究了在LLM解码过程中,何时以及提示KV缓存的哪些部分变得可舍弃,表明冗余主要涉及聊天模板脚手架而非任务内容,并且用中性填充内容进行替换可保持准确性。
解释提示缓存如何在大型语言模型(LLM)中工作,以Claude为案例,详细说明Transformer的KV缓存机制以及在代理工作流中缓存静态前缀的成本效益。
解释提示缓存如何在大型语言模型(LLM)中工作,以Claude为案例,详细说明Transformer的KV缓存机制以及在代理工作流中缓存静态前缀的成本效益。
为扩散语言模型启用共享前缀的KV缓存
本文提出BiCache,一种面向扩散语言模型共享前缀的新型KV缓存技术,通过动态重用浅层中缓存的键和值来避免精度崩溃,并实现36.3%–98.3%的吞吐量提升。
代理中的提示缓存
本文解释了提示缓存在大语言模型代理中的工作原理,涵盖 KV 缓存机制、预填充和解码阶段,以及其对延迟、成本和代理设计的影响。