MergeLM
MergeLM 是一个专注于大语言模型合并的开源项目,源自 ICML 2024 获奖论文《Language Models are Super Mario》。它核心解决了一个痛点:如何让多个经过不同任务微调的同源模型“取长补短”,融合成一个能力更全面的新模型,而无需昂贵的重新训练过程或大量 GPU 资源。
该项目提出了一种名为 DARE(Drop And REscale)的创新技术。研究发现,模型微调后产生的参数变化中,绝大部分其实是冗余的。DARE 能够安全地将这些增量参数中的 90% 甚至 99% 直接置零而不影响模型原有能力。基于此,MergeLM 先将多个模型的参数进行稀疏化处理,再通过简单的参数平均即可实现高效合并。这就好比超级马里奥通过触碰道具直接获得新能力一样,让模型以“免费午餐”的方式吸收同源模型的特长。
MergeLM 特别适合 AI 研究人员、大模型开发者以及希望优化模型性能的工程师使用。无论是想要整合不同领域知识的团队,还是希望在有限算力下探索模型潜力的高级用户,都能利用它轻松将多个 7B 或更大规模的模型合成为性能更强的单一模型,甚至曾助力合并模型在开源榜单上斩获榜首。
使用场景
某初创团队希望快速构建一个兼具医疗问答、法律条文解读和代码生成能力的多功能助手,但受限于算力预算无法对大模型进行全量微调。
没有 MergeLM 时
- 训练成本高昂:为了让模型掌握三个领域的知识,团队需分别收集数据并进行三次独立的全量微调或 LoRA 训练,消耗大量 GPU 机时。
- 显存资源瓶颈:同时加载多个领域模型或进行大规模参数合并时,单卡显存往往不足,迫使团队升级昂贵的硬件设施。
- 部署维护复杂:最终需要维护三个独立的模型文件,用户在不同任务间切换时需频繁重载模型,导致服务延迟高且架构臃肿。
- 能力相互干扰:若尝试将不同领域的数据混合在一起重新训练,容易出现“灾难性遗忘”,导致模型在某一领域表现下降。
使用 MergeLM 后
- 零成本融合能力:利用 DARE 技术稀疏化各领域微调模型的增量参数,无需任何额外训练或 GPU 资源,即可直接将医疗、法律和代码模型的能力“吸收”到一个基座模型中。
- 单模型高效部署:成功将三个专用模型合并为单一的
supermario版本模型,显著降低显存占用,实现单卡部署多能助手。 - 保留专项特长:通过参数平均与稀疏化处理,合并后的模型在各垂直领域的表现几乎无损,避免了传统混合训练带来的性能衰退。
- 迭代速度飞跃:新增领域能力时,只需微调一个新模型并再次合并,无需从头开始训练,极大缩短了产品迭代周期。
MergeLM 让开发者像“超级马里奥”吃道具一样,以零训练成本免费获取同源模型的专长,彻底打破了多能力大模型落地的算力壁垒。
运行环境要求
- 未说明
- 推理脚本支持 tensor_parallel_size 参数,暗示需要 GPU
- 具体型号和显存大小取决于所选模型(如 7B/13B LLaMA),README 未明确指定最低要求
未说明

快速开始
语言模型就是超级马里奥:从同源模型中免费吸收能力
本仓库用于支持论文《语言模型就是超级马里奥:从同源模型中免费吸收能力》(arXiv:2311.03099)。
🔔 如果您有任何问题或建议,请随时告知我们。您可以直接通过邮箱 yule@buaa.edu.cn 联系 Le Yu,或者在本仓库中提交 issue。
💥 最新消息 💥
- 🔥🔥🔥[2024年5月2日] 我们的论文已被 ICML 2024 接受!最终定稿版本即将发布。
- 🔥🔥🔥[2024年2月9日] 特别感谢 Sourab Mangrulkar,将我们的工作集成到 huggingface/peft 项目 中!
- 🔥🔥🔥[2024年1月28日] 我们的合并模型 supermario_v2 在 Open LLM Leaderboard 上的 7B 模型中排名第一!
- 🔥🔥🔥[2023年12月4日] 感谢 Minhajul Hoque 在 Medium 上分享我们的工作!
- 🔥🔥🔥[2023年11月29日] 特别感谢 papersread.ai 分享了我们的工作 链接!
- 🔥🔥🔥[2023年11月27日] 我们感谢 martyn 将我们的工作扩展到 Stable Diffusion 模型!
- 🔥🔥🔥[2023年11月26日] 特别感谢 brucethemoose 将我们的工作应用到 Hugging Face 上的 模型!
- 🔥🔥🔥[2023年11月25日] 我们感谢 cg123 将我们的工作集成到 mergekit 项目 中!
- 🔥🔥🔥[2023年11月24日] 特别感谢 fly51fly 在 Twitter 上分享我们的工作!
- 🔥🔥🔥[2023年11月23日] 特别感谢 WizardLM 在 Twitter 上分享我们的工作!
- 🔥🔥🔥[2023年11月21日] 我们感谢 PaperWeekly 在 微信 和 知乎 上分享我们的工作!
- 🔥🔥🔥[2023年11月11日] 特别感谢 夕小瑶 在 微信 和 知乎 上分享我们的工作!
- 🔥🔥🔥[2023年11月6日] 我们的论文已在 arXiv、Papers With Code 和 Hugging Face 上公开。
概述
在本工作中,我们发现无论是编码器还是解码器架构的语言模型(LM),都可以在无需重新训练或使用 GPU 的情况下,通过吸收同源模型的参数来获得新的能力。具体来说:
- 我们提出了一种名为 DARE 的新操作,可以将大部分(90% 甚至 99%)的 delta 参数直接置为零,而不会影响 SFT 模型的能力。
- 我们将多个 SFT 同源模型的 delta 参数通过 DARE 进行稀疏化处理,作为一种通用的预处理技术,然后通过参数平均的方式将其合并为一个单一模型。
工作流程如下所示:
通过大量实验,我们发现:
- DARE 对于 delta 参数值范围相对较小的 SFT 模型(例如在 0.005 以内)非常有效,甚至可以消除高达 99% 的 delta 参数。较大的模型能够容忍更高比例的被丢弃参数,这表明 SFT 天然地学习到了一组极其稀疏的 delta 参数,几乎所有能力都源自预训练模型本身。详见下图 (a)。
- DARE 可以将多个特定任务的 LM 合并为一个具备多样化能力的 LM,使其同时拥有所有 SFT 模型的功能。例如,将 WizardLM 和 WizardMath 合并后,WizardLM 的 GSM8K 准确率从 2.2% 提升至 66.3%,在保持指令遵循能力的同时,还超越了 WizardMath 原有的 64.2% 表现。详见下图 (b)。
语言模型与数据集
我们在编码器和解码器两种架构的 LM 上进行了实验。
- 对于编码器架构的 LM,我们选择了 bert-base-uncased 和 roberta-base 作为预训练骨干。使用了 GLUE 基准中的八项数据集,包括 CoLA、SST-2、MRPC、STS-B、QQP、MNLI、QNLI 和 RTE。
- 对于解码器架构的 LM,我们选择了 LLaMA、Llama 2 和 Code Llama 作为预训练骨干。Fine-tuned 模型包括 WizardLM、WizardMath、WizardCoder-Python 和 Code Alpaca。 我们评估了五种数据集上的三项任务:AlpacaEval(指令遵循)、GSM8K 和 MATH(数学推理),以及 HumanEval 和 MBPP(代码生成)。
请注意,我们在 math_code_data/ 文件夹中提供了 GSM8K、MATH 和 MBPP 数据集,这些数据来自 WizardLM 仓库。其他数据集可以通过我们的代码自动下载。对于语言模型,您可以手动下载,也可以使用我们的代码进行下载。
您还可以修改 utils/load_config.py 文件中的 cache_dir 参数,指定您自己的路径来保存数据集和模型。
模型合并方法
本仓库提供了五种模型合并方法的完整实现,包括: Average Merging、 Task Arithmetic、 Fisher Merging、 RegMean 和 TIES-Merging。 此外,我们还将提出的 DARE 与上述方法结合使用,以进一步提升合并效果。
环境
PyTorch 2.0.1、 transformers 4.33.1、 datasets 2.13.1、 vllm 0.1.4、 human_eval、 numpy,以及 tqdm。
基于编码器的语言模型执行脚本
对于基于编码器的语言模型,我们首先在 GLUE 基准上对其进行微调(支持单任务和多任务两种设置),然后进行推理。我们还提供了使用五种模型合并方法来合并基于编码器的语言模型的脚本。
在 GLUE 上微调的脚本
- 在单任务设置下对 roberta-base 模型在 CoLA 数据集上进行微调的示例:
python train_plms_glue.py --language_model_name roberta-base --dataset_name cola --learning_rate 1e-5 --num_runs 5
- 在多任务设置下对 roberta-base 模型在 CoLA 和 RTE 数据集上进行微调的示例:
python train_plms_glue.py --language_model_name roberta-base --dataset_name cola --multitask_training --auxiliary_dataset_name rte --learning_rate 1e-5 --num_runs 5
使用 DARE 及其他变体进行推理的脚本
- 对 roberta-base 模型进行直接推理(丢弃率 0.0)的示例:
python inference_plms_glue.py --language_model_name roberta-base --weight_mask_rate 0.0
- 对 roberta-base 模型应用 DARE 进行推理(丢弃率 0.9)的示例:
python inference_plms_glue.py --language_model_name roberta-base --weight_mask_rate 0.9 --use_weight_rescale
- 对 roberta-base 模型应用 DropOnly 进行推理(丢弃率 0.9)的示例:
python inference_plms_glue.py --language_model_name roberta-base --weight_mask_rate 0.9
- 对 roberta-base 模型应用基于权重大小的剪枝进行推理(丢弃率 0.9)的示例:
python inference_plms_glue.py --language_model_name roberta-base --weight_mask_rate 0.9 --mask_strategy magnitude
- 对 roberta-base 模型应用掩码细调参数进行推理(丢弃率 0.9)的示例:
python inference_plms_glue.py --language_model_name roberta-base --weight_mask_rate 0.9 --use_weight_rescale --weight_format finetuned_weight
合并模型的脚本
- 将成对微调过的 roberta-base 模型通过平均合并法进行合并的示例:
python merge_plms_glue.py --merging_method_name average_merging --language_model_name roberta-base
- 将成对微调过的 roberta-base 模型通过 Fisher 合并法进行合并的示例:
python merge_plms_glue.py --merging_method_name fisher_merging --normalize_fisher_weight --language_model_name roberta-base
- 将成对微调过的 roberta-base 模型通过平均合并法结合 DARE 进行合并的示例:
python merge_plms_glue.py --merging_method_name mask_merging --use_weight_rescale --language_model_name roberta-base --mask_apply_method average_merging
基于解码器的语言模型执行脚本
由于我们使用的基于解码器的语言模型已经过微调,因此可以直接用于推理。我们还提供了使用两种模型合并方法(平均合并和任务算术)来合并基于解码器的语言模型的脚本。
使用 DARE 及其他变体进行推理的脚本
- 对 WizardMath-7B-V1.0 模型在 GSM8K 数据集上进行直接推理(丢弃率 0.0)的示例:
python inference_llms_instruct_math_code.py --dataset_name gsm8k --finetuned_model_name WizardMath-7B-V1.0 --tensor_parallel_size 1 --weight_mask_rate 0.0
- 对 WizardMath-7B-V1.0 模型在 GSM8K 数据集上应用 DARE 进行推理(丢弃率 0.9)的示例:
python inference_llms_instruct_math_code.py --dataset_name gsm8k --finetuned_model_name WizardMath-7B-V1.0 --tensor_parallel_size 1 --weight_mask_rate 0.9 --use_weight_rescale
- 对 WizardMath-7B-V1.0 模型在 GSM8K 数据集上应用 DropOnly 进行推理(丢弃率 0.9)的示例:
python inference_llms_instruct_math_code.py --dataset_name gsm8k --finetuned_model_name WizardMath-7B-V1.0 --tensor_parallel_size 1 --weight_mask_rate 0.9
- 对 WizardMath-7B-V1.0 模型在 GSM8K 数据集上应用基于权重大小的剪枝进行推理(丢弃率 0.9)的示例:
python inference_llms_instruct_math_code.py --dataset_name gsm8k --finetuned_model_name WizardMath-7B-V1.0 --tensor_parallel_size 1 --weight_mask_rate 0.9 --mask_strategy magnitude
- 对 WizardMath-7B-V1.0 模型在 GSM8K 数据集上应用掩码细调参数进行推理(丢弃率 0.9)的示例:
python inference_llms_instruct_math_code.py --dataset_name gsm8k --finetuned_model_name WizardMath-7B-V1.0 --tensor_parallel_size 1 --weight_mask_rate 0.9 --use_weight_rescale --weight_format finetuned_weight
合并模型的脚本
- 将 WizardLM-13B-V1.2 和 WizardMath-13B-V1.0 模型通过平均合并法进行合并的示例:
python merge_llms_instruct_math_code.py --merge_instruct --merge_math --merging_method_name average_merging --tensor_parallel_size 1
- 将 WizardLM-13B-V1.2 和 WizardMath-13B-V1.0 模型通过任务算术法进行合并的示例:
python merge_llms_instruct_math_code.py --merge_instruct --merge_math --merging_method_name task_arithmetic --scaling_coefficient 1.0 --tensor_parallel_size 1
- 将 WizardLM-13B-V1.2 和 WizardMath-13B-V1.0 模型通过平均合并法结合 DARE(丢弃率 0.2)进行合并的示例:
python merge_llms_instruct_math_code.py --merge_instruct --merge_math --merging_method_name mask_merging --use_weight_rescale --weight_mask_rate 0.2 --mask_apply_method average_merging --tensor_parallel_size 1
❗注 1:在合并基于解码器的语言模型时,我们需要分配的 GPU 数量等于要合并的模型数量乘以张量并行度。例如,如果我们想将 WizardLM-13B-V1.2 和 WizardMath-13B-V1.0 模型以张量并行度为 1 的方式进行合并,则需要分配 2 × 1 = 2 个 GPU。
❗注 2:如果您的设备上 vllm 抛出 “AssertionError: data parallel group is already initialized” 错误,请尝试使用相应的设置运行 direct_inference_merged_llms_instruct_math_code.py。例如,如果在使用平均合并法结合 DARE(丢弃率 0.2)合并 WizardLM-13B-V1.2 和 WizardMath-13B-V1.0 时出现此错误,请运行以下命令来评估指令或数学相关任务:
python direct_inference_merged_llms_instruct_math_code.py --merge_instruct --merge_math --merging_method_name mask_merging --use_weight_rescale --weight_mask_rate 0.2 --mask_apply_method average_merging --tensor_parallel_size 1 --evaluate_task instruct
python direct_inference_merged_llms_instruct_math_code.py --merge_instruct --merge_math --merging_method_name mask_merging --use_weight_rescale --weight_mask_rate 0.2 --mask_apply_method average_merging --tensor_parallel_size 1 --evaluate_task math
AlpacaEval、HumanEval 和 MBPP 的评估流程
对于 AlpacaEval、HumanEval 和 MBPP,我们的代码会保存生成的文件,请额外运行以下评估命令以获得最终的指标。
- 对于 AlpacaEval:
我们使用 alpaca_eval 仓库 中的
chatgpt_fn来计算胜率。首先,请参考 alpaca_eval 仓库 安装环境。 然后,如果您想评估生成的 WizardLM-13B-V1.2_inference_mask_0.2_rescale_True.json 文件,请运行:
alpaca_eval --model_outputs ./save_gen_instruct_responses_results/alpaca_eval/WizardLM-13B-V1.2_inference_mask_0.2_rescale_True.json --annotators_config chatgpt_fn --name WizardLM-13B-V1.2_inference_mask_0.2_rescale_True
- 对于 HumanEval: 首先,请参考 human-eval 仓库 安装环境。 然后,如果您想评估生成的 WizardCoder-Python-13B-V1.0_inference_mask_0.2_rescale_True.jsonl 文件,请运行:
evaluate_functional_correctness ./save_gen_codes_results/human_eval/WizardCoder-Python-13B-V1.0_inference_mask_0.2_rescale_True.jsonl
- 对于 MBPP: 首先,请参考 bigcode-evaluation-harness 仓库 安装环境。 然后,如果您想评估生成的 WizardCoder-Python-13B-V1.0_inference_mask_0.2_rescale_True.jsonl 文件,请运行:
accelerate launch ./bigcode-evaluation-harness/main.py --tasks mbpp --allow_code_execution --load_generations_path ./save_gen_codes_results/mbpp/WizardCoder-Python-13B-V1.0_inference_mask_0.2_rescale_True.jsonl
致谢
我们感谢 WizardLM 的作者们将其项目代码公开分享。
引用
在使用本项目时,请考虑引用我们的论文。
@inproceedings{yu2024language,
title={Language Models are Super Mario: Absorbing Abilities from Homologous Models as a Free Lunch},
author={Yu, Le and Yu, Bowen and Yu, Haiyang and Huang, Fei and Li, Yongbin},
booktitle={International Conference on Machine Learning},
year={2024},
organization={PMLR}
}
星标历史
常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
