一篇承认没赢的论文,把 LLM 的 KV Cache 驱逐问题重新讲了一遍
跑过本地模型的人应该都见过这个场景:上下文一长,显存先扛不住,KV Cache 把预算吃干抹净。各路驱逐策略轮番上场——StreamingLLM 保开头保新鲜,H2O 按注意力累积分高低,SnapKV 试图猜未来。它们的共同点是都在 token 抵达那一刻决定留谁丢谁,区别只在于用过去的信息还是猜未来的需求。
最近 arXiv 上有篇论文换了个角度。Maruthi Vemula 和 Neeraj Praneeth Gajula 把驱逐决策重新定义为「估计问题」——你要保留的 token,本质上是那些会被再次用到的 token;而「会不会被再次用到」是一个隐藏信号,只能在事后确认。这篇 8 页、3 张图、3 张表的短文,CC BY 4.0 许可,读起来像一篇理论笔记,不是那种 SOTA 冲锋稿。
它的核心框架用一条轴来排列所有方法:「提交延迟 H」。在线过滤和学习型预测器在 H=0 时提交——token 一来就决定丢不丢。Belady 的离线最优解站在另一端,它看到了整个未来。中间缺失的区间叫固定滞后平滑:等几步,观察哪些 token 被真实的后续注意力用到,然后再做决定。
这个「被真实用到」的信号,论文叫它「demonstrated utility」——不是猜未来,而是看模型在接下来几步里实际 attend 了谁。这个思路被实例化成一个无需训练的策略 RMM(Retention via Measured Merit),严格来说是 H2O 的泛化:当测量结果均匀分布时,RMM 就退化为 H2O。
控制实验里,token 复用在时间上分离得明确且是内生时,demonstrated utility 确实比 accumulated attention 更准,小缓存能表现出大得多的效果。然后论文进入了不太常见的部分:坦白。
RMM 在 NVIDIA 的 KVPress 测试框架里跑了一遍,和 SnapKV、H2O、StreamingLLM 的实现做了对比。单轮问答上 RMM 和 H2O 持平,流式多轮对话里同时输给了 H2O 和 SnapKV。论文写得很直白:「advantage mostly disappears」。原因也很干脆:在自然文本上,模型对大多数 token 的判断已经正确,所以用正确性重新加权注意力分数几乎改变不了什么。除非 token 复用的模式非常尖锐且内生——标准 benchmark 恰恰不包含这种场景。
这正是这篇论文最值得读的部分。它没有说「我们提出了一个方法,比所有基线都好」,而是提供了一个框架和一张诚实的地图——告诉你「测量」什么时候比「积累」更有效。结论是:在大多数自然语言场景下,两者差别不大。
对于正在折腾 KV Cache 优化的人来说,这篇论文的价值不在 RMM 本身——它大概率不会让你的模型跑得更快。它的价值在于把问题重新讲清楚了:「驱逐一个 token」和「估计一个 token 是否会被复用」是同一件事。当你要做这个估计的时候,你可以选择看过去、猜未来、或者等几步,看模型实际怎么用。
这个「等几步再看」的思路,在工程直觉里并不陌生。你批完一个 PR 不会立刻合并,等两轮 review 看看反馈;给一个请求打了标不马上归档,等几天看看有没有后续关联操作。但要把这个直觉塞进自回归生成的一个 step 里,写成不需要额外训练的推理策略,并且诚实地标出它在什么情况下不 work——这就是这篇论文真正做完的事。论文自己也说得很清楚:「Our contribution is the framework and an honest map of when measuring beats accumulating, not a new state of the art。」
读到这里我倒觉得,这篇比另一堆「显著超越所有基线」的论文更像一篇应该被读的论文。