ai行业 大模型蒸馏 是推理 还是训练

模型与算力

讲清模型蒸馏到底算训练还是推理:拆开教师与学生两条链路,给出判断标准和自查步骤。

很多人第一次接触蒸馏会卡在一个朴素问题上:这是训练动作还是推理动作?看完介绍更糊涂——教师模型要跑前向、学生模型要更新权重,两边都占。这篇不绕弯,先把蒸馏拆成教师侧和学生侧两条链路,再说清哪部分是训练、哪部分是推理、什么时候会变成纯推理。适合看技术文章时被这个词绊住、想快速对齐概念的人。

先拆开:蒸馏里同时跑着两条链路

很多人问「蒸馏算推理还是训练」,其实问题本身就把一件事压扁了。一次完整的蒸馏任务里同时跑着两条链路:教师模型那条,学生模型那条。两条链路干的事完全不同,一个是前向出信号,一个是反向改权重。所以笼统回答「是训练」或「是推理」,都会漏掉一半。

链路权重状态主要计算本质
教师侧冻结,不更新只做前向,产出软标签或中间层输出推理
学生侧可训练,持续更新算损失、反向传播、更新权重训练
同一次任务两边同时存在前向喂信号 + 反向调参数训练与推理并存
软标签
教师前向输出的概率分布,比硬标签携带更多类别间的相对关系信息。
冻结权重
教师参数在整个蒸馏过程中不动,只被读取,不被优化器碰到。
反向传播
从损失出发往回求梯度,只有学生侧会走这一步,用来改自己的权重。
前向计算
输入进网络、逐层算出输出,不涉及梯度回传,训练和推理都会用到。
  1. 看谁在改权重翻一遍训练循环,看优化器绑定的是哪一方的参数。优化器动谁,谁就是被训练的那一方,另一方就是纯推理。
  2. 看信号从哪来确认教师输出是直接算出来的,还是带梯度的。冻结后它只当前向结果用,属于推理产物,不参与反向。
  3. 分口径回答被问「谁在学」就答训练,被问「谁在产出信号」就答推理。两个问题对应两条链路,别混成一个答案。

这套判断口径有个前提:教师确实是冻结的。有些做法会让教师也跟着微调,或者边训边更新教师,这时「教师侧=纯推理」就不成立。遇到这类变体,别直接套上面的表,回到「谁的权重被优化器改」这个最原始的标准去判断。

三分钟自查:你手上这件事算哪一类

不用背定义,拿你现在手头这件事按下面四个问题挨个过一遍,答案基本就清楚了。四个问题的顺序建议按「先看计算、再看交付、最后算账」来走,前两个定性质,后两个定预算,跳过任何一步都容易把账算歪。

自查问题偏训练的信号偏推理的信号
有没有反向传播和参数更新有梯度回传、有优化器在更新权重只有前向计算,不写回任何参数
教师模型是否参与本次计算教师在场、要跑它的前向,多一段算力教师已经离线跑完,本次不出现
你要交付什么一个新权重文件或新 checkpoint一个能响应请求的服务或接口
显存怎么算要额外放梯度、优化器状态、激活缓存主要放权重和 KV 缓存
  1. 第一步:翻代码里有没有 backward看这次任务的入口脚本,搜反向传播相关调用和优化器更新那几行。有,就是训练侧;一行都没有、只有前向和保存结果,就先归到推理侧。
  2. 第二步:确认教师模型在不在本次流程里教师参与本次计算,说明每条样本都要多跑一次它的前向,属于在线蒸馏,开销按推理叠加来估;教师只在离线阶段产过一次数据、之后不再出现,就是离线蒸馏,本次预算里不该再给它算一份。
  3. 第三步:把交付物写下来交付物是权重文件、适配器还是新 checkpoint,归训练侧;交付物是一个能回答请求的服务、接口或批处理脚本,归推理侧。交付物写不清楚,说明这件事本身还没定义好,先别急着估资源。
  4. 第四步:分开算两笔显存账训练侧要把权重、梯度、优化器状态、激活缓存一起算进去;推理侧主要看权重加上 KV 缓存随并发和上下文长度的增长。两笔账的公式不一样,别拿一个数字套两件事。
  • 四个问题里只要「反向传播」这一条是肯定的,基本就按训练侧来排期和估资源。
  • 教师参与本次计算不等于你在训练,它只是把推理开销叠加到了训练流程上。
  • 交付权重文件和交付一个服务,是两条完全不同的验收路径,别混着写需求。
  • 显存测算时,训练侧和推理侧各用各的公式,混用会低估训练、高估推理。
  • 拿不准的时候,先按推理侧起一个小规模验证,跑通再升级到训练侧。
下一步想看你这类任务在当前各家官方 API 下的成本口径和模型能力对照,去站内页面核对当时的数字,再决定要不要自己训。

放回大模型流水线里看位置

先把话说清楚:蒸馏不是推理时干的活。它是训练环节里的一步,而且有个前提——教师模型已经存在了。你得先有个训好的、表现够好的大模型,才能拿它的输出去教学生。所以它落在「预训练之后、部署之前」这段后训练区间,属于压缩手段的一种,和从零开始预训练完全不是一回事。

手段动了什么触发方式
蒸馏改的是权重从哪来,学生学教师的输出分布训练阶段,需要教师模型先就位
量化改的是数值精度,把权重和激活压到更低比特常在训练后做,也可训练时配合
剪枝改的是结构,把不重要的连接或通道去掉训练后或训练中都可做
微调改的是任务适配,用人工标注数据继续教训练阶段,标签由人给

注意上表里蒸馏和其他三个是可以叠着用的。先蒸馏出一个更小的学生,再对它做量化上部署,或者剪枝完再蒸馏补偿精度,都是常规组合。它们不互斥,别把它们当成四选一。至于各环节实际算力开销大概什么量级,到 按当时的公开资料核对,别用记忆里的数字下预算。

  • 蒸馏改的是权重来源:学生不是自己从头悟,而是跟着教师的输出走。
  • 量化改的是精度:模型结构基本不变,数值表示变粗了。
  • 剪枝改的是结构:真的把一部分参数或通道删掉。
  • 微调改的是任务方向:数据是人标的,目标是让模型贴合某个具体任务。
  • 蒸馏和微调都落在训练环节,区别只在于「谁来当老师」——一个是教师模型,一个是人工标注。

什么情况下这个区分不适用?如果教师模型本身还没训好,或者教师和学生差距太大,蒸馏可能拿不到你要的效果;这时候硬套「训练阶段压缩」的框架没意义,得先回去把教师练扎实。所以判断顺序是:先确认教师够格,再谈蒸不蒸。

常见问题

一句话回答:大模型蒸馏到底是训练还是推理?

对做蒸馏的人来说是训练——你要更新学生模型权重;对教师模型来说是推理——它只跑前向、不更新。所以更准确的说法是:蒸馏是一个包含推理环节的训练流程。如果你只是拿别人蒸馏好的模型来跑,那你这边全是推理。

只做离线蒸馏,教师还占算力吗?

占,但只占一次。软标签缓存好之后,训练阶段反复读缓存即可,不用再把教师跑一遍。代价是缓存体积可能很大,而且要提前确定数据规模,中途换数据就得重跑教师,适合数据集固定的场景。

蒸馏和量化、微调该按什么顺序做?

常见顺序是先蒸馏拿到更小的学生权重,再微调补任务能力,最后量化压到目标显存。反过来也能做,但量化和蒸馏叠加后精度损失不好归因,排查会变麻烦。具体档位的取舍可以到站内的模型量化页面看当时的对照说明。

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