生产环境中的模型合并:用权重平均打造多任务专家
2024 年初,Open LLM 排行榜的榜首几乎被一种从未经过训练的模型全面占领——它们是合并而来的。各团队将两三个基于 Mistral-7B 微调的变体,用一个 YAML 配置文件对权重进行平均,便以极低的计算成本超越了专门训练的模型。从外部看,这项技术简单得近乎可笑:把一些张量加在一起,除以二,就可以发布了。但现实远比这复杂——如果你不理解其背后的原理,那些锋利的故障模式足以让一个生产部署翻车。
这是一份面向希望在生产中使用模型合并的 ML 工程师的实践指南:各方法在数学上到底做了什么、何时有效、何时会悄然降级,以及如何针对给定的候选模型选择正确的工具。
模型合并究竟做了什么
核心思想是:微调之后,模型的权重将适应信息编码为叠加在基础模型之上的扰动。如果两个微调模型 出发自同一个基础模型,且它们的扰动不直接相互矛盾,你就可以对这些扰动取平均,得到一个同时携带两种适应能力的模型。
这与集成方法不同。输出空间的集成在推理时运行多个模型并合并它们的预测——其计算量和内存占用与模型数量成正比。而模型合并产生的是一组权重,推理时的代价与运行单个模型完全相同。性能特征也有所不同:集成降低了各模型误差之间的方差;合并则试图将不同微调轨迹的优势积累到同一个权重空间中。
有一个关键约束:参与合并的模型必须拥有相同的架构。你无法通过简单的权重运算将一个 7B 模型与一个 13B 模型合并。架构必须逐层匹配。
五种核心方法
权重平均(模型汤)
最简单的形式是线性平均:θ_merged = Σ(wᵢ · θᵢ) / Σwᵢ。"模型汤"论文(Wortsman et al., 2022)表明,对同一模型多个微调变体的权重取平均,其性能始终优于任一单独的候选模型,且接近完整输出空间集成的性能,而推理成本为零。
实践中有两个重要变体:
- 朴素汤:不考虑质量,对所有模型取平均。
- 贪心汤:按验证性能对模型排序,仅在能提升当前平均值的情况下才加入每个模型。这种方法始终优于朴素平均。
局限性在于,朴素线性插值忽略了模型间的干扰。当两个微调模型以相反方向修改了同一权重时,对其取平均会产生无意义的结果——它将该权重驱向零,从而丢失了两者的信号。
SLERP(球面线性插值)
SLERP 最初于 1985 年为四元数动画而开发,它将权重向量视为高维球面上的点,沿测地线而非弦进行插值。公式如下:
θ = arccos(v₀ · v₁)
result = sin((1-t)·θ)/sin(θ) · v₀ + sin(t·θ)/sin(θ) · v₁
与线性插值的区别在于,SLERP 在整个路径上保持权重向量的范数,避免了当两个权重向量方向部分相反时可能发生的幅度坍缩。在实践中,这意味着更平滑的插值,以及对两个模型表示几何结构更好的保留。
SLERP 每次只能合并两个模型。对于需要合并三个或更多专家模型的生产场景,你需要链式执行成对合并(层次化地),或切换到其他方法。它仍然是成对合并中最流行的技术,尤其适用于将通用指令跟随模型与领域专家模型相结合。
任务算术(任务向量)
任务算术论文(Ilharco et al., ICLR 2023)引入了一个更有原则的框架。将任务向量定义为微调权重与基础权重之间的差值:
τᵢ = θ_finetuned_i - θ_base
任务向量支持算术运算。相加可以组合能力,取反可以减去某种能力。多任务合并后的模型为:
θ_merged = θ_base + α · Σ τᵢ
关键洞察在于:沿任务向量方向在权重空间中移动,会一致地提升该任务的性能。这些向量具有结构性,而非随机性——这种结构使得算术运算有意义,而非偶然巧合。
该论文还展示了跨任务迁移:对某个任务应用任务向量,有时会提升未经过微调的相关任务的性能。这表明微调修改权重的方式具有真正的语义结构,而不仅仅是对特定任务模式的过拟合。
其故障模式是任务干扰:当两个任务以冲突方式修改了相同的权重区域时,将它们的任务向量相加会在这些区域产生噪声。
TIES-Merging(裁剪、选举符号、合并)
TIES(Yadav et al., NeurIPS 2023)通过三步流程直接解决了干扰问题:
-
裁剪:对每个任务向量,按幅度将参数中 top-k% 以外的部分归零。大多数任务向量分量是冗余的——经验表明,仅保留幅度最大的 20% 参数,性能几乎不受影响。消除低幅度参数可以减少合并结果中的噪声。
-
选举符号:对每个权重位置,查看所有任务向量中的符号,选择多数派(按幅度加权)所持有的符号。持少数符号的参数被归零。
-
不相交合并:仅对存活(非零)且符号一致的参数取平均。
这比简单平均的计算成本更高,但在合并三个或更多微调模型时,所得到的合并模型具有显著更强的鲁棒性。单独应用裁剪步骤——在任何其他合并方法之前——就能持续改善结果。
DARE(随机丢弃与重缩放)
DARE(Yu et al., 2024)采用了不同的干扰减少思路:以概率 p 随机丢弃任务向量参数,然后将存活参数乘以 1/(1-p) 以保持期望值。丢弃操作以随机方式去除冗余参数;重缩放则补偿了参数减少的影响。
实验发现令人惊讶:即使丢 弃 90–99% 的任务向量更新,性能依然得以保留。大多数微调参数是冗余的。DARE 可以与 TIES 结合(即 dare_ties),或用于线性合并(dare_linear)。当合并差异较大的专业化模型时,它尤为有用,因为此时直接合并会产生严重干扰。
合并何时优于集成
性能比较取决于你在优化什么:
- 推理成本:合并压倒性胜出。只需一个模型、一次前向传播、一套服务部署。
- 内存:合并只需存储一个模型;集成需要存储 N 个。
- 原始精度:集成在上限上有优势——组合多样化的预测能以合并权重无法完全复制的方式降低方差。但差距往往很小。
- 延迟:合并胜出。集成延迟随候选模型数量扩展;合并模型具有固定的单模型延迟。
生产环境的实际权衡:如果你在大规模运营且推理成本至关重要,集成很快会在经济上变得难以承受。一个 5 模型集成在每日 1000 万次请求下意味着 5 倍的推理账单。合并模型的成本与单个模型相同。对于集成性能差距在可接受误差范围内的团队,合并是显而易见的选择。
Marcoro14-7B-slerp 模型——两个 Mistral-7B 微调版本的 SLERP 合并——曾在 2024 年 2 月短暂占据 Open LLM 排行榜榜首,击败了更大规模的专门训练模型。它在单张消费级 GPU 上运行。
