你手上有几个微调过的同源模型,或者一个基座加若干个任务适配版本,想合起来用一个模型顶住多个任务。这时候要决定:是再做一轮训练微调,还是走模型合并这条路。两条路的成本结构、可控性、出问题时的排查方式都不一样。这篇不讲原理推导,只给判断标准、动手顺序,以及什么情况下合并明显不划算。
你手上有几个微调过的同源模型,或者一个基座加若干条任务适配分支,想把它们合起来用一个模型顶住多个任务。这时候要做的选择很实际:是再跑一轮训练微调,还是走模型合并这条路。两条路的成本结构、出错时的排查顺序、回滚难度都不一样,不是谁先进谁落后的问题。
下面只讲判断标准和动手顺序。你先对号入座看清自己属于哪种情况,再决定要不要合、合完怎么验,最后附一份能照着做的清单,以及哪些情况下合并明显不划算。
先把「模型合并」这个词的边界划清
合并的实质是把已经存在的权重用数学方式揉到一起,全程不碰梯度,也不重新读训练数据。微调正相反,它让参数跟着数据继续走。这个区别决定了后面所有成本差异:合并没有训练循环,所以没有数据管线、没有优化器状态、没有断点续训那一套东西。
- 合并对象
- 同源同架构的权重,一个基座加若干适配分支,或同一基座的多个微调版本
- 训练期参数平均
- 属于训练流程的一部分,跟部署前的权重合并不是一回事
- 适配器并入主权重
- 工程步骤,为了少一层推理开销,也不算我们说的模型合并
- 先确认架构一致:层数、隐藏维度、注意力头数对不上就别急着合
- 词表被改过的权重单独处理,强行合往往得到乱码输出
- 张量形状对不上先查是不是加载配置写错,别直接改形状硬凑
- 来源不明的权重先别进合并池,合完出问题你没法归因
什么情况下先试合并,而不是再训一轮
判断标准很简单:如果你要的是把几份已有能力重新配比,而不是学新东西,合并的性价比通常更高。它不需要重新过一遍语料,也就不受数据能不能再用的限制,这是它相对微调最实在的一条优势。
| 维度 | 模型合并 | 传统训练微调 |
|---|---|---|
| 算力开销 | 基本是前向量级,几张卡就能试 | 要跑完整训练循环,长尾成本高 |
| 数据依赖 | 不读训练数据 | 必须有可用、可重复使用的数据 |
| 回滚难度 | 原权重留着,换回来即可 | 改完状态不好退,得留检查点 |
| 能力来源 | 多份权重重新配比 | 数据里没有的学不会 |
| 可归因性 | 系数调出来的混合,因果链偏弱 | 每步都能对上数据,记录清楚 |
算力紧张、只想验证方向的时候,这个差别更明显。合并的试错一轮可能就是几分钟的事,微调一轮下来往往要排队、要盯日志、要留检查点。需要快速回滚的场合也是同理:合并产出的是一份新权重,原来的几份动都没动。
这几种情况,合并帮不了你
合并本质是加权平均一类的操作,它只能把已有的能力重新配比,学不会训练数据里压根没有的东西。要新知识、新语言能力、新领域术语,这条路直接排除。同理,如果几个模型表现差距太大或者风格冲突明显,合出来常是「都会一点、都不精」。
- 要的是新知识或新语言能力,别指望合并能补上
- 每个能力都得说清从哪来、要可复现可归因,混合权重给不出干净的因果链
- 线上对延迟和显存卡得很死,多一份权重就多一份占用,合并省下的调度复杂度可能抵不过内存成本
- 几个模型的表现差距过大,合之前先单独评估,差距悬殊时分开部署更省心
还有一种容易忽略的情况:你的任务本身有强冲突,比如一个要求严格遵循格式、一个要求自由发挥。这种冲突不是靠调系数能消掉的,合完很可能两边都不达标,这时候回头做多模型路由反而更稳。
合并完之后怎么验,别只看一个总分
验合并最容易犯的错是拿一个综合分下结论。总分不掉不代表各任务都没掉,很可能是这个任务涨了、那个任务掉了,互相抵消。正确的做法是按任务分桶看,再对着自己的真实请求样本过一遍。
- 固定小样本对照挑一小撮固定输入,跑合并前后两条链路,逐条比输出差异,重点找明显退化,不是找有没有变好
- 按任务分桶把评测集按任务拆开看,原本各自擅长的桶掉了,说明合并系数压过头了
- 真实请求抽样从线上日志抽一批真实请求过一遍,公开榜单的分数在这里参考价值有限,站内 /benchmarks 的说明也讲过任务不匹配的问题
- 存档留证把合并前后的权重、配置、评测记录一起存好,方便回退和以后横向对比
如果你的验收标准里「不允许掉」的任务超过了两个,那要么放宽标准,要么考虑不合并、走多模型并存。硬顶着不合的模型合并,最后线上表现会替你决定,而那时候回滚成本比现在高得多。
一份能直接照做的清单
把上面的判断收敛成一份动作清单。照着做,能省掉大部分「合完才发现方向错了」的返工。
- 列清每份权重的来源基座、改过什么、擅长什么,来源不明的先别合
- 挑两个差异最大的任务做小样本对照,先确认合并不掉分,再扩大范围
- 定好验收线:哪些任务的数据不允许掉,哪些允许小幅波动,写下来再动手
- 把推理托管和自建的实际开销跟重新训一轮的成本放在一起比,站内 /compute/finetune 有对照口径
- 决定合并后先留一份原始权重备份,再跑合并脚本
需要提醒的是,这套清单默认你手上是几个同源权重。如果你只有一份微调模型、想靠自合并提升表现,收益通常不如多做一轮数据清洗,这种情况不适用上面的流程。
下一步如果你还在纠结合并还是重训,先去站内把两条路的实际开销拉平对比再决定,口径和入口都在这里。→常见问题
模型合并能完全替代微调吗?
不能。合并处理的是「已经有几份训练好的权重、怎么合起来用」,它不在数据上继续学。需要引入新知识、新领域说法、新输出格式时,还是得走微调那条路。两者更像前后脚的关系:先微调出各自的版本,再考虑要不要合。
合并要多少显卡、多少时间?
看你合几个、模型多大。小模型在单卡上就能跑完,大模型往往要先把权重分片再合并,显存不够就得走 CPU 内存或分批加载。具体到你的模型规模该配什么卡,站内 部署测算(/models/deploy) 可以按参数和量化方式先算一遍。
合并之后效果一定比单个模型好吗?
不一定。合并是把几份能力按系数重新分配,原来强的方面可能被稀释。常见结果是一部分任务持平、一部分小涨、一部分小掉。所以合并前要定好验收线,掉在允许范围外就调系数或者干脆放弃这条路线。