模型蒸馏怎么做

模型与算力

讲清模型蒸馏的基本原理,并给出一条从教师模型选型、数据构造到学生模型验收的完整落地流程。

你手上有个大模型效果不错,但线上推理成本压不下来,或者端侧根本放不进去,于是想到蒸馏。可一上手就卡住:到底是拿软标签还是硬标签、教师模型的输出怎么批量造、学生模型训完怎么判断没白干。这篇按操作顺序把每一步拆开,给你判断标准和排查顺序,不讲玄学。

你手上有个大模型效果不错,但线上推理成本压不下来,或者端侧根本放不进去,于是想到蒸馏。可一上手就卡住:到底是拿软标签还是硬标签、教师模型的输出怎么批量造、学生模型训完怎么判断没白干。这篇按操作顺序把每一步拆开,给你判断标准和排查顺序。

先说清楚前提:蒸馏不是一个按钮,它是一条流水线,里面百分之七十的功夫花在造数据和验收上,训练反而没那么玄。如果你只是想让模型多懂一个领域,那先去看微调那条路,别绕到蒸馏上来。

先搞清楚蒸馏在干什么

一句话:让一个小模型去模仿一个大模型的输出分布,而不是只学原始标注。教师给出的「概率分布」携带了类别之间的相对关系,比如它认为某两个答案都不错、只是其中一个略胜,这种暗知识是硬标签给不了的。判断你该不该动手,主要看任务边界和成本瓶颈是否真的存在。

  • 输出层蒸馏:学生直接对齐教师的软标签,最通用、最容易跑通,工程上优先选它
  • 中间层特征对齐:让学生的隐层去逼近教师的表示,效果上限高,但要求学生容量别差太远
  • 数据蒸馏:只拿教师生成的数据当监督,几乎不掺损失设计,上手最快但丢掉的信息也最多
  • 判断标准:任务有明确输入输出、教师已稳定可用、且推理成本或延迟确实是瓶颈,三条都满足再往下走

选教师、造数据:量最大的一步

教师模型不一定要最强,关键要跟学生同任务、同语言,并且输出格式稳定。教师自己都答不对的题,蒸馏下去只会把错误教给学生。所以先定好教师,再谈数据规模。

教师选型
看同任务同语言表现、输出格式稳定性和调用成本,不必盲目追最强档
软标签
教师给的完整输出分布,或退一步取 top-k 候选及概率
兜底标注
每条样本保留原始标注,防止学生被教师带偏时没有校准锚点
  1. 小批量试跑先跑几百到几千条,人工抽查教师输出,统计答错率、格式跑偏率、重复啰嗦比例,三项都过关再批量化
  2. 批量生成固定提示词模板和解析脚本,输出落盘时把输入、分布、原始标注三者对齐存好,方便后续复现和排查
  3. 清洗过滤把教师答错、格式错乱、截断的样本剔掉,比例过高就回头改提示词或换教师,别硬着头皮训
  4. 控制规模先做能覆盖任务类型的最小集,训一轮看趋势再扩,一上来冲海量最容易返工

这一步没有捷径,抽检比例和过滤规则要提前定死并写进脚本,否则后面发现数据脏了,返工成本极高。想对照不同教师的公开数据,可以到 /sites 看各家官方资料页给出的模型能力说明。

训学生模型:温度、损失与常见坑

软标签要配温度系数使用。温度调高会让分布更平滑、类别间关系更明显,但同时会稀释主要信号,需要配合损失权重一起调。常见的坑是只调温度不调权重,结果学生在教师不确定的地方学歪。

现象可能原因先查什么
学生与教师一致性高但绝对效果差教师在部分样本上本身就错抽检教师输出,看错误是否集中在同一类
训练早期就发散温度过高或软标签权重过大把温度调低、监督损失权重大幅上调再跑
整体涨但长尾不涨数据分布被头部主导按子类统计样本数,给长尾补量
效果接近基线没逼近教师学生容量太小或对齐层数过多先只做输出层蒸馏,砍掉中间层损失
  • 损失通常把蒸馏损失和原始标注的监督损失按权重相加,只用软标签容易在教师不确定处学歪
  • 学生容量太小时不要硬塞中间层对齐,先保证输出层蒸馏跑通再逐步加码
  • 容量差距过大时蒸馏收益会明显衰减,需要先判断是不是该换更大一点的底座
  • 训练中盯两个指标:学生与教师在同一批样本上的输出一致性,以及学生相对基线的绝对效果
  • 一致性涨而效果不涨,基本可以判定在抄教师的错,回去查数据而不是继续调参

验收与上线前该核对的清单

验收不要只看一个总指标。对照三组:原始小模型基线、蒸馏后学生、教师模型,看学生是缩小了和教师的差距,还是只是逼近了基线。前者说明有效,后者说明基本白干。

核对项看什么不达标怎么办
整体效果学生 vs 基线 vs 教师的差距变化差距没缩就回查数据质量和损失权重
分场景长尾类别、高频类别分开对比某一类塌了就针对性补样本重训
推理侧延迟、吞吐、显存占用实测效果达标但速度没省,回头调结构或换底座
一致性学生与教师输出的重合度重合度异常高要警惕过拟合教师噪声
  1. 跑三组对照在同一批固定测试集上测基线、学生、教师,记录差距变化,别用不同测试集对比
  2. 拆分子类按业务场景或标签分层统计,长尾类别单独拉出来看,整体持平常掩盖局部塌陷
  3. 实测推理部署到目标环境量延迟、吞吐、显存,效果达标但速度没省下来,要回头调结构
  4. 并行灰度蒸馏版与教师版并行跑一段,用线上反馈决定是否全量切,同时留好回退开关
下一步把你的教师模型和学生候选放进同一套对照里跑一遍,再决定要不要继续投入。选型和成本侧可以参考站内中转站的实测记录,能帮你少走一段弯路。

常见问题

蒸馏和微调到底有什么区别,能不能一起用?

微调是拿标注数据调参数,蒸馏是拿教师模型的输出当学习目标。两者不冲突,常见做法是先用教师造数据,再在这个数据上微调学生,等于把蒸馏当数据生产手段。如果你已经有高质量标注,微调往往更直接;标注稀缺而教师可用时,蒸馏更划算。

学生模型比教师小很多,蒸馏还有意义吗?

参数差距越大,学生能吸收的东西越少,收益衰减明显。差距过大时,优先考虑先蒸馏到一个中间规模、再对中间模型做量化或裁剪,分两步走比一步到位更稳。具体能压到多小,要看任务复杂度,建议先用小批数据试训一轮看趋势再决定。

蒸馏出来的模型效果不如预期,先查哪里?

按这个顺序排查:一看教师样本里有没有大量错答和格式噪声;二看软标签温度与损失权重是不是调得过激;三看学生容量是否根本不够;四看评测集本身是否和训练分布不一致。多数情况问题出在第一步,先抽样人工看数据比反复调参有效。

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