欢迎光临
我们一直在努力

AI 模型合并与权重融合技术深度解析:从 Model Soups 到进化合并的社区驱动模型进化

AI 模型合并与权重融合技术深度解析:从 Model Soups 到进化合并的社区驱动模型进化

目录

  • 前言
  • 技术背景与演进逻辑
  • 核心原理深度解析
    • 权重矩阵与任务向量:模型合并的数学基石
    • 线性合并:Model Soups 的朴素智慧
    • 球面线性插值:SLERP 的几何优雅
    • 任务算术与 TIES-Merging:解决冲突的艺术
    • DARE:稀疏性与随机丢弃的反直觉力量
    • FrankenMerging:层级拼接的激进实验
    • 进化合并:CMA-ES 驱动的自动优化
  • 核心机制对比与深度分析
  • 技术优缺点与适用场景
  • 实战落地
    • 使用 MergeKit 合并模型
    • 进化合并实战
    • 生产避坑经验
  • 全文总结
  • 本期专栏更新说明
  • 参考资料

前言

  • 核心痛点:开源社区每天涌现大量微调模型,但每个模型仅擅长单一任务,传统多任务训练需要昂贵的 GPU 集群和海量数据。如何以零成本将这些"专才"模型融合为一个"通才"模型,成为开源 AI 社区面临的重大工程挑战。
  • 适配人群:具备 PyTorch 基础、了解 LLM 微调流程的 AI 工程师和研究员,以及对开源模型生态感兴趣的技术决策者。
  • 收获能力:读完本文你将掌握模型合并的完整技术谱系——从线性平均到进化搜索的全部算法原理、MergeKit 工具的落地实战能力,以及在生产环境中避坑的核心经验。

技术背景与演进逻辑

传统方案的困境

在大模型时代到来之前,要将多个微调模型的能力整合到一起,业界只有三条路可走:

  • 联合训练(Joint Training):将所有任务的数据混合,从头训练或继续训练一个模型。问题是:数据获取成本高、不同任务数据量不平衡、训练周期长达数周。
  • 集成学习(Ensemble):部署多个模型,推理时分别调用再投票。问题是:推理延迟翻倍、显存占用线性增长、部署运维成本不可接受。
  • 知识蒸馏(Knowledge Distillation):用多个教师模型训练一个学生模型。问题是:仍需大量无标签数据、蒸馏过程可能丢失任务特化能力。
  • 这三种方案都有一个共同缺陷:需要 GPU 训练。对大多数个人开发者和中小团队而言,这形成了无法逾越的门槛。

    模型合并的诞生契机

    2022 年,Wortsman 等人在论文《Model Soups: Averaging Weights of Multiple Fine-Tuned Models Improves Accuracy Without Increasing Inference Time》中首次系统性地证明:简单地将多个独立微调模型的权重进行加权平均,得到的"模型汤"(Model Soup)不仅推理成本为零增长,准确率还能超越任一单独模型。

    这一发现犹如闪电划破夜空。它揭示了一个深层原理:在预训练基座模型的权重空间中,不同任务微调产生的权重更新位于一个低维子流形上,线性插值在这个流形表面是近似有效的。 这意味着——你不需要 GPU,只需要 CPU 和几十 GB 内存,就能在几分钟内创造一个新模型。

    随后,学术界和开源社区迅速跟进:

    • 2023 年 6 月:Yadav 等人提出 TIES-Merging,解决了任务向量间的符号冲突问题
    • 2023 年 11 月:Yu 等人提出 DARE,发现随机丢弃 90% 以上的 delta 参数后模型仍能保持能力
    • 2024 年 1 月:Maxime Labonne 在 HuggingFace 发布 mergekit 教程,当月合并模型霸占 Open LLM Leaderboard 榜首
    • 2024 年 3 月:Arcee AI 发布 MergeKit 正式版和进化合并工具 mergekit-evolve
    • 2024-2025 年:社区产生数千个合并模型,覆盖 Llama、Mistral、Qwen、DeepSeek 等主流架构

    模型合并从一个实验室玩具,进化为开源 AI 社区的"新型基础设施"。

    核心原理深度解析

    权重矩阵与任务向量:模型合并的数学基石

    要理解模型合并,必须先理解两个核心概念:权重矩阵(Weight Matrix) 和 任务向量(Task Vector)。

    权重矩阵是 Transformer 模型的核心组件。一个典型 7B 模型的每一层都包含多个权重矩阵:Self-Attention 的

    Q

    Q

    Q

    K

    K

    K

    V

    V

    V

    O

    O

    O 投影矩阵,以及 FFN 中的上投影和下投影矩阵。这些矩阵中的每一个数值(即"参数")都在模型推理时参与矩阵乘法运算,决定了输入数据如何被转换。

    任务向量(Task Vector)的概念由 Ilharco 等人在 2022 年首次系统化定义。给定一个预训练基座模型的权重

    θ

    pre

    \\theta_{\\text{pre}}

    θpre 和在该基座上微调得到的任务模型的权重

    θ

    ft

    \\theta_{\\text{ft}}

    θft,任务向量定义为两者的差值:

    τ

    =

    θ

    ft

    θ

    pre

    \\tau = \\theta_{\\text{ft}} – \\theta_{\\text{pre}}

    τ=θftθpre

    这个简单的减法蕴含了深刻直觉:

    τ

    \\tau

    τ 捕获了微调过程中的全部"知识增益"。不同任务的

    τ

    \\tau

    τ 在权重空间中形成不同的"方向",模型合并的本质就是在这些方向之间找到最佳的折中路径。

    线性合并:Model Soups 的朴素智慧

    核心思想:将多个模型的权重直接取加权平均。

    给定

    n

    n

    n 个模型权重

    θ

    1

    ,

    θ

    2

    ,

    ,

    θ

    n

    \\theta_1, \\theta_2, \\ldots, \\theta_n

    θ1,θ2,,θn,线性合并的结果为:

    θ

    merged

    =

    i

    =

    1

    n

    α

    i

    θ

    i

    ,

    i

    =

    1

    n

    α

    i

    =

    1

    \\theta_{\\text{merged}} = \\sum_{i=1}^{n} \\alpha_i \\theta_i, \\quad \\sum_{i=1}^{n} \\alpha_i = 1

    θmerged=i=1nαiθi,i=1nαi=1

    其中

    α

    i

    \\alpha_i

    αi 是每个模型的权重系数。

    从任务向量的视角看,等价于:

    θ

    merged

    =

    θ

    pre

    +

    i

    =

    1

    n

    α

    i

    τ

    i

    \\theta_{\\text{merged}} = \\theta_{\\text{pre}} + \\sum_{i=1}^{n} \\alpha_i \\tau_i

    θmerged=θpre+i=1nαiτi

    线性合并有两个关键变体:

    • 朴素合并(Naive Soup):按任意顺序均匀合并所有模型
    • 贪心合并(Greedy Soup):按验证集性能排序后依次尝试合并,仅保留使性能提升的合并

    优势:极简实现,零超参数,适合快速实验。 局限:当不同任务向量更新了重叠的权重区域且方向相悖时,线性平均会直接抹平这些更新,导致能力退化为基座模型水平——这就是"任务干扰"(Task Interference)问题。

    球面线性插值:SLERP 的几何优雅

    核心思想:在高维权重空间中,沿球面而非直线进行插值,保持向量模长不变。

    SLERP(Spherical Linear Interpolation)最初由 Ken Shoemake 在 1985 年提出,用于四元数旋转的平滑动画插值。将其引入模型合并的直觉是:权重向量的方向(代表特征学习和表征)比幅度(代表置信度缩放)承载了更多语义信息。线性插值在高维空间会导致向量模长缩水,而 SLERP 沿单位超球面插值,保持模长恒定为 1。

    给定两个归一化的权重向量

    v

    0

    v_0

    v0

    v

    1

    v_1

    v1,插值参数

    t

    [

    0

    ,

    1

    ]

    t \\in [0,1]

    t[0,1],SLERP 的计算过程为:

  • 计算夹角:

    Ω

    =

    arccos

    (

    v

    0

    v

    1

    )

    \\Omega = \\arccos(v_0 \\cdot v_1)

    Ω=arccos(v0v1)

  • 计算插值系数:

    s

    0

    =

    sin

    (

    (

    1

    t

    )

    Ω

    )

    sin

    (

    Ω

    )

    ,

    s

    1

    =

    sin

    (

    t

    Ω

    )

    sin

    (

    Ω

    )

    s_0 = \\frac{\\sin((1-t)\\Omega)}{\\sin(\\Omega)}, \\quad s_1 = \\frac{\\sin(t\\Omega)}{\\sin(\\Omega)}

    s0=sin(Ω)sin((1t)Ω),s1=sin(Ω)sin(tΩ)

  • 产生结果:

    v

    slerp

    =

    s

    0

    v

    0

    +

    s

    1

    v

    1

    v_{\\text{slerp}} = s_0 \\cdot v_0 + s_1 \\cdot v_1

    vslerp=s0v0+s1v1

  • t

    =

    0

    t=0

    t=0 时结果为

    v

    0

    v_0

    v0

    t

    =

    1

    t=1

    t=1 时结果为

    v

    1

    v_1

    v1,在中间取平滑过渡。

    关键性质:

    • SLERP 保证结果向量的模长恒为 1(只要输入归一化),避免了线性插值的"缩放坍缩"
    • 插值路径是超球面上的最短路径(测地线),保留了权重空间的几何结构
    • 天然适用于合并两个模型

    局限:一次只能合并两个模型。要合并多个模型,需要分层级联(如先合并 A 和 B,再将结果与 C 合并),合并顺序会显著影响最终结果。

    在实际的 mergekit 配置中,SLERP 支持分层参数化:对 Self-Attention 层、MLP 层和其他层分别设置不同的

    t

    t

    t 值数组,实现精细控制。

    任务算术与 TIES-Merging:解决冲突的艺术

    核心思想:不再天真地平均所有权重,而是识别并解决不同任务向量之间的"符号冲突"。

    TIES(TrIm, Elect Sign, and Merge)由 Yadav 等人在 NeurIPS 2023 发表,通过三步走策略解决任务干扰:

    第一步:Trim(修剪)

    对每个任务向量

    τ

    i

    \\tau_i

    τi,仅保留其 top-

    k

    k

    k 最重要的参数更新,其余置零。重要性度量基于参数的绝对值大小:

    τ

    i

    trim

    =

    TopK

    (

    τ

    i

    ,

    k

    )

    \\tau_i^{\\text{trim}} = \\text{TopK}(\\tau_i, k)

    τitrim=TopK(τi,k)

    其中

    k

    =

    d

    ×

    N

    k = d \\times N

    k=d×N

    d

    d

    d 是密度参数(density,常用值 0.3-0.5),

    N

    N

    N 是总参数数。

    这一步背后的假设是:对任务性能贡献最大的只是少数"大更新"参数;大量"小更新"参数贡献了冗余信息,也贡献了干扰。

    第二步:Elect Sign(选举符号方向)

    对于每个参数位置

    p

    p

    p,计算所有修剪后任务向量的加权总幅度(正值)和(负值),选择累积幅度更大的方向作为"统一符号":

    γ

    p

    =

    sgn

    (

    i

    =

    1

    n

    τ

    i

    ,

    p

    trim

    )

    \\gamma_p = \\operatorname{sgn}\\left(\\sum_{i=1}^{n} \\tau_{i,p}^{\\text{trim}}\\right)

    γp=sgn(i=1nτi,ptrim)

    如果某个模型的更新符号与

    γ

    p

    \\gamma_p

    γp 不一致,该位置的更新被丢弃。

    这个设计的直觉是:模型的"共识方向"(多数模型都朝正方向更新或都朝负方向更新)应该被保留;个别模型的"异见方向"往往是任务特化的噪声而非通用知识。

    第三步:Disjoint Merge(分离合并)

    仅对符号与

    γ

    p

    \\gamma_p

    γp 一致的参数取平均值:

    τ

    p

    final

    =

    1

    A

    p

    i

    A

    p

    τ

    i

    ,

    p

    trim

    \\tau_p^{\\text{final}} = \\frac{1}{|\\mathcal{A}_p|} \\sum_{i \\in \\mathcal{A}_p} \\tau_{i,p}^{\\text{trim}}

    τpfinal=Ap1iApτi,ptrim

    其中

    A

    p

    =

    {

    i

    sgn

    (

    τ

    i

    ,

    p

    trim

    )

    =

    γ

    p

    }

    \\mathcal{A}_p = \\{i \\mid \\operatorname{sgn}(\\tau_{i,p}^{\\text{trim}}) = \\gamma_p\\}

    Ap={isgn(τi,ptrim)=γp} 是"共识集合"。

    最终合并结果:

    θ

    merged

    =

    θ

    pre

    +

    α

    τ

    final

    \\theta_{\\text{merged}} = \\theta_{\\text{pre}} + \\alpha \\cdot \\tau^{\\text{final}}

    θmerged=θpre+ατfinal

    与线性合并相比,TIES 通过"符号选举"机制,显式解决了不同模型对同一参数提出相反更新方向的冲突,显著提升了多模型合并质量。

    DARE:稀疏性与随机丢弃的反直觉力量

    核心思想:随机丢弃大部分 delta 参数,然后将剩余参数放大以补偿。

    DARE(Drop And REscale)由 Yu 等人提出(论文标题俏皮地取为"Language Models are Super Mario"),基于一个反直觉的发现:

    在大模型微调产生的 delta 参数中,90% 甚至 99% 的参数是冗余的。随机丢弃它们并适当放大剩余参数,不仅能近乎无损地保留模型能力,还能显著降低合并时的干扰。

    给定 delta 参数

    δ

    \\delta

    δ 和丢弃概率

    p

    p

    p

  • Drop:随机以概率

    p

    p

    p 将 delta 参数置零(恢复为基座模型权重)

  • Rescale:将非零参数放大

    1

    /

    (

    1

    p

    )

    1/(1-p)

    1/(1p) 倍,以保持输出的期望不变

  • δ

    DARE

    =

    m

    δ

    1

    p

    \\delta_{\\text{DARE}} = \\frac{m \\odot \\delta}{1 – p}

    δDARE=1pmδ

    其中

    m

    Bernoulli

    (

    1

    p

    )

    m \\sim \\text{Bernoulli}(1-p)

    mBernoulli(1p) 是二进制掩码,

    \\odot

    表示逐元素乘法。

    MergeKit 提供了两种 DARE 变体:

    • dare_linear:DARE 处理后的 delta 直接用线性平均合并
    • dare_ties:DARE 处理后的 delta 再用 TIES 的三步法合并(社区实践证明效果更好)

    DARE 与 TIES 的组合(dare_ties)已成为当前社区最主流的合并方案。DARE 通过随机丢弃去掉冗余参数和噪声,TIES 通过符号选举解决残留冲突——两者形成互补。

    FrankenMerging:层级拼接的激进实验

    核心思想:不进行任何权重层面的插值,而是直接从不同模型中选取完整层进行拼接。

    这种方法被称为"FrankenMerging"(科学怪人合并),因为它像弗兰肯斯坦的怪物一样由不同模型的"器官"拼接而成。其直觉来自两个关键观察:

  • Transformer 层的可插拔性:LLM 的不同层捕获不同层次的语义信息——底层负责语法和局部模式,中间层负责语义组合,顶层负责生成决策。理论上,可以从模型 A 取底层(保留其语法能力)、从模型 B 取顶层(保留其推理风格),拼接成新模型。
  • SOLAR 的深度上采样:Upstage 的 SOLAR-10.7B 证明了从 32 层 Mistral-7B 中复制最后 8 层增加到 40 层,可以显著提升性能——这本质上是"自己拼接自己"的变体。
  • 经典的 Passthrough 合并配置如下:

    slices:
    sources:
    model: model_a
    layer_range: [0, 24] # 取模型A的前24层
    sources:
    model: model_b
    layer_range: [24, 32] # 取模型B的第24-32层
    merge_method: passthrough

    社区最著名的 FrankenMerge 是 Goliath-120B,通过拼接两个 Llama-2-70B 模型创造了当时开源最强的 120B 模型。

    关键发现:

    • 底层(前几层)和顶层(最后几层)对模型行为影响最大,中间层相对"可替换"
    • 首尾层保留原模型的完整信息,中间层可以安全替换
    • 层间不需要特别的适配层——Transformer 的残差连接天然支持不同来源的层之间的信息传递

    进化合并:CMA-ES 驱动的自动优化

    核心思想:将合并参数(每个模型的权重、每层的

    t

    t

    t 值等)视为优化变量,用进化算法自动搜索最优配置。

    Arcee AI 在 2024 年发布的 mergekit-evolve 使用 CMA-ES(Covariance Matrix Adaptation Evolution Strategy)作为优化器。CMA-ES 是一种黑箱连续优化算法,特别适合处理合并参数调优这种"评估昂贵、梯度不可得"的场景。

    CMA-ES 的核心数学框架:

  • 采样:从当前多元正态分布

    N

    (

    m

    ,

    σ

    2

    C

    )

    \\mathcal{N}(m, \\sigma^2 C)

    N(m,σ2C) 中采样

    λ

    \\lambda

    λ 个候选解(每个候选解是一组合并参数)

  • 评估:对每个候选解执行合并,并在验证集上评测
  • 更新:选

    μ

    \\mu

    μ 个最优候选,更新均值

    m

    m

    m、步长

    σ

    \\sigma

    σ 和协方差矩阵

    C

    C

    C

  • m

    (

    g

    +

    1

    )

    =

    m

    (

    g

    )

    +

    c

    m

    i

    =

    1

    μ

    w

    i

    (

    x

    i

    :

    λ

    (

    g

    +

    1

    )

    m

    (

    g

    )

    )

    m^{(g+1)} = m^{(g)} + c_m \\sum_{i=1}^{\\mu} w_i (x_{i:\\lambda}^{(g+1)} – m^{(g)})

    m(g+1)=m(g)+cmi=1μwi(xi:λ(g+1)m(g))

    C

    (

    g

    +

    1

    )

    =

    (

    1

    c

    1

    c

    μ

    )

    C

    (

    g

    )

    +

    c

    1

    p

    c

    p

    c

    T

    +

    c

    μ

    i

    =

    1

    μ

    w

    i

    y

    i

    y

    i

    T

    C^{(g+1)} = (1 – c_1 – c_\\mu) C^{(g)} + c_1 p_c p_c^T + c_\\mu \\sum_{i=1}^{\\mu} w_i y_i y_i^T

    C(g+1)=(1c1cμ)C(g)+c1pcpcT+cμi=1μwiyiyiT

    进化合并的评估指标可以是任何模型 benchmark 得分(如 MMLU、HellaSwag、GSM8K 等),甚至可以是自建的业务评测集。

    核心机制对比与深度分析

    下面这张流程图完整展示了当前模型合并技术从数据到结果的整个决策链路:

    #mermaid-svg-x2jLJ5PKE4dCouMt{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-x2jLJ5PKE4dCouMt .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-x2jLJ5PKE4dCouMt .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-x2jLJ5PKE4dCouMt .error-icon{fill:#552222;}#mermaid-svg-x2jLJ5PKE4dCouMt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-x2jLJ5PKE4dCouMt .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-x2jLJ5PKE4dCouMt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-x2jLJ5PKE4dCouMt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-x2jLJ5PKE4dCouMt .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-x2jLJ5PKE4dCouMt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-x2jLJ5PKE4dCouMt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-x2jLJ5PKE4dCouMt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-x2jLJ5PKE4dCouMt .marker.cross{stroke:#333333;}#mermaid-svg-x2jLJ5PKE4dCouMt svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-x2jLJ5PKE4dCouMt p{margin:0;}#mermaid-svg-x2jLJ5PKE4dCouMt .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-x2jLJ5PKE4dCouMt .cluster-label text{fill:#333;}#mermaid-svg-x2jLJ5PKE4dCouMt .cluster-label span{color:#333;}#mermaid-svg-x2jLJ5PKE4dCouMt .cluster-label span p{background-color:transparent;}#mermaid-svg-x2jLJ5PKE4dCouMt .label text,#mermaid-svg-x2jLJ5PKE4dCouMt span{fill:#333;color:#333;}#mermaid-svg-x2jLJ5PKE4dCouMt .node rect,#mermaid-svg-x2jLJ5PKE4dCouMt .node circle,#mermaid-svg-x2jLJ5PKE4dCouMt .node ellipse,#mermaid-svg-x2jLJ5PKE4dCouMt .node polygon,#mermaid-svg-x2jLJ5PKE4dCouMt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-x2jLJ5PKE4dCouMt .rough-node .label text,#mermaid-svg-x2jLJ5PKE4dCouMt .node .label text,#mermaid-svg-x2jLJ5PKE4dCouMt .image-shape .label,#mermaid-svg-x2jLJ5PKE4dCouMt .icon-shape .label{text-anchor:middle;}#mermaid-svg-x2jLJ5PKE4dCouMt .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-x2jLJ5PKE4dCouMt .rough-node .label,#mermaid-svg-x2jLJ5PKE4dCouMt .node .label,#mermaid-svg-x2jLJ5PKE4dCouMt .image-shape .label,#mermaid-svg-x2jLJ5PKE4dCouMt .icon-shape .label{text-align:center;}#mermaid-svg-x2jLJ5PKE4dCouMt .node.clickable{cursor:pointer;}#mermaid-svg-x2jLJ5PKE4dCouMt .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-x2jLJ5PKE4dCouMt .arrowheadPath{fill:#333333;}#mermaid-svg-x2jLJ5PKE4dCouMt .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-x2jLJ5PKE4dCouMt .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-x2jLJ5PKE4dCouMt .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-x2jLJ5PKE4dCouMt .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-x2jLJ5PKE4dCouMt .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-x2jLJ5PKE4dCouMt .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-x2jLJ5PKE4dCouMt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-x2jLJ5PKE4dCouMt .cluster text{fill:#333;}#mermaid-svg-x2jLJ5PKE4dCouMt .cluster span{color:#333;}#mermaid-svg-x2jLJ5PKE4dCouMt div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-x2jLJ5PKE4dCouMt .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-x2jLJ5PKE4dCouMt rect.text{fill:none;stroke-width:0;}#mermaid-svg-x2jLJ5PKE4dCouMt .icon-shape,#mermaid-svg-x2jLJ5PKE4dCouMt .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-x2jLJ5PKE4dCouMt .icon-shape p,#mermaid-svg-x2jLJ5PKE4dCouMt .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-x2jLJ5PKE4dCouMt .icon-shape .label rect,#mermaid-svg-x2jLJ5PKE4dCouMt .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-x2jLJ5PKE4dCouMt .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-x2jLJ5PKE4dCouMt .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-x2jLJ5PKE4dCouMt :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    两个模型追求平滑融合

    多个模型追求多任务能力

    极端实验创造新架构

    是:先去冗余

    否:直接合并

    手动调参

    自动优化

    满意

    不满意

    开始:选择基座模型如 Llama-3、Mistral、Qwen

    合并目标

    SLERP球面线性插值

    是否使用 DARE

    Passthrough层级拼接

    DARE 随机丢弃丢弃概率 p = 0.5-0.9

    TIES-MergingTrim → Elect Sign → Merge

    参数调优方式

    YAML 配置手动设置 t/density/weight

    CMA-ES 进化搜索mergekit-evolve

    执行合并CPU 即可,数分钟完成

    评估验证Open LLM Leaderboard或自建评测集

    发布到 HuggingFace Hub社区共享

    下面是六种核心合并方法的对比分析表:

    方法合并数量计算成本任务干扰处理参数调优灵活性成熟度
    Linear/Model Soup 任意 极低 无处理 仅权重系数
    SLERP 仅2个 几何保模 分层 t 值数组
    TIES-Merging 任意 符号选举 density + weight
    DARE + TIES 任意 随机丢弃 + 符号选举 density + weight + drop_rate
    Passthrough 任意 层级隔离 层级范围选择 实验性
    Evolutionary 任意 自动优化 全自动(CMA-ES)

    技术优缺点与适用场景

    技术优势

  • 零训练成本:全程不需要 GPU,在 CPU 上即可完成。一个 7B 模型的合并在普通 MacBook 上只需 5-10 分钟。
  • 快速迭代:修改 YAML 配置文件即可重新合并,实验周期从天级缩短到分钟级。
  • 社区杠杆效应:可以直接利用开源社区海量微调模型的成果,将"专才"组合为"通才"。
  • 保留原始能力:合并模型自然保留了基座模型的底层能力,不会像继续训练那样面临灾难性遗忘。
  • 可组合性:合并后的模型可以作为新合并的输入,形成无限组合空间。
  • 现存局限

  • 同源架构限制:目前所有主流合并方法都要求模型共享同一基座架构(如同为 Llama-3 微调产物),跨架构合并仍属前沿研究。
  • 干涉不可预测:即使使用 TIES + DARE,合并后模型在某些任务上的表现仍可能不可预测地退化。
  • 缺乏理论保证:合并更像"炼金术"而非"化学",成功与否高度依赖经验和运气。学术界对合并为何有效的深层理论解释仍然不足。
  • 幻觉累积:如果源模型存在偏见或幻觉,合并可能继承并放大这些问题。
  • 评估污染:许多合并模型使用的源模型已对 Open LLM Leaderboard 出现过拟合,导致分数虚高。
  • 生产适用场景

  • 开源模型能力组合:你有三个 Llama-3 微调模型分别擅长数学、编程和写作,想要一个同时擅长的模型 → DARE+TIES 合并。
  • AB 测试中的模型融合:两个模型在 AB 测试中各有所长,将它们合并可能获得"1+1>2"的效果 → SLERP 合并。
  • 快速原型验证:想快速测试"如果模型同时擅长 A 和 B 会怎样?"→ 线性合并 5 分钟出结果。
  • 禁忌场景

  • 安全敏感场景:合并模型的行为未经安全对齐验证,不应直接用于生产环境的内容审核、医疗诊断、金融决策。
  • 不同架构模型混合:Llama + Mistral + Qwen 的跨架构合并目前无法可靠实现。
  • 需要确定性输出的场景:合并过程的随机性(尤其在 DARE 中)使得结果不完全可复现。
  • 实战落地

    使用 MergeKit 合并模型

    环境准备

    # 安装 mergekit
    git clone https://github.com/arcee-ai/mergekit.git
    cd mergekit && pip install -e .

    # 验证安装
    mergekit-yaml –help

    配置示例一:SLERP 双模型合并

    # slerp_merge.yaml
    slices:
    sources:
    model: metallama/MetaLlama38BInstruct
    layer_range: [0, 32]
    model: NousResearch/Hermes3Llama38B
    layer_range: [0, 32]
    merge_method: slerp
    base_model: metallama/MetaLlama38BInstruct
    parameters:
    t:
    filter: self_attn
    value: [0, 0.5, 0.3, 0.7, 1] # 自注意力层的插值梯度
    filter: mlp
    value: [1, 0.5, 0.7, 0.3, 0] # MLP层的插值梯度(反向)
    value: 0.5 # 其他层50/50
    dtype: bfloat16

    执行合并:

    mergekit-yaml slerp_merge.yaml ./merged_model \\n –copy-tokenizer \\n –lazy-unpickle \\n –allow-crimes

    配置示例二:DARE+TIES 多模型合并

    # dare_ties_merge.yaml
    models:
    model: metallama/MetaLlama38B # 基座模型
    model: abacusai/MetaLlama38BMathInstruct # 数学专家
    parameters:
    density: 0.5
    weight: 0.4
    model: NousResearch/Hermes3Llama38B # 通用对话
    parameters:
    density: 0.5
    weight: 0.3
    model: teknium/OpenHermes2.5Mistral7B # 需要同架构
    parameters:
    density: 0.5
    weight: 0.3
    merge_method: dare_ties
    base_model: metallama/MetaLlama38B
    parameters:
    normalize: true
    int8_mask: true # 使用 INT8 精度掩码以降低内存
    dtype: bfloat16

    执行合并:

    mergekit-yaml dare_ties_merge.yaml ./merged_model \\n –copy-tokenizer \\n –lazy-unpickle \\n –allow-crimes \\n –out-shard-size 2B # 分片保存,降低内存压力

    进化合并实战

    mergekit-evolve 使用 CMA-ES 自动搜索最优合并参数:

    # 定义进化搜索的评估指标(可以是多个指标的加权组合)
    mergekit-evolve \\n –config dare_ties_merge.yaml \\n –task "hellaswag,mmlu,gsm8k" # 优化这三个benchmark
    –weight "0.3,0.4,0.3" # 对应权重
    –generations 50 # 进化代数
    –population-size 20 # 每代候选数
    –output-dir ./evolved_merge

    CMA-ES 会在每代中:

  • 从当前搜索分布中采样 20 组合并参数
  • 执行 20 次合并
  • 用 lm-evaluation-harness 评测结果
  • 更新搜索分布,向高分区域集中
  • 50 代后输出最优合并参数和最终模型
  • 实际效果:社区实践表明,50 代进化搜索通常能将目标 benchmark 得分提升 3-8 个百分点,远超人工调参的上限。

    生产避坑经验

  • 权重和的陷阱:DARE+TIES 配置中各模型的 weight 之和应控制在 0.9-1.1 之间。如果偏离太多,normalize: true 会自动修正,但可能导致某些模型贡献被过度稀释。建议手动确保 weight 之和在 1.0 左右。

  • 密度参数的黄金区间:density 参数设置在 0.3-0.5 范围内效果最佳。过低的 density(如 0.1)会丢失关键任务信息,过高(如 0.8)会让 DARE 的随机丢弃失去意义。DARE 论文建议 0.5 以下,但社区实践发现 0.5-0.53 在所有场景下表现最稳定。

  • 基座模型必须匹配:所有参与合并的模型必须源自同一基座模型。例如,你不能合并 Llama-3-8B 的微调版和 Qwen-7B 的微调版——它们的 tokenizer、层数、隐藏维度都不同,强行合并会导致张量形状错误。

  • Passthrough 首尾层重要性:如果使用 Passthrough 做层级拼接,务必将原模型的底层(前 4-8 层)和顶层(后 2-4 层)保持完整。社区的共识是"换中间层安全,换首尾层灾难"。这是因为底层编码基础语法信息,顶层负责生成决策——替换它们等于替换模型的"感官系统"和"决策系统"。

  • 评估污染问题:如果合并的源模型曾在 Open LLM Leaderboard 的评测集上训练过(多数热门模型确实如此),合并后的模型在该 benchmark 上的得分会虚高 5-15 个百分点。建议使用:

    • 去污的评测集:如 LiveBench、WildBench
    • 自建私有评测集:确保不与任何训练数据重叠
    • 人工评估:在真实业务场景中做 AB 对比
  • 噪声累积效应:经历多轮合并-再合并的模型(俗称"合并煲汤"),会在权重中累积不可控的噪声。建议合并不超过 3 代——即初始合并 → 次级合并 → 最终合并。

  • tokenizer 选择:合并时使用 –copy-tokenizer 标志从基座模型复制 tokenizer。不要手动替换 tokenizer,这会导致嵌入层维度不匹配。

  • LoRA 的替代选择:如果你的目标是针对特定业务做定制,LoRA 微调可能比模型合并更适合。LoRA 提供了更精细的适配控制,模型合并更适合跨任务泛化。

  • 全文总结

    模型合并技术代表了 AI 工程领域一种独特的方法论转向:从"训练更好的模型"到"组合已有的模型"。

    • 核心原理:模型合并建立在"预训练基座形成了一个共享的表征流形"这一假设之上。不同任务的微调在这个流形上移动到不同的位置,合并算法(线性平均、SLERP、TIES、DARE)本质上是在流形上寻找既接近各任务目标、又不丢失泛化能力的"折中路径"。

    • 关键方法:六种方法形成了清晰的进化谱系——Model Soup(朴素基线)→ SLERP(几何保模)→ TIES(冲突解决)→ DARE(稀疏性)→ Passthrough(层级拼接)→ Evolutionary(自动优化)。每种方法都在解决前一代方法的瓶颈。

    • 落地重点:MergeKit 让模型合并从学术论文变成了开源社区的日常操作。掌握 YAML 配置、DARE+TIES 的组合使用、以及进化搜索的自动调优,就能以零 GPU 成本创造高性能模型。

    • 技术本质:模型合并的成本曲线与模型训练完全相反。训练需要 GPU,合并只需 CPU;训练需要数周,合并只需数分钟;训练需要海量数据,合并只需要配置参数。这种效率上的不对称,正在重塑开源 AI 社区的生产关系——"模型生产者"和"模型消费者"的边界正在消融。

    本期专栏更新说明

    本文为《Ai深度解析》专栏持续迭代内容,专栏长期更新 AI 底层原理、架构机制、工程实战、前沿技术解读、落地案例与生产避坑,一次订阅,永久持续更新。

    参考资料

    • Model Soups: Averaging Weights of Multiple Fine-Tuned Models Improves Accuracy Without Increasing Inference Time (Wortsman et al., 2022)
    • Editing Models with Task Arithmetic (Ilharco et al., 2022)
    • TIES-Merging: Resolving Interference When Merging Models (Yadav et al., NeurIPS 2023)
    • Language Models are Super Mario: Absorbing Abilities from Homologous Models as a Free Lunch (Yu et al., 2023)
    • Arcee’s MergeKit: A Toolkit for Merging Large Language Models (Goddard et al., EMNLP 2024)
    • Evolutionary Optimization of Model Merging Recipes (Akiba et al., 2024)
    • An Introduction to Model Merging for LLMs (NVIDIA Technical Blog, 2024)
    • Merge Large Language Models with mergekit (Labonne, HuggingFace Blog, 2024)
    • MergeKit GitHub Repository (Arcee AI)
    • MergeKit Evolve Documentation
    • SOLAR 10.7B: Scaling Large Language Models with Simple yet Effective Depth Up-Scaling (Kim et al., 2023)
    • Model Merging in LLMs, MLLMs, and Beyond: Methods, Theories, Applications, and Opportunities (ACM Computing Surveys, 2025)
    赞(0)
    未经允许不得转载:171主机测评 » AI 模型合并与权重融合技术深度解析:从 Model Soups 到进化合并的社区驱动模型进化
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址