跨模型 KV 缓存转移(Cross-Model KV Transfer):闭式线性映射与 Prefill 复用

8383 字
42 分钟
跨模型 KV 缓存转移(Cross-Model KV Transfer):闭式线性映射与 Prefill 复用

AI 生成内容声明

背景:模型家族切换与 Prefill 的重税#

生产环境中的大语言模型(Large Language Model, LLM)服务正在向”模型家族”(model family)演进:同一家公司发布同一架构、多个尺寸的模型,例如 Qwen3 的 4B/8B/14B/32B、Llama 3.1 的 8B/70B、Ministral 3 的 3B/8B/14B。家族成员共享核心架构选择(tokenizer、注意力类型、训练数据),但层数、隐藏维度、训练配方随规模而不同。

围绕模型家族,业界发展出三种很自然的调度玩法:

  • 成本-质量级联(cost-quality cascading):简单请求走小模型省钱,检测到难题时升级到大模型;
  • 会话中途切换(mid-conversation switching):对话前几轮用便宜模型顶着,用户开始问硬核问题后再切到更强模型;
  • 家族内路由(routing):一个路由器(router)在家族成员之间动态选择模型。

这三种玩法有一个共同的隐形税:每次切换,接收方模型都必须把累积的上下文从头做一遍预填充(prefill)。prefill 是把整段 prompt 并行前向计算一遍、产出 KV 缓存(Key-Value Cache)和第一个 token 的阶段,其成本随模型参数规模和 prompt 长度线性增长。长对话场景中上下文可能累积到数万 token,切换一次模型,首 token 延迟(time-to-first-token, TTFT)直接多出数秒。

一个常被忽略的事实是:prefill 的计算产出物本质上就是 KV 缓存。“重新 prefill”和”重新算一遍 KV 缓存”是同一件事。前缀缓存(prefix caching)只能在单个模型内部复用 KV——同模型、同前缀的请求之间共享;换一个模型,此前所有计算全部作废。

这就引出一个干净的问题:A 模型算好的 KV 缓存,能不能直接变换成 B 模型期望的格式,让 B 跳过 prefill 直接解码? 这个需求是双向的:小模型 → 大模型是质量升级(升级后不用重算累积上下文),大模型 → 小模型是成本降级(长上下文阶段切回小模型以降低逐 token 解码成本)。

NVIDIA 团队(Taekyung Heo、Ritchie Zhao、Bita Darvish Rouhani 等人)于 2026 年 8 月 4 日将题为《Cross-Model KV Cache Transfer in LLM Families: A Closed-Form Linear Mapping for Prefill Reuse》的论文发布在 arXiv 上(preprint),正是解决这个问题。论文的核心结论出人意料地简单:同一家族的两个模型之间,KV 缓存近似相差一个线性映射;而线性映射有闭式解,只需要在少量校准数据上解一次岭回归,完全不需要梯度训练。

问题形式化与”匹配 KV”的概念#

先给出论文的符号体系。设源模型 SSLsL_s 层,目标模型 TTLtL_t 层,两者都使用分组查询注意力(Grouped-Query Attention, GQA),KV 头数分别为 nkvsn^s_{kv}nkvtn^t_{kv},每头维度分别为 dhsd^s_hdhtd^t_h。对长度为 TT 的输入序列 x=(x1,,xT)x=(x_1,\dots,x_T),源模型第 ll 层第 hh 个 KV 头产出 keys 和 values:

Ksl,h,  Vsl,hRT×dhsK^{l,h}_s,\; V^{l,h}_s \in \mathbb{R}^{T \times d^s_h}

源模型的完整 KV 缓存记为 CSC_S,目标模型的记为 CTC_T。由于家族内共享 tokenizer,同一序列在两个模型中的长度相同。

论文把研究对象限定在一类特殊的转移对上:匹配 KV 对(matched-KV pair)——源与目标的 KV 头数相等(nkvs=nkvtn^s_{kv} = n^t_{kv})、每头维度相等(dhs=dhtd^s_h = d^t_h),即使层数 LsLtL_s \neq L_t、参数量差好几倍。本文研究的三对家族全部满足这个条件(Qwen3 的 8 头 × 128 维、Llama 3.1 的 8 头 × 128 维、Ministral 3 的 8 头 × 128 维)。匹配 KV 意味着源与目标在同一层同一头之间可以逐分量对齐,这是后面线性拟合能成立的结构前提。

任务是找一个映射 f:CSC^Tf: C_S \to \hat{C}_T,使得目标模型用 C^T\hat{C}_T 代替自己的 CTC_T 解码时,下游任务输出尽量不变:

mτ(T(x;C^T))mτ(T(x;CT))m_\tau\big(T(x; \hat{C}_T)\big) \approx m_\tau\big(T(x; C_T)\big)

其中 τ\tau 是下游任务,mτm_\tau 是该任务的评测指标。论文把 ff 分解为每个目标(层,头)各自的 key 映射 fKl,hf^{l,h}_K 和 value 映射 fVl,hf^{l,h}_V。注意论文用目标模型的下游准确率来度量迁移质量,而不是用重建误差——这是全文最关键的评测立场,后面会看到它带来了怎样的结论。

跨模型 KV 缓存转移的整体流程:源模型正常 prefill 出 KV 缓存,per-head 线性映射把它变换成目标模型的 KV 格式,目标模型跳过 prefill 直接解码
跨模型 KV 缓存转移的整体流程:源模型正常 prefill 出 KV 缓存,per-head 线性映射把它变换成目标模型的 KV 格式,目标模型跳过 prefill 直接解码

(图源:论文 Figure 1,NVIDIA, 2026)

前人方法的四个短板#

跨模型 KV 复用此前已有若干工作,论文用四个判据横向对比(见论文附录 A 的 Table 6):

方法无梯度跨规模传输 KV 值闭式解
C2C(Cache-to-Cache, ICLR 2026)
LatentAlign(K-V 缓存对齐, arXiv 2026)
IAM(注意力模式映射, ACL 2025)
DroidSpeak(NSDI 2026)
本文方法

逐一说明:

  • C2C(Cache-to-Cache)为每个模型对训练一个神经融合器(neural fuser),把两个模型的 KV 融合。它需要逐对做梯度训练,成本高、泛化差。
  • LatentAlign(Latent space communication via K-V cache alignment)为每个模型学习一个适配器(adapter),把各自 KV 投射到一个共享的潜空间。同样需要训练。
  • IAM(Efficient inference through attention mapping)不搬运 KV 值,而是把小模型的注意力模式(attention pattern)代入大模型。它确实无梯度,但传的是模式不是缓存,复用程度有限。
  • DroidSpeak(KV cache sharing across fine-tuned model variants)只在架构完全相同的微调变体之间共享 KV(比如同一个 base 模型和它的 SFT 版本),不支持跨规模迁移,8B → 70B 这种不行。

“无梯度”这个判据的重要性在于部署形态:一个 PP 模型的家族有 P(P1)P(P-1) 个有向转移对,如果每对都要训练一个网络,这个方法只能停留在论文演示层面;而如果映射是闭式解,每对只需要”跑一次最小二乘”级别的拟合,部署成本完全不同量级。

除了这四类,还有三条正交的研究线与本文可组合:模型内部的跨层 KV 复用(如 CLA、xKV,挖掘同一模型各层表征的冗余)、prefill 加速(如 Speculative Prefill、SwiftKV),以及跨模型线性表征对齐(如 Platonic Representation Hypothesis 系列工作)。它们各自的机制不同,与本文的映射器可以叠加使用。

核心观察:跨模型 KV 存在显著的线性结构#

整个方法能成立,压在一个实证观察上:同一家族内两个模型的 KV 缓存之间存在显著线性关系。论文先不做任何复杂映射器,而是用最简单的单源层线性回归去探测这个结构。

探测方法如下。对缓存类型 C{Krope,Kstripped,V}C \in \{K_{\text{rope}}, K_{\text{stripped}}, V\}KropeK_{\text{rope}} 是模型实际使用的带旋转位置编码的 keys,KstrippedK_{\text{stripped}} 是剥掉位置旋转后的 keys,VV 是 values),对每个”源层 ll'、目标层 ll、头 hh“三元组,在 token 级别拟合一个普通最小二乘回归(Ordinary Least Squares, OLS):用源模型该层该头的每个 token 特征向量 Csl,hRdhsC^{l',h}_s \in \mathbb{R}^{d^s_h} 预测目标模型对应位置的 Ctl,hRdhtC^{l,h}_t \in \mathbb{R}^{d^t_h}

C^tl,h=Csl,hW+b,WRdhs×dht,  bRdht\hat{C}^{l,h}_t = C^{l',h}_s W + b, \qquad W \in \mathbb{R}^{d^s_h \times d^t_h}, \; b \in \mathbb{R}^{d^t_h}

用决策系数(coefficient of determination, R2R^2,即方差解释率)度量拟合质量,再对 nkvtn^t_{kv} 个目标头取平均,得到每个(源层,目标层)对的 head 平均 R2R^2,画成热力图。

跨模型 KV 的线性结构探测:每个热力图单元是"单源层线性回归"的 head 平均 R²,行是源层、列是目标层,分别对应带 RoPE 的 keys、剥 RoPE 的 keys 和 values
跨模型 KV 的线性结构探测:每个热力图单元是"单源层线性回归"的 head 平均 R²,行是源层、列是目标层,分别对应带 RoPE 的 keys、剥 RoPE 的 keys 和 values

(图源:论文 Figure 2,Qwen3 家族)

热力图揭示了四个定性规律:

  1. 线性拟合度很高:单层线性回归就能解释目标 KV 方差的大部分,最可预测的目标层上,Qwen3 14B→32B 的 KstrippedK_{\text{stripped}} 单格峰值 R2=0.81R^2=0.81,较弱的 8B→32B 也有 0.65。对角线附近的单元显著高于随机水平。
  2. 越相近的模型,对角线越清晰:架构与深度差距越大,线性结构越弥散。
  3. RoPE 污染拟合:剥掉 RoPE 之后对角线显著变锐利,说明位置编码和内容耦合会干扰线性关系——这直接催生了映射器的第三个组件(RoPE 因式分解)。
  4. K 比 V 更可预测:两者 head 平均 R2R^2 通常差约 0.2。直觉是:key 承载的主要是”检索信息”(这个 token 应该被谁注意到),在同族模型里检索结构高度保守;value 承载的是”内容信息”,模型规模变大后内容表征会重新组织,漂移更大。

定量地说,在 Qwen3 14B→32B 上,单个源层平均解释目标 keys 的 56% 方差、values 的 32% 方差;把多个源层拼起来后上升到 79%(K)和 65%(V)

需要多少个源层?#

单源层探测只回答”有没有线性结构”,还要回答”一个目标层需要从源模型的几层取信息”。论文用贪心前向选择(greedy forward selection)回答:从 R2R^2 最高的单个源层起步,每轮加入让联合 R2R^2 提升最大的下一个源层,画出 k=1k=1k=k= 全部源层的曲线。

贪心前向选择曲线:R² 随源层数 k 的变化,K 与 V 两行、Qwen3 8B→32B 与 14B→32B 两列,每条曲线代表一个代表性目标层,曲线在 k=1 到 k=4 间陡升、k=6 后接近饱和
贪心前向选择曲线:R² 随源层数 k 的变化,K 与 V 两行、Qwen3 8B→32B 与 14B→32B 两列,每条曲线代表一个代表性目标层,曲线在 k=1 到 k=4 间陡升、k=6 后接近饱和

(图源:论文附录 B Figure 5)

结论非常集中:收益集中在 k=14k=1 \to 4k=6k=6 就达到全层 R2R^2 的 92.3%(K)/ 87.7%(V),之后边际递减。在 Qwen3 14B→32B 上,k=1k=1 只达到 k=k= 全部时 R2R^2 的 66%(KstrippedK_{\text{stripped}})和 42%(V)。也就是说,互补信息分布在不同源层之间,单一源层远不够用,但也没有必要用全部源层。

为什么同族模型的 KV 会有这种线性结构?论文没有给出理论证明,但直觉是清楚的:家族模型由同一份数据、相近的 tokenizer、相近的训练配方练成,中间层学到的特征空间高度同构——尤其 key 这种低频检索结构,几乎是”家族指纹”级别的保守量。把这种结构量化成”一个 per-head 线性映射能搬走 97% 的信息”,本身就是有价值的实证贡献。

映射器设计:per-head 闭式岭回归#

有了线性结构的证据,映射器的形态就确定了。对每个目标(层 ll,头 hh),训练一个独立的线性映射(K 和 V 各一个),三者合一构成完整方案:

  1. 逐头岭回归(per-head ridge regression)——闭式解、无梯度;
  2. 跨层源选择(cross-layer source selection)——每个目标层从 top-k 个最有预测力的源层取输入;
  3. RoPE 因式分解(content-space mapping)——在无位置空间里做映射,让拟合与上下文长度解耦。

per-head 线性映射器:每个目标 (l, h) 的 top-k 源层(按 head 平均 R² 选取)拼接后,由独立的岭回归 W_K 和 W_V 映射到目标 K、V 空间,头之间、K/V 之间不共享参数
per-head 线性映射器:每个目标 (l, h) 的 top-k 源层(按 head 平均 R² 选取)拼接后,由独立的岭回归 W_K 和 W_V 映射到目标 K、V 空间,头之间、K/V 之间不共享参数

(图源:论文 Figure 3)

组件一:逐头岭回归#

源与目标在层数、头维度上可能不同(匹配 KV 保证头数与头维度相同,但层数不同),所以映射按目标(层,头)逐对拟合:

K^tl,h=XKlWKl,h+bKl,h,V^tl,h=XVlWVl,h+bVl,h\hat{K}^{l,h}_t = X^l_K W^{l,h}_K + b^{l,h}_K, \qquad \hat{V}^{l,h}_t = X^l_V W^{l,h}_V + b^{l,h}_V

其中 XKlX^l_K 是把 kk 个被选中源层(见组件二)的 key 特征拼接得到的矩阵,WKl,hR(knkvsdhs)×dhtW^{l,h}_K \in \mathbb{R}^{(k \cdot n^s_{kv} \cdot d^s_h) \times d^t_h} 是权重矩阵。

拟合过程:把 NN 个校准 token 堆成设计矩阵 XRN×(knkvsdhs)X \in \mathbb{R}^{N \times (k n^s_{kv} d^s_h)} 和响应矩阵 YRN×dhtY \in \mathbb{R}^{N \times d^t_h},使用带 Tikhonov 正则的岭回归(ridge regression),闭式解为:

W=(XX+λI)1XYW^* = (X^\top X + \lambda I)^{-1} X^\top Y

这里有两个”为什么”值得讲透。

为什么用 ridge 而不是纯 OLS? 纯 OLS 的解是 W=(XX)1XYW = (X^\top X)^{-1}X^\top Y。但两个原因让 XXX^\top X 接近奇异:其一,top-k 选出的源层是按”最相关”挑出来的,彼此特征高度相关;其二,kk 较大时特征维度可以达到数万,而校准 token 数有限。此时 (XX)1(X^\top X)^{-1} 数值上会爆炸。加上 λI\lambda I 之后逆矩阵被稳定化,而 λ=0.01\lambda=0.01 的正则强度对拟合偏差的影响可以忽略。论文在附录 C 里对 λ\lambda 做了跨四个数量级的扫描(0 到 1),结果非常平坦——只有 λ=1\lambda=1 这种离谱值才崩(HellaSwag 掉 15.79 个百分点)。这个超参很”钝”,不挑。

为什么能把 bias 单独提出来? 求解前先把 XXYY 各自中心化(减去均值),这样 WW^* 估计的是斜率,截距事后由  b=YˉXˉW\ b = \bar{Y} - \bar{X}W^* 恢复。中心化还让 XXX^\top X 变成协方差形式,数值上更稳。

计算量去哪了? 拟合的瓶颈是形成 XXX^\top X,复杂度 O(Nds2)O(N d_s^2)ds=knkvsdhsd_s = k n^s_{kv} d^s_h 是源特征维度),而它只依赖源层选择、不依赖具体头——所以每个目标层只算一次,该层所有头共享。这正是”整对模型拟合只要 47–87 分钟”的来源:Qwen3 14B→32B 约 52 分钟、Llama 3.1 8B→70B 约 50 分钟、Ministral 8B→14B 最慢 87 分钟,全部在单台 8×H100 节点上完成,全程无反向传播。精度上前向用 bfloat16、协方差矩阵用 float32、分析用 float64。

head 之间零共享:每个 (l, h) 一个独立的 WKl,hW^{l,h}_KWVl,hW^{l,h}_V,不跨头、不跨 K/V 共享参数。线性映射本来就便宜,没必要共享。

拟合好的映射器体积有公式可算:K 和 V 合计 2Ltnkvt(knkvsdhs)dht2 L_t n^t_{kv} (k n^s_{kv} d^s_h) d^t_h 个参数。六对模型的映射器参数总量 1.01–3.36 B、存储 4–12 GB。这个量级不小,但不随序列长度或缓存大小增长,而且不需要常驻 GPU——推理时每个目标层只是一次批量矩阵乘,服务栈可以把映射器放在 CPU 内存或磁盘上,按需调入活跃的模型对。

组件二:跨层源选择#

第二个反直觉的设计:目标层的 KV 不是从源模型的”同层”映射,而是从”最有预测力”的 k 个源层拼接映射。注意这与直觉相反——两个模型的第 20 层表征不一定最相似(深度、宽度都不同),真正该问的是”目标第 20 层的 K 能被源模型的哪几层线性表出”。

具体流程:对每个目标层 ll,先用组件一前的单源探测算出所有(源层,目标层)的 head 平均 R2R^2(对 KstrippedK_{\text{stripped}} 和 V 平均),按 R2R^2 取 top-k 个源层 {l1,,lk}\{l_1, \dots, l_k\},把它们的 KV 特征拼接成输入:

XKl=[Kˉsl1Kˉsl2Kˉslk]X^l_K = [\bar{K}^{l_1}_s \,\|\, \bar{K}^{l_2}_s \,\|\, \cdots \,\|\, \bar{K}^{l_k}_s]

其中 KˉsliRT×(nkvsdhs)\bar{K}^{l_i}_s \in \mathbb{R}^{T \times (n^s_{kv} \cdot d^s_h)} 是源层 lil_i 全部 key 头的拼接;XVlX^l_V 同理。同一目标层的所有头共享同一组源层选择,这让跨头信息流动成为可能(头维度小于特征拼接维度时尤其重要)。

为什么不是每层单独挑?两个细节:一是贪心前向选择(每轮加联合 R2R^2 提升最大的层)是分析工具,生产映射器用固定 top-k(按单源 head 平均 R2R^2 排序),可并行、可复现;二是 kk 是按”模型对”整体调的超参,在 {1,2,4,6,8,10,12,16,20,24,all}\{1,2,4,6,8,10,12,16,20,24,\text{all}\} 中扫描,选择使 ARC-C、HellaSwag、WinoGrande、MMLU 四个对数似然基准平均最高的值,GSM8K、CoQA 和延迟测量不参与选择(天然留出)。注意”选 kk 的基准同时出现在结果里”这一点,论文在附录 H 用留一基准重选做了上限测量:kk 变化最多让单个基准的准确率动 2.49 pp(均值 0.30 pp)。

消融实验(表 2)显示跨层源选择是三个组件中贡献最大的单项kk 从 8 砍到 1,ARC-C 从 61.60 崩到 27.65、困惑度(perplexity)从 7.33 崩到 22.73——单层信息量远不够,跨层拼接才是主力。

组件三:RoPE 因式分解(content-space mapping)#

第三个组件解决”位置编码污染”。标准旋转位置编码(Rotary Position Embedding, RoPE)对 queries 和 keys 施加随位置变化的旋转:缓存里存的是旋转后的 keys krope(t)=RΘ(t)kcontentk_{\text{rope}}(t) = R_\Theta(t)\, k_{\text{content}}。如果直接拿带 RoPE 的 keys 拟合映射器,会把”位置分布”也学进权重里:校准用的 1024 token 短序列对应特定的一组旋转角,学出的权重就绑死在这个位置分布上,换上下文长度就失效。

做法是”剥掉 → 映射 → 重穿”三段式:

K^t=(KsRΘs1(t)WK+bK)RΘt(t)\hat{K}_t = \big(K_s\, R_{\Theta_s}^{-1}(t)\, W_K + b_K\big)\, R_{\Theta_t}(t)
  • RΘs1(t)R_{\Theta_s}^{-1}(t):源模型 RoPE 的逆旋转。RoPE 是正交旋转,求逆就是转置,精确且免费;
  • WKW_K:在无位置空间里做线性映射。校准过程中,目标侧的真实 keys 也先剥掉目标 RoPE 再作为回归目标 YY,所以权重完全 position-free;
  • RΘt(t)R_{\Theta_t}(t):最后套上目标模型自己的 RoPE——两个模型 RoPE 配置不同也没关系,位置在最后一步才穿上。

Values 不编码位置,直接 V^t=VsWV+bV\hat{V}_t = V_s W_V + b_V

这一步的必要性有硬数据(表 2 的”−inference RoPE”行):推理时只做”剥-映射”而不重穿目标 RoPE(拟合与推理的位置处理不一致),MMLU 从 78.09 崩到 25.79(随机水平)、GSM8K 崩到 4.17;而 HellaSwag 只掉约 5 pp——因为 HellaSwag 这类局部语言建模任务对位置不敏感,MMLU/GSM8K 这类需要全局结构的任务会立刻暴露位置错位。这个对比也提醒:评测基准选不对,坏掉的组件根本测不出来。

那为什么不在拟合和推理时都保留 RoPE(论文叫”全耦合”变体,表 2 的”−all RoPE”行)?消融显示在 1024 token 的校准分布上它和完整方案落在噪声以内。论文的取舍理由是泛化性:解耦方案按构造适用于任意上下文长度(服务场景要支持到 32k token)和不同的 RoPE 配置,而耦合方案把权重绑死在拟合时的位置分布上。

校准数据的量级#

全部拟合只依赖 500 条 FineWeb-Edu 序列 × 1024 token,stride-4 子采样后每个目标头约 128K 个 token 级观测。论文对校准做了系统敏感性测试(附录 C):样本数 50 条就差 1.6 pp、200 条后饱和;校准语料域是唯一真正有成本的轴——用 CodeAlpaca 校准比 FineWeb-Edu 掉 5.24 pp(HellaSwag),Wikipedia 只掉 1.05 pp,且跨七个基准的逐格扫描显示 Wikipedia 校准的 retention 平均保持 99.4%、CodeAlpaca 95.9%。

实验:保真度、消融、延迟与漂移#

设置#

三个匹配 KV 家族、六个小→大转移对:Qwen3 8B/14B→32B、Llama 3.1 8B→70B、Ministral 3 3B/8B→14B 和 3B→8B。参数量比从 1.8× 到 8.8×(Llama 3.1 是参数量差距最极端的对),深度比 1.2× 到 2.5×。全部为稠密全注意力(dense full-attention)模型,所以每个目标层都接收映射后的 KV。

五个准确率基准(ARC-Challenge、HellaSwag、WinoGrande、MMLU 5-shot、GSM8K 8-shot chain-of-thought)加上 WikiText-2 困惑度和多轮对话基准 CoQA。核心指标是保留率(retention):

retention=转移后准确率目标模型独立 prefill 的准确率×100%\text{retention} = \frac{\text{转移后准确率}}{\text{目标模型独立 prefill 的准确率}} \times 100\%

由于不同基准的随机基线(chance floor)不同(ARC-C/HellaSwag/MMLU 是 25%、WinoGrande 50%、GSM8K 约 0%),论文还报告基线归一化保留率(floor-normalized retention),把随机基线定为 0%、目标独立运行定为 100%:

retentionnorm=accchanceaccstandalonechance×100%\text{retention}_{\text{norm}} = \frac{acc - chance}{acc_{\text{standalone}} - chance} \times 100\%

归一化专治”低分对看起来还有 40%“的错觉——WinoGrande 是最典型的例子:Llama 8B→70B 在其上原始保留率 87.1%,归一化后只剩 58.5%。

主结果:两档分明的六个对#

六对模型在各自选定的 kk 下,平均保留率从 42% 到 98% 分布极宽,形成两个明显的档:

家族转移对 (kk)Avg 保留率Avg(归一化)ARC-CHellaSwagWinoGrandeMMLUGSM8K
Qwen314B→32B (8)97.6%96.3%101.0%97.6%98.5%95.0%95.6%
Qwen38B→32B (12)87.5%80.7%94.0%95.2%91.0%88.5%68.8%
Llama 3.18B→70B (20)72.8%62.9%90.9%94.4%87.1%73.3%18.2%
Ministral 33B→8B (all)76.2%65.9%90.6%93.3%91.3%69.4%36.6%
Ministral 33B→14B (20)44.2%14.7%43.6%68.0%74.0%32.0%3.2%
Ministral 38B→14B (12)41.6%11.1%40.7%58.7%74.2%32.7%1.6%

(数据来源:论文 Table 1)

Tier 1(四个成功对,保留 73–98%):Qwen3 14B→32B 平均保留 97.6%,ARC-C 甚至超过目标独立运行(101.0%);Llama 3.1 8B→70B 是参数量比最极端的对(8.8×),HellaSwag 保留 94.4%,但 GSM8K 只有 18.2%——推理类任务(GSM8K)对 KV 扰动远比语言建模类任务(HellaSwag)敏感,这个规律在六对中一致。Tier 2(两个失败对):Ministral 3B→14B 和 8B→14B 平均保留只有 42–44%,归一化后掉到 11–15%,基本不可用。

两档对照说明:匹配 KV 与成功强相关,但不保证成功。Qwen3 14B→32B(4×)成功而 Ministral 3B→14B(4.7×)失败,说明除了架构还有更深层的因素在起作用——这正是下一节要回答的问题。

消融:哪个组件最重要?#

在保留率最高的 Qwen3 14B→32B 上逐件拆除(表 2):

配置ARC-CHellaSwagWinoGrandeMMLUGSM8KPPL
完整(k=8, ridge, content-space)61.6080.7068.9878.0990.987.33
− 推理期 RoPE 重穿44.9775.3956.5925.794.177.70
− 全部 RoPE(拟合+推理都耦合)61.0980.7368.5977.7090.987.35
− RoPE − 跨层选择(k=1)27.6544.8151.7826.070.3822.73
− RoPE − 跨层选择 − ridge36.4362.2651.2251.261.449.86

(数据来源:论文 Table 2)

三个结论:跨层源选择是最大贡献者(k=8→k=1 让 ARC-C 掉 34 个点、PPL 恶化 3 倍);RoPE 解耦的必要性高度依赖基准(推理期不重穿只伤 HellaSwag 约 5 pp,却把 MMLU/GSM8K 打到随机水平);ridge 正则对完整方案贡献不大(去掉 ridge 反而某些项回升——因为 λ=0.01 本来就很弱),但它在极端配置(k=1、RoPE 耦合)下起到稳定作用。

MLP 补位:非线性映射能救回失败对#

线性 ridge 在失败对上不行,自然的追问是:换成非线性映射器能不能救回来?论文给每个(目标层,头,K|V)训练一个两隐藏层各 1024 单元、ReLU 激活的 MLP(Adam、学习率 1e-3、20 轮、batch size 4096、MSE 损失),作为 ridge 的即插即用替代品,在四个覆盖”成功到失败”区间的对上对比:

转移对Ridge 保留率MLP 保留率Δ
Qwen3 14B→32B97.6%97.3%−0.3 pp
Ministral 3B→8B93.3%91.8%−1.5 pp
Ministral 3B→14B68.0%92.3%+24.3 pp
Ministral 8B→14B58.7%95.5%+36.8 pp

(数据来源:论文 Table 3,HellaSwag 保留率)

两个观察:ridge 已经成功的对上,MLP 反而略差(−0.3 到 −1.5 pp);ridge 失败的对上,MLP 大幅回血(+24.3 到 +36.8 pp),四个对全部站上 90%。结论是:跨模型 KV 关系本来就线性时,线性映射就够;MLP 只在 ridge 失效处有用,而不是全面碾压。

什么决定了迁移质量:误差的落点,不是误差的大小#

论文最反直觉的发现在这里。校准 R2R^2 是直觉上最自然的”迁移质量预测器”——如果它能预测结果,部署前只凭拟合质量就能筛选模型对。但跨六个匹配 KV 对、双向共 12 次评估,R2R^2 与下游保留率几乎不相关(Pearson r = −0.20)。铁证是两组对照:

  • Llama 3.1 8B→70B 校准 RK2=0.84R^2_K = 0.84,小→大保留 94% HellaSwag,大→小只有 37%;
  • Ministral 3B→8B 同样的 RK2=0.84R^2_K = 0.84,两个方向都保留 93%。

同样的拟合质量,下游结果天差地别。原因在于:R2R^2 平等地加权所有维度上的平均重建误差,但注意力并不平等——attention 用目标的 queries QQ 去打分 keys,再按注意力权重加权 values。真正决定下游行为是否保留的量,是注意力输出(attention output)本身。论文直接测它:映射 KV 与真实 KV 各自产生的注意力输出之间的余弦相似度(cosine similarity),逐层逐头平均。12 次评估中,注意力输出余弦与 HellaSwag 保留率的相关性 r = +0.57,明显优于 R2R^2

余弦在”模型对”粒度上总结了注意力保真度,但还不能解释”为什么相似 R2R^2 的映射器产生不同的余弦”。论文引入误差集中度(error concentration)指标,看残差落在每个头的哪个子空间。对 K:把映射器的逐 token K 误差 e=K^Ke = \hat{K} - K 投影到目标模型该头 query 矩阵 QhQ^h 的右奇异向量 viv_i 上,按对应奇异值平方 σi2\sigma_i^2 加权,再除以全部分量上的平均误差:

cK=1Tt=1Tiσi2(etvi)21Tt=1T1dhet2c_K = \frac{\frac{1}{T}\sum_{t=1}^{T}\sum_{i}\sigma_i^2\, (e_t^\top v_i)^2}{\frac{1}{T}\sum_{t=1}^{T}\frac{1}{d_h}\|e_t\|^2}

对 V:按该位置的真实注意力权重 ata_t 的平方加权逐位置误差,再除以逐位置平均误差:

cV=1Tt=1Tat2et21Tt=1T1dhet2c_V = \frac{\frac{1}{T}\sum_{t=1}^{T} a_t^2\, \|e_t\|^2}{\frac{1}{T}\sum_{t=1}^{T}\frac{1}{d_h}\|e_t\|^2}

两个量都逐头平均。直觉:集中度大于 1 表示误差落在 attention 读取的方向上,小于 1 表示误差落在 attention 忽略的方向上。ridge 在失败对上 RK2R^2_K 深达 −3.22 到 −7.81(校准域拟合完全不外推),且误差高度集中在 attention 敏感子空间;MLP 把 RK2R^2_K 拉回零附近(虽仍为负)、把 K 集中度平均压低约 2.5、注意力输出余弦平均抬高约 0.45,HellaSwag 保留率随之上涨 24–37 pp。而在 ridge 本已成功的对上,这些量几乎不动——只有当错放的误差大到足以”绑住”注意力时,重新分布误差才改变下游结果。这也解释了为什么”误差重分布”本身不充分:Ministral 3B→8B 的 MLP 在两个量上都改善,HellaSwag 反而掉了 1.5 pp。

多轮切换:误差会不会复利?#

会话中途切换场景是”源和目标交替”的:切到 32B 生成几轮,再切回 14B 继续,再切回去。每轮切换都经过一次映射,映射误差会不会逐轮累积成级联失败?论文用 CoQA 测了 100 段约 15 轮的对话、覆盖五个领域,以每轮回答的 F1 相对目标独立运行的差距定义漂移(drift):

多轮 handoff 的 CoQA F1:十轮内小→大漂移仅扩大 1.7 pp,大→小以每轮 0.33 pp 线性增长,误差没有复利效应
多轮 handoff 的 CoQA F1:十轮内小→大漂移仅扩大 1.7 pp,大→小以每轮 0.33 pp 线性增长,误差没有复利效应

(图源:论文 Figure 4,Qwen3 14B↔32B)

结果令人安心:小→大方向第 1 轮到第 10 轮差距只扩大 1.7 pp(映射器保持稳定,而 32B 的独立准确率上限还在上升);大→小方向每轮线性漂移 0.33 pp。两个斜率都太小,十轮内不会级联崩坏——这是”会话中途换模型”能上线的安全垫。不过大→小的线性漂移在极长会话中仍会累积,论文提示这值得后续关注。在此任务上调整 kk 最多改变漂移 2.0 pp。

延迟账:2.7–25× 的 prefill 节省#

省下的成本最终要落到延迟上。论文在 Qwen3 14B↔32B 上对比端到端”重新 prefill”与”KV 缓存转移”的延迟(表 5):

序列长度映射器 S→L重新 prefill S→L加速比映射器 L→S重新 prefill L→S加速比
6414.0 ms61.7 ms11.6 ms39.2 ms
8K67.8 ms1154.8 ms17×101.9 ms501.0 ms
32K277.6 ms6975.3 ms25×427.1 ms2952.7 ms

(数据来源:论文 Table 5;8×H100、bf16、eager 模式,无 torch.compile/CUDA graphs)

32K token 上下文、小→大方向:重新 prefill 要 6.98 秒,映射器只要 278 ms。扩大到七对模型、64 到 32,768 token 共十个序列长度、双向共 70 个测量格,映射器在每一格里都快于重新 prefill,加速比范围 2.7×–25.1×:

家族转移对映射器 @32K重新 prefill @32K加速比范围
Qwen314B→32B278 ms6,975 ms4.4–25.1×
Qwen38B→32B392 ms6,975 ms4.3–17.8×
Llama 3.18B→70B777 ms11,562 ms4.5–14.9×
Ministral 33B→14B396 ms2,465 ms3.8–6.2×
Ministral 33B→8B438 ms1,764 ms2.7–4.0×
Qwen332B→14B427 ms2,953 ms3.3–6.9×
Llama 3.170B→8B216 ms1,652 ms2.8–7.6×

(数据来源:论文附录 G Table 16)

映射器应用(实线)与目标重新 prefill(虚线)的延迟随序列长度变化:短序列段映射器近水平(固定调度开销主导),随后线性上升;重新 prefill 在所有对、所有长度上都位于映射器之上
映射器应用(实线)与目标重新 prefill(虚线)的延迟随序列长度变化:短序列段映射器近水平(固定调度开销主导),随后线性上升;重新 prefill 在所有对、所有长度上都位于映射器之上

(图源:论文 Figure 9,8×H100 bf16)

两个观察:大→小方向省得少(3.3–7.6×)——小模型的 prefill 本来就便宜,能省的基数小;这也符合业务直觉:升级方向的收益(用户等不起大模型 7 秒 prefill)恰恰是最大的。短序列段映射器延迟存在固定地板(14.0 ms 来自 Python 分发开销和跨 GPU 搬缓存),随序列长度增长远慢于重新 prefill——因为映射器的计算量只依赖源特征维度,与序列长度近似线性且系数小。

留出验证与诚实性检查#

两个补充实验值得注意。其一,用从未参与 kk 选择的三个基准(PIQA、BoolQ、ARC-Easy)测选定配置(表 18):四个 Tier 1 对保留率 96.8–99.9%,两个 Tier 2 对 59.3–63.7%——档位结构在留出集上复现。其二,留一基准重选 kk:18 个折中 12 个 kk 不变,变化的折中最多动 2.49 pp——kk 选择对结果的贡献有界。

工程落地与社区实现#

论文发表两周内,社区已经出现了第一个开源实现:kvbridge(GitHub 仓库 Sidd03192/kvbridge,标题直白:“用小模型 prefill,用大模型作答”),配套在 Hugging Face 上发布了训练好的映射器权重 Siddharth85/kvbridge-qwen3-1.7b-to-qwen3-4b(Qwen3 1.7B → 4B,top-k=12,500 条 FineWeb-Edu 序列 × 1024 token、stride-4 子采样、λ=0.01,样本内 R2R^2:K 0.813、V 0.718,权重 bfloat16)。用法是典型的”一把梭”:

from kvbridge import Mapper, transfer
mapper = Mapper.from_pretrained("Siddharth85/kvbridge-qwen3-1.7b-to-qwen3-4b")
small_cache = small(prompt_ids, use_cache=True).past_key_values
big_cache = transfer(small_cache, mapper)
big.generate(input_ids=prompt_ids, past_key_values=big_cache, max_new_tokens=128)

部署形态上有几个论文明确的工程判断:

  • 映射器不必常驻 GPU:推理时每个目标层只是一次批量矩阵乘,可以把映射器放在 CPU 内存或磁盘上按需调入。按 PCIe Gen4/Gen5 的 25–50 GB/s 带宽估算,4–12 GB 的映射器调入耗时 80–480 ms,每次切换只付一次,且可分摊到该模型对的后续所有请求。
  • 有向映射:岭回归拟合是方向性的,14B→32B 和 32B→14B 是两个不同的映射器。PP 模型家族最多需要 P(P1)P(P-1) 个有序对映射器,按平均 6.5 GB 计,3/4/5 模型家族分别约 39/79/131 GB——增长是平方的,但预算在磁盘或主机内存,不进显存。
  • 与既有机制的叠加关系:前缀缓存解决”同模型、同前缀”的复用,跨模型 KV 转移解决”同家族、跨模型”的复用;同模型跨层复用(CLA/xKV)挖掘层间冗余;投机式 prefill(speculative prefill)用轻量草稿模型估计 token 重要性跳过冗余计算。这些机制相互正交,可以组合进同一套服务栈。
  • 适用边界要诚实:方法要求匹配 KV(头数与头维度一致)、稠密全注意力、家族内迁移。GQA 配置不匹配、MLA(Multi-head Latent Attention)这类把 KV 压缩进潜空间的注意力、混合注意力架构(滑动窗口/局部注意力)、注意力-循环混合架构(如 Nemotron 3 携带 SSM 状态)都不在适用范围。

局限方面,论文自己列了四条:校准只用 FineWeb-Edu 单一语料域(医疗/法律等单域校准的代价未被界定);kk 在报告基准上选择(虽然有界);匹配 KV 是经验前提而非理论要求(未测试不匹配 KV 对);范围限于稠密全注意力的家族内迁移。此外,注意力输出余弦是事后诊断(需要先拟合映射器才能算),一个能”拟合前”预测可迁移性的信号仍有待发现。

小结#

这篇论文的价值可以压缩成四句话:

  1. 发现:同一家族内,跨模型的 KV 缓存存在显著线性结构——Qwen3 14B→32B 上单个源层解释 56% 的 key 方差、32% 的 value 方差,多层拼接后到 79%/65%。
  2. 方法:per-head 闭式岭回归 + 跨层 top-k 源选择 + RoPE 因式分解,500 条校准序列、单节点 8×H100、47–87 分钟、无梯度,得到 1.01–3.36 B 参数的映射器。
  3. 结果:六个匹配 KV 对中四个保留 73–98% 的目标独立准确率,映射比重新 prefill 快 2.7–25×,多轮切换十轮内无级联漂移;MLP 非线性扩展在失败对上再救回最多 37 pp。
  4. 方法论教训R2R^2 不能预测跨对迁移质量(r = −0.20),注意力输出余弦可以(r = +0.57)——决定保留率的是残差落在 attention 敏感子空间的多少,而不是误差总量。这为后续所有”KV 压缩/量化/复用”类工作树立了评测标杆:拟合质量要看下游、看子空间,不能只看重建指标。

对生产系统而言,它把”跨模型 KV 复用”从研究问题压成了部署时的一次性成本:一对模型跑一次闭式求解 + 一次磁盘存放。级联调度、会话中途切换、家族内路由这三类玩法从此可以免掉最贵的那次重复劳动。当然,“家族”的假设并不总成立(Ministral 的两个失败对就是证明),它买到的是家族内廉价切换,不是万能 KV 翻译器——但就这个受限场景而言,97.6% 的保留率与 25× 的 prefill 节省,是一笔划算的账。

参考资料#

  1. Cross-Model KV Cache Transfer in LLM Families: A Closed-Form Linear Mapping for Prefill Reuse(arXiv:2608.03893)
  2. kvbridge:跨模型 KV 缓存转移的开源实现(GitHub)
  3. kvbridge-qwen3-1.7b-to-qwen3-4b:训练好的映射器权重(Hugging Face)
  4. HE Xin 的论文解读:小模型算好的 KV Cache,大模型直接接着用
  5. EdgeGate 工程博客:重建误差无法预测行为(Your Model Matches the Reference. That Doesn’t Mean It Still Works.)
  6. DroidSpeak: KV Cache Sharing Across Fine-tuned Model Variants(NSDI 2026)
  7. Latent Space Communication via K-V Cache Alignment(LatentAlign, arXiv:2601.06123)
  8. RoFormer: Enhanced Transformer with Rotary Position Embedding(RoPE 原始论文, arXiv:2104.09864)
  9. SGLang: Efficient Execution of Structured Language Model Programs(前缀缓存的代表实现, arXiv:2312.07104)
  10. xKV: Cross-layer SVD for KV-cache Compression(arXiv:2503.18893)

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

跨模型 KV 缓存转移(Cross-Model KV Transfer):闭式线性映射与 Prefill 复用
https://pinghaoyang.com.cn/aigc/posts/cross-model-kv-transfer/
作者
平昊阳
发布于
2026-08-24
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
平昊阳
乘长风,破巨浪, 展鸿图于未央!
--
总访问量
--
访客数
公告
欢迎来到我的个人博客!欢迎关注交流吖!
更多相关公告,见
社交-留言」。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
站点统计
文章
66
分类
16
标签
93
总字数
477,284
运行时长
0
最后活动
0 天前

文章目录