跳到主要内容

生产环境中的模型合并:用权重平均打造多任务专家

· 阅读需 15 分钟
Tian Pan
Software Engineer

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)通过三步流程直接解决了干扰问题:

  1. 裁剪:对每个任务向量,按幅度将参数中 top-k% 以外的部分归零。大多数任务向量分量是冗余的——经验表明,仅保留幅度最大的 20% 参数,性能几乎不受影响。消除低幅度参数可以减少合并结果中的噪声。

  2. 选举符号:对每个权重位置,查看所有任务向量中的符号,选择多数派(按幅度加权)所持有的符号。持少数符号的参数被归零。

  3. 不相交合并:仅对存活(非零)且符号一致的参数取平均。

这比简单平均的计算成本更高,但在合并三个或更多微调模型时,所得到的合并模型具有显著更强的鲁棒性。单独应用裁剪步骤——在任何其他合并方法之前——就能持续改善结果。

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 上运行。

质量与专业化的权衡

合并从专家创造出通才。这带来了可预测的权衡:合并后的模型在各候选模型的特定领域上通常略有下降,但在跨领域平均性能上显著优于任一候选。

权衡的形态取决于:

  • 任务相似性:将编程模型与指令跟随模型合并效果良好,因为底层能力相互强化。将编程模型与情感分析模型合并可能产生干扰,因为微调目标在相互冲突的权重区域上。

  • 合并模型数量:随着添加更多模型,所有方法的平均精度都会下降,但下降速度有所不同。TIES 和 DARE 比朴素任务算术降级更为平缓,因为它们显式处理了干扰。超过 5 个模型后,朴素平均通常变得不可用。

  • 基础模型质量:基础模型的表示约束了合并效果。从同一个高质量基础模型微调的模型,往往比具有不同微调历史的模型合并得更干净。

WiSE-FT 技术(权重空间微调集成)给了你一个调节旋钮:它在预训练基础模型和微调模型之间进行插值,让你可以在基础模型鲁棒性和微调专业化之间调节。不必固定在某个合并点,你可以在验证集上探索插值路径,选择命中性能目标的系数。

常见故障模式

符号冲突:不同的微调模型会将同一权重推向相反方向。当这种情况发生时,取平均会将该权重驱向零,从两者中同时抹去信号。这不是罕见的边缘情况——即使只是合并来自不同任务族的两个模型也会出现。TIES-Merging 通过在取平均前对齐符号来直接解决这个问题。

架构不匹配:理论上显而易见,实践中却容易忽视。名义上架构相同的模型之间,分词器的差异可能导致微妙的性能下降,看起来像是合并质量问题,实则是词汇表不匹配。始终从某一候选模型复制分词器,并验证它在所有模型间一致。

继承双亲的弱点:如果模型 A 在某些话题上有幻觉倾向,模型 B 在某些查询上有拒绝偏见,合并后的模型往往会继承两种故障模式,而不是将其平均抵消。故障模式通常与合并成功组合的能力信号正交。预期合并后的模型需要针对性的红队测试,而不仅仅是基准测试。

基准污染:这是公开发布的合并模型中一个现实问题。在与基准测试集重叠的数据集上微调的模型,会将这种污染带入合并模型。一个在排行榜上得分很高的合并模型,可能是在结合两个都略有污染的模型。

损失景观不兼容:微调程序存在实质性差异的模型——不同的学习率、不同的数据顺序、不同的正则化——可能已经落入损失景观的不同盆地。在这些盆地之间进行线性插值可能会穿越高损失区域,而不是留在稳定区域中。这表现为合并后的模型在所有任务上都比任一候选更差——而不只是在特定任务上。模式连通性研究表明,对于从相同基础模型以相似超参数微调的模型,这种风险较低。

模型合并 vs. 持续学习的微调

顺序微调有一个有据可查的故障模式:灾难性遗忘。当你在任务 B 上微调模型时,它在任务 A 上的性能会下降——有时非常严重——因为梯度更新以牺牲之前编码的知识为代价来优化新任务。

模型合并以不同的方式解决这个问题。与其进行顺序权重更新,不如在每次适应完全训练后,在参数层面合并特定任务的知识。基础模型的知识保存在基础权重中;任务特定的知识存在于增量中。由于你在权重空间而非梯度空间中操作,不受导致遗忘的顺序优化压力影响。

用于持续学习的"模型汤"方法——将每种新能力训练为独立的微调,然后递增地合并——相较于顺序微调表现出更强的任务顺序鲁棒性。合并对先学习哪些任务的敏感性较低,因为合并操作是可交换的:先合并 A 再合并 B 与先合并 B 再合并 A 的结果相同。

限制在于,这种方法要求在合并完成之前存储所有候选模型,如果你管理着众多专业化模型,这会带来内存方面的影响。

工具:mergekit 与生态系统

mergekit(github.com/cg123/mergekit)是主流的开源工具。它支持 SLERP、TIES、DARE、任务算术和直通(层堆叠式"科学怪人合并")。配置基于 YAML,库在 CPU 上运行——合并操作本身不需要 GPU。两个 7B 模型的典型 TIES 合并在标准机器上只需几分钟。

SLERP 配置中的 t 参数可以按层类型单独指定——分别针对注意力权重(self_attn)和 MLP 权重——这提供了对架构不同部分中哪个候选模型占主导的精细控制。实践者发现,跨层变化 t 通常优于单一全局插值系数。

进化合并(Sakana AI,2024 年 3 月,发表于《自然机器智能》)利用在权重空间和层排序空间中运行的进化算法,自动化搜索合并配置。该方法通过合并一个日语语言模型和一个英语数学推理模型,发现了日语数学推理 LLM——这是一种手动配置不会轻易想到的跨领域合并。所得模型超越了两个候选模型,并能与大数倍的模型相竞争。

FedMerge 将合并扩展到联邦设置,其中多个租户在私有数据上本地微调基础模型的副本,然后仅将权重增量贡献给中央合并。合并后的模型从所有租户的训练数据中受益,而无需任何租户暴露原始数据。微软 Azure AI 团队已发表了关于这种多租户 SLM 部署模式的工作。

ML 工程师的实践指南

首先确认候选模型是否可以合并:相同架构、相同分词器、从相同基础模型微调。如果不确定它们是否处于相连的损失盆地中,可以在它们之间快速进行线性插值,检查中间点是否保持合理的困惑度——插值路径中间的骤降表明盆地不兼容。

对于两个模型:在验证集上对 t 进行网格搜索的 SLERP。如果需要更多控制,可以分别针对注意力层和 MLP 层变化 t

对于三个或更多模型:TIES 加每个模型 0.3 到 0.7 之间的密度参数;如果出现显著干扰,结合 DARE。对最终结果进行归一化。

始终在特定任务评估上对合并模型与每个候选模型进行基准对比,而不仅仅是聚合基准。聚合分数可能看起来不错,而某个能力却已显著退化。

明确地针对每个候选模型的故障模式进行红队测试。不要假设合并会将其平均掉——在证明相反之前,假设它们是叠加的。

对于持续学习工作流:将每种新能力作为独立的微调处理,维护一个任务向量库,按需合并。这保留了灵活性,并允许你通过移除特定任务向量来分解一个错误的合并,而无需从头重新训练。

这个领域仍在快速演进

2025 年的调研景观反映了这个领域发展有多迅速。TIES 和 DARE 均于 2023–2024 年提出;进化合并于 2024 年初将自动化搜索形式化;层感知方法(层感知任务算术,2025)现在以更细粒度分解干扰问题,将早期的通用层与深层的任务专用层区别对待。

实际结论是,对于任意给定的微调模型组合,最佳合并方法仍需通过经验来确定。没有一个统一的理论能预测哪种方法对任意微调组合有效。这些工具运行成本低廉,搜索空间可管理,而性能上限——正如公开排行榜上反复证明的那样——远超大多数实践者的预期。对于管理多个微调专业化模型的团队,模型合并值得与 LoRA 和 RLHF 并列进入标准工具箱,不是作为一种好奇心,而是作为一种生产技术。

References:Let's stay in touch and Follow me for more thoughts and updates