用途
Model Merging 用于将多个微调模型合并,从而在不重新训练的情况下组合它们的能力。当你需要融合多个模型的领域专长(例如数学 + 编程 + 对话)、创建专用模型、提升单模型在基准上的表现、降低训练成本(合并无需 GPU,可在 CPU 上运行)、快速实验生成新模型变体,或在不发生灾难性遗忘的前提下保留多项技能时,可以使用该技能。资料提到 Marcoro14-7B-slerp 曾在 2024 年 2 月的 Open LLM Leaderboard 上取得最佳成绩,许多 HuggingFace 上的顶级模型也使用了合并技术。
主要能力
该技能围绕 mergekit(Arcee AI)展开,同时提及 LazyMergekit 和 Model Soup 等工具。核心合并方法包括:
- Linear(Model Soup):参数的简单加权平均,速度快,适合同类模型,可合并两个及以上模型。
- SLERP(球面线性插值):在权重空间中沿球面插值,保留权重向量的模长,最适合合并两个模型,比线性更平滑。
- Task Arithmetic:提取“任务向量”(微调模型减基础模型),组合任务向量后加回基础模型,适合合并多个专用模型。
- TIES-Merging:任务算术加稀疏化,解决参数符号冲突,适合合并多个任务专用模型。
- DARE(Drop And REscale):随机丢弃微调参数并重新缩放剩余参数,减少冗余并保持性能。
配置结构支持 merge_method、base_model、models(含 weight、density)、parameters、dtype、slices、tokenizer 等字段。高级模式包括逐层合并(passthrough)、从合并模型创建 MoE(专家混合)以及 tokenizer 合并。
使用方式
安装 mergekit:
git clone https://github.com/arcee-ai/mergekit.git
cd mergekit
pip install -e .
或通过 pip 安装:
pip install mergekit
可选安装 Transformer 库:
pip install transformers torch
快速开始示例(简单线性合并):
merge_method: linear
models:
- model: mistralai/Mistral-7B-v0.1
parameters:
weight: 0.5
- model: teknium/OpenHermes-2.5-Mistral-7B
parameters:
weight: 0.5
dtype: bfloat16
运行合并:
mergekit-yaml config.yml ./merged-model --cuda
使用合并后的模型:
python -m transformers.models.auto --model_name_or_path ./merged-model
SLERP 合并示例:
merge_method: slerp
slices:
- sources:
- model: mistralai/Mistral-7B-v0.1
layer_range: [0, 32]
- model: teknium/OpenHermes-2.5-Mistral-7B
layer_range: [0, 32]
parameters:
t: 0.5
dtype: bfloat16
适用场景
- 将数学、编程、对话等不同领域专长融合为一个模型。
- 在无 GPU 或低训练预算下快速生成新模型变体。
- 合并多个任务专用模型并解决参数冲突。
- 通过逐层合并或 MoE 方式构建定制模型。
- 对合并模型进行基准测试(Open LLM Leaderboard、MT-Bench、MMLU、HumanEval、GSM8K)并部署到 HuggingFace Hub 或量化(GGUF、GPTQ)。
限制与注意事项
- 只能合并架构相同的模型,不同架构(如 Llama 与 Mistral)不兼容。
- 应避免权重过度偏向单一模型,建议使用 0.3–0.7 的均衡权重范围。
- 合并后必须进行基准测试再部署,不可直接上线。
- TIES/DARE 的 density 参数需要调优:可从 0.8 开始,性能良好则提高稀疏度,性能下降则降低稀疏度。
- 资料未提供具体的收费、价格或平台限制信息。