微调模型怎么跟原模型融合:权重合并到部署的完整流程

模型与算力

讲清微调权重与原模型合并、格式转换、部署上线的完整流程,附合并失败与效果回退的排查顺序。

你按教程跑完一次微调,手里多了个几百 MB 的权重文件,却发现它单独根本跑不起来——要么得跟原模型叠在一起加载,要么干脆合不进推理框架。这篇按「先判断要不要合、再动手合、最后验证上线」的顺序,把每一步该看什么、卡住了怎么查讲一遍。

你按教程跑完一次微调,手里多了个几百 MB 的权重文件,结果发现它单独根本跑不起来:要么得跟原模型叠在一起加载,要么干脆合不进推理框架。这篇按「先判断要不要合、再动手合、过格式这一关、最后验证上线」的顺序讲一遍,每一步该看什么、卡住了按什么顺序查。

先说明适用边界:如果你用的是托管式微调服务、只拿到一个可调用的接口,那合并这一步平台已经替你做了,你只需要关注调用格式和评测;本文针对的是自己下载权重、自己上推理框架的场景。另一种不适用的情况是纯提示词或检索增强,那压根不存在权重合并。

先分清:你的权重是适配器还是完整模型

这一步判断错了,后面全白干。打开输出目录看文件构成:如果是几个小文件、加起来远小于原模型体积,那基本是适配器,必须和原模型配合使用;如果是一整套接近原模型体积的权重,通常可以直接加载。前者需要合并,后者多数情况不需要。

观察点适配器完整微调模型
目录体积很小,常只有几十到几百 MB接近原模型体量
能否单独加载不能,缺基座权重一般可以
合并必要性必须合并或运行时挂载通常不需要
典型报错找不到某个层、维度不匹配配置缺失、格式不认
  • 看输出目录里是几个小文件还是接近原模型体积的一整套权重;前者必须和原模型一起用。
  • 适配器要确认挂在哪一层:只挂注意力层,还是也挂了前馈层,这决定合并脚本选哪个参数。
  • 对不上的常见症状是加载时报维度不匹配,或日志里提示跳过某个层。
  • 基座和微调框架的对应说明,到 /models 和 /stacks/fine-tuning 核对,别凭记忆。

合并四步:备份、对齐精度、执行、比对体积

  1. 备份原模型把原模型权重复制一份再动手。合并是覆盖式操作,出错只能靠备份回滚,这一步不能省。
  2. 对齐精度合并前统一精度,别一半 fp16 一半 bf16。混用容易数值溢出,表现是输出全变成重复或乱码。
  3. 执行合并用训练框架自带的合并脚本,指定基座路径和适配器路径。跑完看日志有没有提示跳过的层。
  4. 比对体积合并产物大小应接近原模型本身。明显偏小,说明只写进去了一部分,得回头查脚本参数。

建议同一套流程先在本地或小机器上跑通,确认产物能加载,再放到有卡的机器或云端重跑。这样调试成本最低。合并前后的显存和存储开销,可以先到 /models/deploy 按当时的说明估算。

合并完还要过格式这一关

训练框架的格式和推理框架要的格式往往不是一回事,中间通常要转一次。转换不是可选项,跳过它最常见的后果就是加载时报配置缺失或权重不识别。

  • 转换后检查三件套是否齐全:分词器文件、配置文件、权重文件,缺配置文件是最常见的加载失败原因。
  • 量化版和全精度版分开存放,别把量化后的产物当原版继续做增量训练。
  • 转换完先本地加载一次、发一个请求,确认能出正常结果再打包上服务器。
  • 显存够不够先算一遍,参照 /models/deploy 的口径,避免转换完才发现跑不起来。

部署上线:先小流量验证再切

合并和转换都过了,不等于效果一定变好。上线前必须做对比验证,用固定的一小组输入同时跑原模型和微调模型,逐条看差异,重点看有没有变傻、答非所问,或把训练集内容原样背出来。

验证项怎么查不通过说明什么
对比输出同一组输入跑两个模型逐条比整体退化或跑偏
查过拟合抽查是否原样背出训练样本训练轮数或数据量有问题
看格式提示词模板与训练时是否一致掉效果但模型本身没坏
看回退配置里能否一键切回原模型上线风险没兜住

正式上线先给一小部分流量或内部账号,观察一段时间再全量。配置里保留指向原模型的开关,回退只改一个参数,出问题能在一分钟内切回去。想知道各家推理服务当时的价格和延迟表现,去 /price-watch 看当期数字。

合并不上、效果变差时的排查顺序

按固定顺序查,别四处乱试。绝大多数问题都出在前两步,越往后概率越低。以下顺序从最常见到最少见排列。

  1. 先查基座版本确认基座版本和微调时用的完全一致。版本错配是最隐蔽的坑,日志不一定报错,但效果就是不对。
  2. 再查层名映射确认合并脚本的层名映射没漏,日志里通常有跳过的层数,有跳过就要查为什么。
  3. 查提示词格式确认推理时的提示词格式和训练时一致。格式不对会明显掉效果,但模型本身没问题。
  4. 最后回训练侧以上都没问题还是差,就回去看数据量、训练轮数和学习率,别在部署环节死磕。

如果排查中发现是基座选型本身不合适,可以到 /rankings 看各类模型当时的对比,换一个基座重训往往比在部署上硬调更快。自己搭推理服务的话,先用 /tools/speed-test 测一遍实际吞吐,再决定扩容方案。

下一步合并流程跑通后,建议去 /stacks/fine-tuning 对照你用的框架说明复核一遍参数,再到 /models/deploy 确认部署口径,避免格式和显存上踩重复的坑。

常见问题

微调完必须合并吗,能不能不合并直接部署?

不一定。很多推理框架支持加载适配器、运行时再叠加上去,省一次合并也方便随时切换。合不合并主要看两件事:推理框架支不支持、以及服务化之后多请求并发时的延迟能不能接受。支持的话可以先不合,效果确认了再合。

合并之后效果反而比不合并差,是怎么回事?

先确认合并前后的精度和版本是否一致,最常见的原因是基座版本对不上或合并脚本用错了层名。其次看推理时的提示词格式,训练和推理格式不一致会明显掉效果。逐条排除后仍变差,再回头查训练本身。

合并完的模型能直接量化压缩吗?

能,但顺序上建议先合并再量化,并且量化版本单独存一份,不要覆盖合并产物。量化会带来一定质量损失,上生产前用同一组固定输入和未量化版本跑一遍对比。显存和吞吐的取舍可以去 /models/deploy 做一次测算。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。