SuperAPI AI 工具集

model-merging

智能体与模型

查看项目

更新于 10-21 16:21

技能介绍

用途

Model Merging 用于将多个微调后的模型合并,在不重新训练的前提下组合它们的能力。典型使用场景包括:融合多个模型的领域专长(如数学 + 编程 + 对话)以创建专用模型;提升单模型性能(资料称基准测试上常有 +5-10% 提升);降低训练成本(无需 GPU,合并可在 CPU 上运行);快速实验,在数分钟内而非数天创建新模型变体;在合并中保留多项技能,避免灾难性遗忘。资料提到 Marcoro14-7B-slerp 曾在 2024 年 2 月的 Open LLM Leaderboard 上取得最佳成绩,且许多 HuggingFace 热门模型使用了合并技术。

主要能力

该技能围绕 mergekit 提供多种合并方法:

  • 线性合并(Linear / Model Soup):参数的简单加权平均,速度快,适合同类模型,可合并 2 个及以上模型(权重之和为 1)。
  • SLERP(球面线性插值):在权重空间的球面上插值,保留权重向量的模长,最适合合并 2 个模型,比线性更平滑。资料给出公式:merged = (sin((1-t)θ) / sin(θ)) * model1 + (sin(tθ) / sin(θ)) * model2,其中 θ = arccos(dot(model1, model2)),t ∈ [0, 1]。
  • 任务算术(Task Arithmetic):提取“任务向量”(微调模型减基础模型),组合任务向量后加回基础模型,适合合并多个专用模型(merged = base + α₁·tv₁ + α₂·tv₂)。
  • TIES-Merging:任务算术加稀疏化,解决参数符号冲突,最适合合并多个任务专用模型。
  • DARE(Drop And REscale):随机丢弃微调参数并重新缩放剩余参数,减少冗余并保持性能。

高级模式包括:逐层合并(passthrough + slices,可为不同层指定不同模型,例如保留基础模型的首尾层、只合并中间层);从合并模型构建 MoE(merge_method: moe,配合 base_model、experts 与 positive_prompts);分词器合并(tokenizer.source 设为 union 以合并词表,并可指定特殊 token 来源)。

使用方式

安装 mergekit:

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

或通过 pip:

pip install mergekit

可选安装 Transformer 库:

pip install transformers torch

简单线性合并示例配置(config.yml):

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

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

配置结构包含 merge_method、base_model(可选)、models(含 weight、density 等参数)、parameters、dtype,以及可选的 slices 与 tokenizer。

方法选择建议:2 个模型平滑混合用 SLERP;3 个及以上模型简单平均用 Linear;多个任务专用模型用 Task Arithmetic 或 TIES;想减少冗余用 DARE。密度调优(TIES/DARE)建议从保守值开始(如 density: 0.8),性能好则提高稀疏度(0.5),性能下降则降低稀疏度(0.9)。

无监督系数调优:无需标注数据,使用生成一致性——用多个候选系数合并,在少量无标注子集上生成响应,选择输出与其邻近系数最相似的系数(AdaMMS, arXiv:2503.23733)。资料给出伪代码,并指向 references/coefficient-tuning.md 获取完整实现。

评估与测试:可用 transformers 加载合并模型并在数学、代码、对话等任务上测试。常见基准包括 Open LLM Leaderboard、MT-Bench、MMLU、HumanEval、GSM8K。

生产部署:可将合并模型上传至 HuggingFace Hub(model.push_to_hub / tokenizer.push_to_hub),并可用 GGUF 或 GPTQ 量化。

适用场景

适合需要组合多个微调模型能力、创建领域专用模型、快速实验模型变体、在有限算力下(CPU 合并)进行模型融合的场景。资料中的成功案例与基准测试表明其在开源模型社区有实际应用。

限制与注意事项

  • 架构必须匹配:只能合并共享相同架构的模型(例如不要混合 Llama 与 Mistral)。
  • 避免过度加权单一模型(如 0.95 / 0.05),权重通常保持在 0.3–0.7 范围。
  • 部署前务必评估合并模型。
  • 商业或公开发布前需检查模型与数据集许可证。
  • 资料中的版本相关细节可能过时,应以所安装版本的官方文档为准。
  • 遇到大输入内存不足时,可降低分辨率或序列长度、使用半精度或对输入分块。
  • 若指令中的函数、标志或端点在实际安装版本中不存在,应查阅该版本文档并告知用户,不得虚构 API。
  • 输入、标识符或参数不明确时应询问用户或明确说明假设。

资源

mergekit GitHub:https://github.com/arcee-ai/mergekit HuggingFace 教程:https://huggingface.co/blog/mlabonne/merge-models TIES 论文:https://arxiv.org/abs/2306.01708 DARE 论文:https://arxiv.org/abs/2311.03099 相关参考文件:references/methods.md、references/examples.md、references/evaluation.md、references/coefficient-tuning.md。