Llama 算过的文档,Qwen 不用重读——这篇论文让 KV 缓存跨模型复用

同一段上下文,换个模型为什么就得重算一遍?

一家已经上线的大模型服务通常不会只跑一个模型。为了省钱,它先让一个 1.5B 的小模型回答用户问题,答得不够好再升级到 7B,甚至更大的模型。用户的聊天记录、检索出来的文档、系统提示词拼成一段 16K token 的上下文,而每一次模型升级,这段文字都要被新模型从头读一遍。Llama 明明已经把这段上下文逐 token 算过,结果却一个字都留不下来;轮到 Qwen 接手时,一切回到起点。模型路由、多 agent 协作这些新架构让"同一个上下文被多个模型反复消费"成了常态,这笔重复账只会越滚越大。

这笔"算过就忘"的账,根子在自回归模型的工作方式上。生成一个新 token,它要对前面所有 token 重新做一遍 attention;不缓存的话,每生成一步都要把前面的 K 和 V 全部重算,代价随序列长度平方上涨。KV 缓存(键值缓存)就是把这个中间结果存进内存:prefill(预填充)阶段把整段上下文的 K/V 一次性算完,决定用户等多久才能看到第一个字,也就是首 token 延迟(Time to First Token,TTFT);之后的 decode(解码)阶段每生成一个 token,只往缓存里追加一行。KV 缓存综述 KV 缓存能把"同一段文字在同一次对话里反复读"的重算抹掉,可它从生下来就只属于算出它的那个模型:上下文一旦流转到别的模型,全部计算就得从零再来一遍。

同模型内部的复用,已经做到接近物理极限。vLLM 的 PagedAttention 把 KV 缓存当操作系统的虚拟内存来管理:切成固定大小的物理块,通过每请求一张的 block table(块表)在逻辑块和物理块之间映射,内存有效率被提高到接近 100%,同模型吞吐比当时最好的系统提升 2 到 4 倍。PagedAttention 同一模型内部省得越狠,越衬出那个边界:这些增益全都跨不出模型的门。

PagedAttention 块级复用示意

图注:PagedAttention 的块级复用示意。KV 存储被切成三个不连续的物理块,每个块里装着若干 token 的 K/V,第一块里能看见 "Four score and seven" 等 token 的 K 值;上方的 query 向量按块计算 QK^T 与 softmax,再把加权后的 V 跨块聚合,得到完整 attention 输出。整块存、整块复用,物理位置是否连续不再重要。PagedAttention

复用还能再往前一步:KVLink 把复用从严格的共享前缀推进到"把 10 段检索文档独立预计算、推理时再拼起来"的非前缀拼接,首 token 延迟能降 85% 到 96%。但它和 PagedAttention 一样,都要求生产者和消费者是同一个模型。KVLink

把开头那个场景放回这里看:服务商手里同时挂着多个模型,小模型答不好就升级大模型,路由把请求分给不同模型,多 agent 各自消费同一段上下文。每一次换模型,同模型复用省下的钱都全数归零。同模型优化已经到顶,跨模型重算正是这张复用版图上最大的一块待开垦地。

反常就在这里:缓存不是稀缺资源,而是被锁死在产生它的模型里。同样的文字,模型 A 算过一遍,模型 B 还得原价重算一遍。

图注:同一段上下文的两条命运。左侧是模型 A 的正常流程:prefill 一次性算完全部 K/V 并缓存,decode 阶段反复复用。右侧是换模型后的现实:A 的缓存作废,B 只能把整段上下文重新 prefill 一遍。跨模型复用要消灭的,就是右半边的重复劳动。

跨过模型边界复用,到底难在哪里?

KV 是模型的私有记忆——跨模型共享难在哪一步?

难点首先是几何层面的。两个模型的隐藏维度不同,矩阵拼不到一起;层数不同,不知道 A 的第 12 层该对应 B 的第几层;注意力头数不同,K/V 的组织方式对不上;RoPE(旋转位置编码)不同,同一个位置在两个模型里被旋转成不同的向量;连 tokenizer 都不同,"谁在哪个位置"都说不清。比几何更根本的是语义:两套参数各自学出了自己的表示空间,同一个概念在两个空间里的坐标毫无对应关系。这些错位叠在一起,意味着把 A 的缓存搬给 B 不可能靠任何直接的张量操作完成,只能靠一个学习出来的映射去猜 B 会怎么理解 A 的表示。

打个比方。KV 缓存是模型用自己的语言写的私人工作笔记。笔记对本人是完美的记忆线索,换一个人来看,字迹、术语、缩写全是天书,等于废纸。要让第二个人接着用这份笔记,需要的不是把它抄一遍,而是找一个同时懂两边的翻译。

这个子方向在 2025 年 10 月被 C2C 点燃,之后九个月里五六种答案挤压式出现:有人改 fuser、有人往低维压、有人换双缓存,还有人绕道免训练。只是每一条都背着自己的假设债,互不通用。

C2C(Cache-to-Cache)是第一个明确提出"模型之间直接用 KV 沟通"的工作,发表在 ICLR 2026。它训练一个 Cache Fuser,把共享上下文里两个模型的 KV 拼接、投影、做输入感知的动态加权,再经一个可学习的门以残差形式注入接收方的缓存。代价是它要求 Sharer 和 Receiver 先读同一段上下文,token 位置还要逐一对齐。注意 C2C 的算盘:两个模型各自 prefill 的钱一分没省,它省的是 text-to-text 通信的开销,也就是把一方连续的隐藏状态硬解成一串文字、再让另一方逐 token 重新编码的那段成本。C2C

Cache Fuser 架构

图注:C2C 的 Cache Fuser 结构。左右两端分别是冻结的 Sharer 和 Receiver 模型,中间是 fuser 的三段设计:投影与特征融合、输入感知的动态加权、每层的可学习门,输出以残差形式加回 Receiver 的 KV 缓存,再进入自回归解码。C2C

LCF 把这个 956 MB 的 fuser 压成一个 13 MB 的潜变量瓶颈,精度还更高,但它仍然活在 shared-context(共享上下文)设定里;它的跨上下文变体 LCF-X 用位置无关的 pooling 打掉了这个假设,验证却只落在同一个模型的两个实例之间。LCF

XKV 走感知接收方(receiver-aware)的双缓存翻译,benchmark 铺到 45 个数据集-模型对,却仍受制于 3B 以内的小模型,翻译器照样要训练。XKV

NVIDIA 的 Heo 等人走了彻底不同的路:免训练闭式解。他们发现同家族内源 K/V 到目标 K/V 存在很强的线性结构,给目标模型的每个层每个头各拟合一个线性回归就能完成翻译,Qwen3 14B 传给 32B 保留了 97.6% 的原生准确率。但它只在 matched-KV 对上成立,也就是两模型必须共享注意力头数和每头维度,跨家族就失效。线性映射

还有 C²KV 这种"压缩 + 复用"的并行路线,把文档压成一组 C² tokens 再拼接使用,站在翻译路线旁边自成一体,说明这个方向已经分化出多个流派。C²KV

把这些放在一起,结论很清楚:有神经 fuser、有潜变量压缩、有双缓存、有闭式线性解,但没有任何人敢承诺任意模型对即插即用。每一条先遣路线都只在自己的假设圈子里成立。UT Dallas 的这篇论文正是在这个位置开口主张 universal:它不再问"这一对模型该怎样对应",而是问能不能有一种与具体模型对无关的翻译机制。翻译不该是一对一专门训练的东西,而应该是一个通用的层。

一张翻译层:怎么把源模型的 KV 变成目标模型能接着用的样子?

这篇论文的答案,是在源模型的 KV 缓存和目标模型的解码器之间,插一层 context-reuse layer(上下文复用层)。论文把它定位为一个学习出来的传输模块(learned transport module),任何能把源缓存翻译成目标兼容格式的参数化形式都算数。这是全篇唯一的架构图,也是一切主张的浓缩:

跨模型 KV 共享总流程

图注:跨模型 KV 共享总流程。从左到右依次是 Shared Context(系统提示词、对话历史、检索文档、持久上下文)、源模型 prefill、源 KV 缓存、Cross-Model KV Translator(context-reuse layer)、目标兼容 KV 缓存、目标模型 decode;翻译器下方有绿色虚线框的 within-family transfer(家族内)和紫色虚线框的 cross-family transfer(跨家族)两条分支。顶部气泡写着论文的全部主张:Compute context once, reuse across models。Context-Reuse Layer

这个层有三个设计点值得抠。

第一是位置与职责。它夹在源缓存和目标解码器之间,目标模型完全冻结,不再独立 prefill 整段 prompt。翻译器可以跟着源缓存被调度到任何地方,只要输出的兼容缓存能被目标解码器消费。第二是输入输出和"足够好"的标准。输入是源模型的 KV 缓存,输出是翻译后的兼容状态 $\hat{T}B(C) = T{A\to B}(KV_A(C))$。论文明确不要求翻译结果等于目标模型原生算出的 KV,只要它携带足够的上下文信息,并且满足一个成本不等式:翻译的代价加上系统开销,必须小于重新 prefill 的代价。翻译层追求的不是逐位还原,而是性价比。

这一层像极了会议口译。口译员坐在说话人 A 和目标听众 B 之间,听 A 的源语言,向 B 输出译文,B 不需要再把 A 的话重听一遍。口译的合格标准也不是逐字对译,而是意思传达到位,并且比让 B 回去自学源语言便宜。对应关系是:A 是源模型,B 是冻结的目标模型,口译员是 context-reuse layer,A 的发言是源 KV 缓存,译文是目标兼容缓存。碰上译错关键信息的场合(长文下确实会错),就是该权衡保底重算的时候。

第三是不承诺单一架构。论文给的是一个设计空间:可以按层、按层组、按单个 KV head、按共享中间表示、按压缩 KV,或按低维 latent adapter 来实现。模型对越异构,需要的翻译复杂度越高,具体形态留给实现者权衡。位置和接口是确定的,内部怎么组织是开放的。论文在 fidelity(保真度)和翻译开销、翻译器体积、接入新模型的难易度四个目标之间划线:翻译得越精细通常越贵、越大,也越难迁移到没见过的模型对上,取哪个点由部署场景决定。训练方式同样明确:家族内的传输模块是在 NoLiMa 提示上训练出来的,不是免训练闭式解,每档实验各训一个模块。

那么"跨模型对齐"具体长什么样?NVIDIA 的线性映射论文提供了一个能看见的实例:

Per-head 线性映射器

图注:per-head 线性映射器。左侧源模型(示例 Qwen3-14B)被选中的若干层以蓝色高亮,每层画出 8 个注意力头的 K 与 V;中间是为每个目标 (layer, head) 独立拟合的线性映射,K 路径把选中的源 K 拼接后乘 W_K 加偏置、投影进目标头维度,V 路径同理;右侧目标模型(示例 Qwen3-32B)的 L0 到 L63,目标槽位接收映射输出。蓝块是选中的源层,蓝箭头是 K 数据流,橙箭头是 V 数据流。线性映射

更关键的是它处理位置编码的方式:先把源 K 的旋转位置编码反解掉,在无位置的"内容空间"里完成线性映射,推理时再给目标重新施加它自己的位置编码。这样翻译器学的是纯内容对应,换个上下文长度或位置配置仍然成立。

anchor 论文没有承诺任何一种具体实现,它把按层对齐、按头对齐、剥离位置只翻内容这些可能性并成一个设计空间。正因如此,"通用"二字必须靠实验来兑现。

三档实验:同族、跨族、十倍规模差,真的接得住吗?

实验按异构程度递进排成三档,数字均出自论文的 Tables 1、5、7。三档的排布本身就是论文的论证结构:先在差异最小的家族内证明机制可行,再在同规模跨家族证明翻译不依赖血缘,最后用十倍规模差证明收益随差异放大。

第一档:家族内(within-family)。 源模型 Qwen2.5-7B-Instruct,目标 Qwen2.5-1.5B-Instruct,在 116 个 LongBench2 样本上比多项选择准确率:

路径准确率
Qwen2.5-7B 原生45.69%
Qwen2.5-1.5B 原生27.59%
7B→1.5B KV handoff34.48%

handoff(移交,把大模型的缓存翻译给小模型)比 1.5B 原生高 6.89 个百分点,收回了 7B 与 1.5B 之间差距的 38.1%。反常点在这里:翻译过去的记忆不仅没有损耗,还让小模型"继承"了大模型的理解力。缓存里装的不只是文本内容,还有 7B 参数沉淀出来的表示质量。延迟上,handoff 是纯增量成本,源缓存本来就在内存里:8K-16K 上下文下只需 34.5 ms,而 1.5B 自己 prefill 要 158.7 ms,快 4.6 倍;16K-32K 档是 53.8 ms 对 288.3 ms,快 5.4 倍。其中纯翻译只占 9 到 12 ms,其余是缓存拷贝和装配等系统开销,说明下一步要优化的主战场在系统层,而不是翻译器本身。Context-Reuse Layer

第二档:跨家族(cross-family)。 Qwen2.5-1.5B-Instruct 翻译给 Gemma-2-2B-IT,在 FineWeb-Edu 文本上比较相对 Gemma 原生 prefill 的成本下降:

prompt 长度prefill 成本下降
128 tokens45.25%
1K59.90%
4K67.04%

4K 时 handoff 只花 59.897 ms,Gemma 自 prefill 要 181.706 ms。质量上用困惑度衡量,翻译结果与原生 Gemma 在不同解码视野下互有胜负,差距最大出现在 512 步视野(14.037 对 13.574)。跨家族翻译的"手感"还没完全对齐,但成本已经实打实省下来。对一个把 Qwen 和 Gemma 同时挂在路由后面的服务来说,这意味着每次切换模型都能省掉大半预填充,首 token 延迟的报价可以直接降一档。

第三档:异构(heterogeneous)。 Llama3.1-70B 翻译给 Qwen2.5-7B,同时跨家族、跨十倍参数量级:

路径准确率延迟
Llama3.1-70B 原生44.0%7,328 ms
Qwen2.5-7B 原生45.7%899 ms
Llama→Qwen handoff44.0%138 ms

handoff 保住了原生 Qwen 准确率的 96.3%,延迟只有目标自己 prefill 的约六分之一(6.5 倍);如果把源模型 70B 的自推理时间也算进来,则是 53.1 倍。规模差越大,省下的计算越夸张。在路由级联里,如果 70B 大模型的回答不够好、要交给目标模型接着答,handoff 用 138 ms 就能接棒;让目标自己 prefill 要近 0.9 秒,让源模型重来一遍要 7 秒多。

三档数字摆完,结论是扎实的:翻译层在质量上逼近、甚至局部超过目标小模型的原生水平,在延迟上大幅低于任何原生路径。但数字带着两条尾巴。第一条是长上下文:家族内实验里,8K-16K 档准确率 40.74%,16K-32K 档掉到 32.58%,回落了整整 8.16 个百分点,论文自己也把面向长上下文的对齐机制列为后续工作。第二条是覆盖范围:三档实验只落在 Qwen、Gemma、Llama 三个家族,这配不上标题里 universal 一词的完整含义。

通用二字的边界:它为什么重要,下一个问题是什么

先把这篇论文放回同期工作的坐标系里,给它一个不吹不黑的定位:

路线训练/免训练关键条件验证范围
C2C训练两侧需读同一段上下文神经 fuser,最大 sharer 4B
LCF训练token 位置对齐0.5B/0.6B 规模对
XKV训练receiver-aware 双缓存45 个数据集-模型对,模型 ≤3B
闭式线性映射免训练matched-KV 对同家族内保留 73% 到 98%
anchor context-reuse layer训练无对齐假设三档递进,Qwen/Gemma/Llama

anchor 的独特之处不是某个数字,而是验证了此前没人验证过的设定:跨家族、非 matched-KV、十倍规模差。第三档那种组合,任何先遣路线都没跑通过。而第三档恰恰是最接近生产现实的组合:路由场景里大模型读完上下文、交给小模型接着答,参数差一个数量级是常态。但它也有明显短板:只有三档实验,无代码、无数据公开,arXiv 页面上唯一的产物链接是一段 demo 视频。它给的是抽象和数字,不是可复现的 runtime。

"universal"的精确边界,论文自己在结尾限定了:还需要在更多架构、工作负载、上下文长度和部署环境上做进一步验证。实际验证过的只有三个家族、最长 32K 的上下文;Mamba 这类 SSM 混合架构、不同的 tokenizer 配置、大规模生产负载,全是开放问题。标题里的 universal 是"三个家族内跨模型对通用",不是"对所有架构通用"。

那它凭什么值得关注?因为它把实验结果提升成了系统抽象。论文提出 context mobility(上下文移动性):已处理信息的计算价值,应当能随工作负载跨异质模型、agent 和执行环境迁移。四类最受困于重复 prefill 的工作负载都是它的靶子:先便宜后昂贵的小模型升级级联(model escalation)、多 agent 协作、模型路由、校验管线。它们的共同点是同一个上下文反复被不同模型消费。论文特别强调,要让这套抽象真正成立,运行时必须能先判断"这段上下文的相关计算是否已存在、有没有可用的翻译路径",查不到就退回原生 prefill。这里还要分清两条路线:KV 压缩和量化解决的是缓存体积,本篇解决的是重复计算,前者减体积、后者减重算,最终要在系统层面合流。

合流的方向,芝加哥大学团队的愿景论文画得最清楚:把 KV 缓存当内容分发网络来管理,跨云、跨地域、跨存储层级,在存储、传输、重算三者之间做联合决策。

Internet for the KV Cache 愿景

图注:Internet for the KV Cache 的系统愿景示意:跨 cloud、跨 region、跨 storage tier 的 KV 缓存内容分发网络拓扑,包含计算节点、存储层级、网络路径与控制面等元素。这是方向性蓝图,不是已部署的系统。Internet-KV

回看整条线:同模型复用已经做到极致,跨模型复用从无人问津到五六条路线扎堆只用了不到一年,而这篇论文是第一个把"通用翻译层"当独立组件来主张、又用三档递进异构度验证了它的工作。它没有赢下一个耀眼的 benchmark,但它把一个判断摆上了桌面:KV 缓存不该是模型的私人日记,而该是可以跨模型流转的公共资产,翻译层就是这本日记的通用口译。真正留给下一轮研究的问题,是如何把单个翻译层做成跨模型、跨系统的 KV 基础设施:新模型上线时没有现成翻译路径怎么办、翻译质量怎么量化评估、翻译层塞进 vLLM、SGLang 这类推理栈时怎么调度、它和自动前缀缓存如何协同,论文一个字都没提,全都还没有答案。

想深入可以读原文:A Universal Context-Reuse Layer for Cross-Model KV Sharing — arXiv:2608.30963

参考文献

Llama 算过的文档,Qwen 不用重读——这篇论文让 KV 缓存跨模型复用