大模型后训练跑偏了怎么查,5 步定位到回滚

16小时前发布

先分清是哪种歪:能力退化、风格走样、安全边界松动,3 类的排查入口完全不同。走 5 步能定位到具体原因,多数情况 2 小时内能找到,最慢 1 个工作日,第 5 步是回滚。

我 2025 年给 1 个做客服的团队处理过 2 次跑偏,两次都不在训练代码上:1 次是微调集里混进 3000 条旧版话术,1 次是学习率设成了预训练的 10 倍。下面按我们当时的顺序写。

一、先分清 3 种跑偏

3 类的现象差别明显,先归类能省掉一半排查时间。

现象常见原因先查哪里
原来会的题现在答不出微调集太窄,把基座能力盖掉微调集里通用样本占比
回答变短、变空、只顾结论偏好数据带偏,或惩罚项过强标注标准与训练超参
口气忽然变了,爱用某类句式训练数据来源单一按来源分组的样本比例
该拒答的照答安全样本在微调后失效拒答类评测集通过率

第 4 行要单独处理。安全边界松动属于不能上线的问题,程度比效果差一点重得多,排查顺序要提前到第 1 位。

归类不准的时候,用 1 个笨办法:把 10 条输出读给不了解项目的人听,问 2 个问题——听得懂吗、敢照着做吗。听不懂的多是风格或能力问题,不敢照着做的先按安全边界处理。

3 类里只有第 1 类会体现在评测分数上。风格走样与边界松动的分数常常没掉,甚至涨 1 到 2 个点,这也是它们最容易被放过去的原因。

二、5 步排查

  1. 复现:固定 20 条提示词,同一参数跑 3 次,确认现象能稳定复现,还是随机波动
  2. 对照:拿上一版权重跑同一组提示词,两版并排放,把差异写成 5 条以内的清单
  3. 换数据:只换微调集里 20% 的样本重训 1 个短周期版本,看现象有没有变化
  4. 调参数:学习率、批大小、训练轮数各改 1 个,每次只改 1 个,跑 200 步看曲线
  5. 回滚:定位不到原因就先退回上一版权重,线上优先稳住,问题留到下一轮再查

第 1 步为什么要固定提示词

同样的问题换个问法,输出差异可能比版本差异还大。20 条提示词要覆盖 4 类:原来答得好的、答得差的、该拒答的、多轮追问的,4 类各 5 条。多轮那 5 条要写满 3 轮追问,第 1 轮就露问题的,说明不了后 2 轮会不会跑。

第 3 步怎么换才有信息量

把微调集按来源拆成 3 组,先剔掉占比最高的那组重训。我那次剔掉旧版话术之后,口气问题当轮就消失了,剩下的 1 个问题在别的组里。剔完要记 1 笔:剔掉多少条、占总量几成,下次遇到同类现象直接照做。

第 5 步不是放弃

回滚的同时把复现脚本、对比清单、训练配置 3 样存进 1 个文件夹。下一轮排查从这份存档起步,不用重新造样本。

存档要写 4 个字段:版本号、训练数据指纹、关键超参、跑评测的日期。4 个字段缺 1 个,2 周后再看就分不清这份权重是用哪批数据训的,排查只能从头再来。

团队里两个人以上碰这件事时,把「谁改了什么」也记下来。改样本的人与调参数的人分开,出问题能立刻分辨是数据侧的改动还是训练侧的改动。我见过一次跑偏,查了两天才发现是同事前一天临时替换了一批标注样本,日志里没有任何记录,只能靠人回忆。

车间地面标线与散落的垫片

三、要准备的 3 样东西

东西具体是什么没有会怎样
上一版权重完整的 checkpoint 与推理配置没法对照,只能猜
固定提示词集20 条,分 4 类,每类 5 条每次结论都不一样
训练日志每 10 步的损失、学习率、显存看不出是哪一步开始偏

第 3 样最常缺。日志只存最后 1 行,跑完只剩 1 个总数,看不出第 300 步之后的异常抖动。开训前把日志级别调到每 10 步 1 条,代价是几十 MB 磁盘。

3 样里最容易被忽视的是第 1 样。上一版权重留在推理服务器上,训练机上没有备份,回滚时才发现得重新训 1 遍,8 小时起步。养成习惯:每次上新版前,先把旧版权重与推理配置一起打包存 1 份。

四、卡在哪:5 个卡点

现象复现不了,是最常见的卡点。同一提示词跑 3 次结果不一样,说明问题在推理参数上,先把温度调到 0 再测 1 轮。

对照不出差异,多半是提示词集本身太窄。20 条都在问同一类问题,两版输出自然差不多,加 5 条跨领域的再比。

换数据后现象没变,说明问题不在数据。回到第 4 步调参数,学习率从 5e-5 降到 1e-5 试 1 轮,多数退化会缓解。只改 1 个参数,改完跑 200 步就够判断方向,不用跑完。

第 4 步的顺序也有讲究:先降学习率,再看训练轮数,最后动批大小。前 2 个改动成本低,第 3 个会连带影响显存与速度。

评测分数没掉,但人觉得变差了。这类情况要信人,把觉得差的 10 条样本补进评测集,下 1 轮就看这个指标。

补样本时把「差在哪」写清楚,1 条 1 句话:答得比原来短、给了错误的日期、把 2 个概念混着说。写清之后,下 1 轮的对比才有落点,也方便判断这轮改动到底有没有解决问题。

回滚这个动作本身要提前演练 1 次。上线前把回滚命令写在运维文档里,2 个人各跑 1 遍,确认 10 分钟内能把旧版换回来。真出事的时候再翻文档,往往已经过去半小时。

整件事的成本主要在样本上,不在算力上。1 次排查通常要跑 3 到 5 个短周期版本,每个版本 200 到 500 步,1 张卡几小时能跑完;真正花时间的是把 20 条提示词、微调集分组、对比清单准备齐,这部分准备 1 次能用半年。准备齐了,第 2 次遇到同类问题,1 小时内能给出方向。

回滚后旧问题又回来,说明 2 个版本各有各的毛病。这时候不走二选一,把两版的优点各抽 10 条样本,拼成 1 个新的微调集,重训 1 轮。

重训前先把 2 版的样本对齐:同一提示词下,把好答案标出来,坏答案不删只标注。只删坏样本的做法会让模型在同类问题上过拟合,换个问法又跑偏。

整个 5 步走完,快的话 2 小时,慢的 1 个工作日。决定快慢的是第 3 步:微调集有没有按来源打好标签,没标签就得先补 1 轮人工分组,半天起步。

一叠略错位的金属垫片

五、修完怎么验证

  1. 20 条提示词全部重跑,4 类里每类的通过数都要比坏版本高
  2. 拒答类单独看:该拒的 5 条全拒,不该拒的 5 条不被误拒
  3. 换 3 个问法问同一件事,输出结论一致,没有前后矛盾

第 3 条能抓出不少隐性问题。同一件事换个问法就答反,说明模型学到的是句式关联,底下的知识没稳住,这类问题在评测分数上看不出来。

验证通过后把这次的样本与结论写进 1 页纸,放进项目文档。同一个团队 3 个月内重复踩同一个坑的概率不低,有这页纸下次 10 分钟就能对上号。

只剩擦痕的白板

本文信息核对时间:2026-11