KV缓存修复预算该花在哪:重算答案所在块,5%预算胜过按token挑选
核心概要
非前缀KV缓存复用把检索到的块各自编码再拼接,会丢掉19%到100%依赖上下文的正确回答,同类干扰块还会加重损失。研究比较了把有限修复预算花在干扰块还是答案块上:恢复全部干扰块需要接近一次完整预填充,而把预算用于重算答案块,在开放域问答与API文档的九个设置中,5%预算下均胜过按token挑选的修复方法。
深度剖析
把检索到的块分别编码、再拼接缓存,会让模型丢掉一部分本来能答对的上下文依赖问题;当其他块与答案所在块同类时,损失进一步扩大。 完整预填充能答对、且必须依赖检索上下文的问题中,位置校正后的复用会丢掉19%到100%;即使干扰块换成领域外散文,仍有11%到92%的损失。 在Qwen3-8B、Llama-3.1-8B-Instruct和Mistral-7B-Instruct-v0.2三个模型与LoCoMo、NQ-Open、TriviaQA、Gorilla四个数据集组成的十二个设置中,复用损失区间均不含零;同类干扰项带来的额外损失在十二个设置中有九个显著为正。
可恢复的损伤分散在干扰块上,因此小预算花在少数干扰块上收效甚微,更适合花在承载答案的那一块上。 把全部干扰块的缓存替换为完整预填充缓存,在十二个设置中都比只替换答案块恢复得更多,其中十一个显著;而只替换一个干扰块,在二十四个情形中仅两个显著改变保留率。 在开放域问答与API文档的九个设置中,5%预算下重算已知答案块全部胜过按token挑选的修复方法,增益为0.10到0.49;预算翻倍到10%时,仍在其中四个设置显著领先,且从不显著落后。
重算答案块之所以有效,是因为它在复用缓存中重新编码,与问题实际读到的上下文相容,而不是因为它的KV更接近完整预填充的KV。 把答案块的完整预填充KV插入复用缓存,在七个设置中都被重算答案块击败,差距为0.13到0.38,尽管重算后的KV与完整预填充KV的中位相对距离仍有0.23到0.30。 在270个问题、七个设置上,当前面的块保持复用时插入完整预填充KV只带来+0.11的保留率提升,而当前面的块也恢复完整预填充KV时提升为+0.25,交互项为+0.14。
部署时答案块未知,而问题注意力在复用缓存上很少指向它,因此需要借助检索器定位,并把检索到的块移到问题之前再重算。 在复用缓存上,问题注意力最多只在18.8%的开发问题中选中答案块,而它最常落在紧邻问题的最后一块上,比例为58%到100%。 在同样的5%预算下,把检索器排名第一的块移到问题前并重算,在九个开放域问答与API文档设置中有六个显著胜过InfoFlow式重排;在对话记忆数据集上,块级重算相对按设置选定的token级选择器从未显著提升。
启示与展望
实验使用7B到8B的指令微调模型和四个英文数据集,并用Qwen3-14B与Qwen3-32B重复了主要条件;块级分配需要已知答案块或一个检索器,因此部署收益取决于检索质量。研究只考察以重算token数计的小预算,延迟仅在其研究引擎中测量。
收益受检索限制:当检索器没有把答案块排在第一时,重算被移动的块不如重算选中的token;把前三块一起移动的增益在九个设置中有七个落在由检索命中率预测的区间内。预算为10%时token级选择器仍有竞争力,而在对话记忆上,7B到8B模型的块级重算从未显著优于按设置选定的token级选择器。
