AI 模型合并与权重融合技术深度解析:从 Model Soups 到进化合并的社区驱动模型进化
目录
- 前言
- 技术背景与演进逻辑
- 核心原理深度解析
- 权重矩阵与任务向量:模型合并的数学基石
- 线性合并:Model Soups 的朴素智慧
- 球面线性插值:SLERP 的几何优雅
- 任务算术与 TIES-Merging:解决冲突的艺术
- DARE:稀疏性与随机丢弃的反直觉力量
- FrankenMerging:层级拼接的激进实验
- 进化合并:CMA-ES 驱动的自动优化
- 核心机制对比与深度分析
- 技术优缺点与适用场景
- 实战落地
- 使用 MergeKit 合并模型
- 进化合并实战
- 生产避坑经验
- 全文总结
- 本期专栏更新说明
- 参考资料
前言
- 核心痛点:开源社区每天涌现大量微调模型,但每个模型仅擅长单一任务,传统多任务训练需要昂贵的 GPU 集群和海量数据。如何以零成本将这些"专才"模型融合为一个"通才"模型,成为开源 AI 社区面临的重大工程挑战。
- 适配人群:具备 PyTorch 基础、了解 LLM 微调流程的 AI 工程师和研究员,以及对开源模型生态感兴趣的技术决策者。
- 收获能力:读完本文你将掌握模型合并的完整技术谱系——从线性平均到进化搜索的全部算法原理、MergeKit 工具的落地实战能力,以及在生产环境中避坑的核心经验。
技术背景与演进逻辑
传统方案的困境
在大模型时代到来之前,要将多个微调模型的能力整合到一起,业界只有三条路可走:
这三种方案都有一个共同缺陷:需要 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=1∑nαiθi,i=1∑nα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=1∑nα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(v0⋅v1)
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((1−t)Ω),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=s0⋅v0+s1⋅v1
当
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=1∑nτ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=∣Ap∣1i∈Ap∑τ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={i∣sgn(τ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:
p
p
p 将 delta 参数置零(恢复为基座模型权重)
1
/
(
1
−
p
)
1/(1-p)
1/(1−p) 倍,以保持输出的期望不变
δ
DARE
=
m
⊙
δ
1
−
p
\\delta_{\\text{DARE}} = \\frac{m \\odot \\delta}{1 – p}
δDARE=1−pm⊙δ
其中
m
∼
Bernoulli
(
1
−
p
)
m \\sim \\text{Bernoulli}(1-p)
m∼Bernoulli(1−p) 是二进制掩码,
⊙
\\odot
⊙ 表示逐元素乘法。
MergeKit 提供了两种 DARE 变体:
- dare_linear:DARE 处理后的 delta 直接用线性平均合并
- dare_ties:DARE 处理后的 delta 再用 TIES 的三步法合并(社区实践证明效果更好)
DARE 与 TIES 的组合(dare_ties)已成为当前社区最主流的合并方案。DARE 通过随机丢弃去掉冗余参数和噪声,TIES 通过符号选举解决残留冲突——两者形成互补。
FrankenMerging:层级拼接的激进实验
核心思想:不进行任何权重层面的插值,而是直接从不同模型中选取完整层进行拼接。
这种方法被称为"FrankenMerging"(科学怪人合并),因为它像弗兰肯斯坦的怪物一样由不同模型的"器官"拼接而成。其直觉来自两个关键观察:
经典的 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)=(1−c1−cμ)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) | 中 |
技术优缺点与适用场景
技术优势
现存局限
生产适用场景
禁忌场景
实战落地
使用 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: meta–llama/Meta–Llama–3–8B–Instruct
layer_range: [0, 32]
– model: NousResearch/Hermes–3–Llama–3–8B
layer_range: [0, 32]
merge_method: slerp
base_model: meta–llama/Meta–Llama–3–8B–Instruct
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: meta–llama/Meta–Llama–3–8B # 基座模型
– model: abacusai/Meta–Llama–3–8B–Math–Instruct # 数学专家
parameters:
density: 0.5
weight: 0.4
– model: NousResearch/Hermes–3–Llama–3–8B # 通用对话
parameters:
density: 0.5
weight: 0.3
– model: teknium/OpenHermes–2.5–Mistral–7B # 需要同架构
parameters:
density: 0.5
weight: 0.3
merge_method: dare_ties
base_model: meta–llama/Meta–Llama–3–8B
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 会在每代中:
实际效果:社区实践表明,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)





