用途
Model Merging 用于将多个已微调的模型合并为一个模型,从而在不重新训练的前提下组合它们各自的能力。典型用途包括:融合领域专长(例如数学 + 编程 + 对话)来创建专用模型;尝试获得超过单一模型的性能;降低训练成本(合并无需 GPU,可在 CPU 上运行);快速实验,在几分钟而非几天内生成新的模型变体;在合并过程中保留多项技能,减少灾难性遗忘。
主要能力
该技能基于 mergekit(Arcee AI)等工具,支持多种合并方法:
- 线性合并(Model Soup):对参数做简单加权平均,速度快,适合相似模型,可合并两个及以上模型。
- SLERP:在权重空间沿球面插值,保留权重向量的模长,最适合合并两个模型,比线性更平滑。
- 任务算术(Task Arithmetic):提取“任务向量”(微调模型减基础模型),组合任务向量后加回基础模型,适合合并多个专用模型。
- TIES-Merging:任务算术加稀疏化,解决参数符号冲突,适合合并多个任务特定模型。
- DARE(Drop And REscale):随机丢弃微调参数并重新缩放剩余参数,减少冗余并维持性能。
此外还支持层合并(passthrough)、从合并模型构建 MoE(专家混合)、分词器合并等高级模式。
使用方式
安装 mergekit:
git clone https://github.com/arcee-ai/mergekit.git cd mergekit pip install -e .
或通过 pip:
pip install mergekit
可选安装 Transformer 库:
pip install transformers torch
基本流程是编写 YAML 配置文件,指定 merge_method、models、parameters、dtype 等,然后运行:
mergekit-yaml config.yml ./merged-model --cuda
配置结构示例:
merge_method: <method> # linear, slerp, ties, dare_ties, task_arithmetic base_model: <path> # 可选:任务算术的基础模型
models:
-
model: <path/to/model1> parameters: weight: <float> # 合并权重 density: <float> # 用于 TIES/DARE
-
model: <path/to/model2> parameters: weight: <float>
parameters:
方法特定参数
dtype: <dtype> # bfloat16, float16, float32
可选
slices: # 逐层合并 tokenizer: # 分词器配置
适用场景
- 需要组合多个微调模型的能力而不重新训练。
- 希望创建融合数学、编程、对话等专长的专用模型。
- 想以较低成本快速实验新的模型变体。
- 需要合并多个任务特定模型并处理参数冲突。
- 希望通过层合并或 MoE 构建更复杂的模型结构。
限制与注意事项
- 只能合并架构相同的模型;不同架构(如 Llama 与 Mistral)不兼容。
- 权重选择需注意平衡,避免某一模型权重过高(如 0.95)导致主导。
- 合并后应进行基准测试再部署,不应未经评估直接上线。
- TIES/DARE 的 density 参数需要调优:可从保守值(如 0.8)开始,根据性能调整稀疏程度。
- 资料中未提供具体的收费、价格或平台限制信息。
评估与部署
可使用 transformers 加载合并后的模型进行测试,常见基准包括 Open LLM Leaderboard、MT-Bench、MMLU、HumanEval、GSM8K。部署时可上传至 HuggingFace Hub,或使用 GGUF、GPTQ 进行量化。
资源
- 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