1. 大模型蒸馏到底是什么:从“老师教学生”说起
1.1 一个生活化类比:为什么需要蒸馏
想象你是一位带过多年毕业班的特级教师,脑子里装满了二十年的教学经验、解题套路、易错点预判。现在学校要开一个新班,但不可能让这位特级教师去教每一个学生,精力不够,成本也太高。怎么办?让特级教师把自己的经验整理成一套精编讲义,交给一位年轻老师,年轻老师照着讲义去教,虽然不如特级教师本人那么灵活,但应付大多数场景已经绰绰有余。
大模型蒸馏就是这个逻辑。教师模型是那个特级教师,参数量大、能力强、推理慢、部署贵;学生模型是那个年轻老师,参数量小、速度快、成本低,但通过模仿教师模型的输出,能在特定任务上达到接近教师的效果。
这里有个关键点很多人容易搞混:蒸馏不是简单的“复制粘贴”或者“压缩文件”。它不是把大模型的文件体积变小,而是让小模型学会大模型的行为模式。就像年轻老师不是把特级教师的脑子切一半装到自己头上,而是学会了特级教师的解题思路和判断逻辑。
1.2 蒸馏和微调的区别,别搞混了
经常有人问我:“蒸馏和微调是不是一回事?”不是。虽然它们都涉及“用数据去训练一个模型”,但目标和方法完全不同。
微调是拿一个已经预训练好的模型,用特定领域的数据继续训练,让它适应某个垂直场景。比如你拿一个通用大模型,用医疗问答数据微调,让它变成医疗助手。微调的对象通常就是你自己要用的那个模型。
蒸馏则是有一个明确的“教师-学生”结构。教师模型通常是更大的、更强的模型,学生模型是更小的、你要实际部署的模型。训练数据可能来自教师模型的输出(这叫软标签),也可能结合真实标签(硬标签)。蒸馏的核心目的是能力迁移,把大模型的本事转移到小模型身上。
打个比方:微调像是让一个已经会开车的人去学开卡车,他本来就有驾驶基础,只是适应新车型;蒸馏像是让一个刚拿驾照的新手,跟着一位老司机学,老司机把自己遇到各种路况的处理方式都教给新手。
1.3 为什么Kimi事件让蒸馏成了热词
Kimi作为国内头部大模型产品,用户量巨大,API调用量也很高。当有消息传出某些模型可能涉及蒸馏操作时,整个圈子都炸了。原因很简单:如果蒸馏技术被滥用,可能涉及知识产权、服务条款、甚至商业竞争层面的问题。
但抛开争议不谈,这件事给所有用AI的人提了个醒:你调用的API背后,可能不完全是那个“原汁原味”的大模型。它可能是蒸馏后的版本,可能是多个模型的混合路由,也可能是经过大量微调的变体。理解蒸馏,就是理解你用的AI到底是怎么来的。
对于开发者来说,这意味着你在选型时要多问一句:这个API背后的模型是原生的还是蒸馏的?蒸馏后的能力边界在哪里?对于普通用户来说,这意味着你对AI输出的预期要更理性:它可能在某些任务上很强,在另一些任务上突然变笨,这很可能就是蒸馏带来的能力不均衡。
2. 蒸馏的核心技术路线:三种主流方案拆解
2.1 软标签蒸馏:让学生学会“犹豫”
传统的监督学习用的是硬标签,比如一张图片要么是猫要么是狗,标签是确定的。但教师模型在预测时,输出的往往是一个概率分布。比如对于一张模糊的图片,教师模型可能给出:猫 0.7,狗 0.2,狐狸 0.1。这个分布包含了丰富的信息——教师模型知道这张图有点像狗,也有点像狐狸,只是最像猫。
软标签蒸馏就是让学生模型去拟合这个概率分布,而不是只拟合最终的类别。这样做的好处是学生模型能学到类间的相似性关系,泛化能力更强。
在实际操作中,通常会用一个温度参数T来平滑概率分布。T越大,分布越平滑,学生能学到的“暗知识”越多;T越小,分布越尖锐,接近硬标签。一般T取2到5之间比较常见。
# 软标签蒸馏的损失函数核心逻辑(PyTorch风格伪代码) import torch import torch.nn.functional as F def distillation_loss(student_logits, teacher_logits, labels, T=3.0, alpha=0.7): # 软标签损失:学生和教师在高温下的输出分布要接近 soft_loss = F.kl_div( F.log_softmax(student_logits / T, dim=1), F.softmax(teacher_logits / T, dim=1), reduction='batchmean' ) * (T * T) # 硬标签损失:学生还要对真实标签负责 hard_loss = F.cross_entropy(student_logits, labels) # 加权组合 return alpha * soft_loss + (1 - alpha) * hard_loss这里有个细节:软标签损失乘以了T的平方。这是因为在求梯度时,softmax的导数会带一个1/T的因子,乘以T平方是为了让软标签和硬标签的梯度量级保持一致。这个技巧在Hinton那篇开山论文里就提到了,但很多复现的人会漏掉。
2.2 特征蒸馏:不只看输出,还要看中间过程
软标签蒸馏只关注教师模型的最终输出,但教师模型的中间层特征其实也包含了大量有用信息。特征蒸馏就是让学生模型的中间层表示去逼近教师模型的中间层表示。
这就好比年轻老师不仅学特级教师的最终答案,还要学他解题时的草稿纸——怎么审题、怎么列提纲、怎么排除错误选项。草稿纸上的过程往往比最终答案更有教学价值。
特征蒸馏的难点在于,教师和学生的网络结构可能不同,中间层的维度对不上。常见的做法是加一个适配层,把学生的特征投影到和教师相同的维度,然后再计算损失。适配层通常是一个简单的全连接层或者卷积层。
在实际工程中,特征蒸馏对超参很敏感。哪一层对齐、用什么距离度量、损失权重给多少,都需要反复实验。我见过不少团队在这一步上花了几周时间调参,最后发现只对某一层做蒸馏效果最好。
2.3 黑盒蒸馏:只有API,没有内部结构
前面两种方法都需要拿到教师模型的内部结构或至少是logits输出。但现实中,很多强模型只提供API,你只能拿到最终的文本结果,拿不到概率分布。这就是黑盒蒸馏的场景。
黑盒蒸馏的做法是:用教师模型生成大量输入-输出对,然后用这些数据去训练学生模型。本质上变成了一个数据增强+监督学习的过程。教师模型在这里扮演的是一个“数据标注器”的角色。
这种方法的局限性很明显:你只能学到教师模型“说了什么”,学不到它“怎么想的”。而且如果教师模型在某些问题上回答错了,学生模型会把错误也学过去。所以黑盒蒸馏通常需要配合数据过滤和清洗,把低质量或错误的样本剔除掉。
Kimi事件中涉及的可能就是这类黑盒蒸馏的争议——用某个模型的API输出作为训练数据,去训练另一个模型。这在技术上是可行的,但在商业和伦理层面存在灰色地带。
2.4 MoE架构下的蒸馏:更复杂的游戏
现在很多大模型采用MoE架构,比如DeepSeek系列、Mixtral等。MoE的核心思想是:模型由多个“专家”子网络组成,每次推理只激活其中一部分专家。这样做的好处是参数量可以做得很大,但实际计算量可控。
在MoE架构下做蒸馏,复杂度会上升一个量级。因为教师模型对不同输入会路由到不同的专家,学生模型要学的不仅是专家的输出,还有路由器的决策逻辑。如果学生模型也是MoE,那就要对齐专家数量和路由策略;如果学生是稠密模型,那就要想办法把多个专家的能力压缩到一个网络里。
目前业界对MoE蒸馏的探索还在早期,没有特别成熟的方案。一个常见的做法是专家聚合:把教师模型多个专家的输出做加权平均,作为学生模型的学习目标。但这样会丢失专家之间的差异性,效果往往不如预期。
3. 实操:从零搭建一个蒸馏流程
3.1 环境准备与工具选型
先说环境。蒸馏对算力的要求取决于教师和学生的规模。如果教师是7B级别,学生是1B级别,一张24G显存的卡基本够用。如果教师是70B级别,那至少需要多卡或者用LoRA之类的轻量方案。
工具方面,我习惯用HuggingFace的Transformers做模型加载和推理,用PyTorch做训练循环。如果要做大规模蒸馏,DeepSpeed或FSDP可以帮你把显存省下来。数据管理用Datasets库,实验跟踪用WandB或者TensorBoard。
# 基础环境安装(以CUDA 12.1为例) pip install torch==2.1.0 --index-url https://download.pytorch.org/whl/cu121 pip install transformers==4.36.0 datasets==2.15.0 accelerate==0.25.0 pip install deepspeed==0.12.0 wandb注意:版本兼容性是个大坑。Transformers和PyTorch的版本要匹配,DeepSpeed对CUDA版本也有要求。建议先用conda创建一个干净的环境,别在系统Python里直接装。
3.2 数据准备:蒸馏的燃料
蒸馏的数据质量直接决定学生模型的上限。数据来源通常有三种:
第一种是用教师模型对无标注数据做推理,生成软标签或硬标签。这是最常用的方式,成本低、覆盖广。但要注意,教师模型在分布外数据上的输出可能不可靠,需要做置信度过滤。
第二种是直接用现有的标注数据,同时让教师模型也跑一遍,得到教师输出和学生输出的配对。这种方式适合有高质量标注的场景。
第三种是混合策略:一部分数据用真实标签,一部分用教师标签,按比例混合。这样既能保证学生不偏离真实分布,又能学到教师的“暗知识”。
数据量方面,我的经验是:对于文本分类任务,每个类别至少500到1000条蒸馏数据;对于生成任务,至少需要几万到几十万条对话或指令数据。数据太少,学生学不到教师的泛化能力;数据太多,训练成本会失控。
3.3 训练配置:温度、权重和学习率
蒸馏训练有几个关键超参需要仔细调:
温度T:控制软标签的平滑程度。T=1时就是普通的softmax,T越大分布越平滑。对于分类任务,T取2到5比较常见;对于生成任务,T取1到2就够了,因为生成任务的输出空间太大,过度平滑反而会引入噪声。
损失权重alpha:控制软标签损失和硬标签损失的比例。alpha=0.7意味着70%的权重给软标签,30%给硬标签。如果教师模型很强且数据质量高,alpha可以调大;如果教师模型在某些任务上不可靠,alpha要调小。
学习率:蒸馏训练的学习率通常比从头训练小一个量级。因为学生模型是在模仿教师,不需要太大的步长去探索。一般从1e-5到5e-5之间开始试,用余弦退火或者线性衰减。
批次大小:在显存允许的前提下尽量大一些,因为蒸馏的损失函数对批次内的统计量比较敏感。如果显存不够,可以用梯度累积来模拟大批次。
# 训练循环的核心配置示例 training_args = { "learning_rate": 2e-5, "per_device_train_batch_size": 8, "gradient_accumulation_steps": 4, # 等效批次大小32 "num_train_epochs": 3, "warmup_ratio": 0.1, "lr_scheduler_type": "cosine", "temperature": 3.0, "alpha": 0.7, "max_grad_norm": 1.0, }3.4 训练过程监控与调优
蒸馏训练最容易出现的问题是学生模型学偏了。表现是:在训练集上损失降得很低,但在验证集上效果很差。这通常是因为学生过度拟合了教师的软标签,而教师的软标签在训练集上可能有过拟合。
监控指标除了常规的损失和准确率,我建议额外关注两个:
一是教师-学生一致性:学生输出和教师输出在验证集上的KL散度。如果这个值在训练后期反而上升,说明学生开始偏离教师了。
二是学生-真实标签准确率:学生模型在真实标签上的表现。如果这个指标远低于教师,说明蒸馏没有把教师的核心能力传过来。
调优策略方面,如果发现学生学偏了,可以尝试:降低alpha、增大温度T、增加硬标签的权重、或者对教师输出做置信度过滤,只保留高置信度的样本。
4. 蒸馏的边界与风险:每个用AI的人都该知道的事
4.1 蒸馏不是万能的:能力天花板在哪里
蒸馏有一个根本性的限制:学生模型的能力上限受教师模型约束。学生可以接近教师,但很难超越教师。如果教师模型在某些任务上本来就弱,学生只会更弱。
而且蒸馏过程中会有信息损失。就像复印机复印出来的文件,清晰度永远不如原件。教师模型的某些细微能力,比如对长尾知识的掌握、对复杂推理的稳定性,在蒸馏后往往会打折扣。
实测数据也支持这个判断。在一些公开的蒸馏实验中,学生模型在常规任务上能达到教师90%到95%的效果,但在需要多步推理、数学计算、代码生成等复杂任务上,往往只能达到70%到80%。这个差距在关键业务场景中可能是致命的。
4.2 法律与合规:蒸馏的灰色地带
蒸馏本身是一种技术手段,但使用蒸馏的方式可能涉及法律和合规问题。
如果你用某个商业模型的API输出作为训练数据,去训练自己的模型,这可能违反该模型的服务条款。大多数商业API都明确禁止用其输出训练竞争模型。Kimi事件之所以引发关注,就是因为涉及了这方面的争议。
对于企业用户来说,我的建议是:在蒸馏之前,先仔细阅读教师模型的使用协议。如果协议禁止蒸馏,那就不要碰。如果协议允许,也要保留好数据来源和训练过程的记录,以备合规审查。
对于个人开发者来说,用开源模型做蒸馏通常没有法律风险,但也要注意开源协议的具体条款。有些开源模型只允许研究用途,不允许商业使用。
4.3 蒸馏后的模型评估:别只看跑分
蒸馏完成后,怎么判断学生模型能不能用?很多人只看几个标准benchmark的跑分,这远远不够。
我的经验是,至少要做四层评估:
第一层是标准benchmark,比如MMLU、C-Eval、GSM8K等,看学生模型在通用能力上的表现。这层是门槛,过不了就不用往下看了。
第二层是业务场景测试,用你自己业务中的真实数据做测试。标准benchmark再高,业务场景不行也是白搭。
第三层是边界测试,专门测试学生模型在教师模型弱项上的表现。如果教师模型在某个任务上本来就不行,学生模型大概率也不行,你要提前知道这个边界在哪里。
第四层是对抗测试,用一些精心构造的输入去试探学生模型的稳定性。蒸馏后的模型往往在对抗样本上更脆弱,因为它的决策边界可能被软标签“平滑”掉了。
4.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方向 | 解决方案 |
|---|---|---|---|
| 学生损失下降但验证效果差 | 过拟合教师软标签 | 检查教师-学生一致性 | 降低alpha,增大T,增加硬标签权重 |
| 学生输出重复或退化 | 温度过低或数据单一 | 检查输出分布熵 | 提高温度,增加数据多样性 |
| 训练不稳定,损失震荡 | 学习率过大或批次太小 | 检查梯度范数 | 降低学习率,增大批次或梯度累积 |
| 学生模型推理速度没提升 | 学生模型结构没变 | 检查参数量和计算量 | 确认学生模型确实比教师小 |
| 某些任务上学生远差于教师 | 教师在该任务上本身弱 | 单独评估教师表现 | 对该任务单独微调或补充数据 |
| 蒸馏后模型输出风格突变 | 软标签温度不匹配 | 对比教师和学生输出 | 调整温度,加入风格对齐损失 |
5. 蒸馏之外:大模型能力迁移的其他路径
5.1 量化:另一种“变小”的思路
蒸馏是把大模型的能力转移到小模型上,量化则是把大模型的参数精度降低,从而减少存储和计算开销。两者经常被混淆,但思路完全不同。
量化是把FP16的权重变成INT8甚至INT4,模型结构不变,只是数值精度降低。好处是部署成本大幅下降,坏处是精度会有损失。对于大多数场景,INT8量化的精度损失在1%以内,基本可以接受;INT4量化损失会大一些,但在某些任务上仍然可用。
量化和蒸馏可以结合使用:先蒸馏得到一个较小的学生模型,再对学生模型做量化,进一步降低部署成本。这是目前工业界比较常见的组合拳。
5.2 剪枝:去掉不重要的连接
剪枝的思路是:神经网络中有大量冗余参数,把不重要的连接去掉,模型变小但能力基本保留。剪枝可以分为结构化剪枝和非结构化剪枝。结构化剪枝直接去掉整个神经元或注意力头,硬件友好;非结构化剪枝去掉单个权重,压缩率高但需要特殊硬件支持。
剪枝和蒸馏也可以结合:先剪枝得到一个稀疏模型,再用蒸馏把教师的能力补回来。这样既能压缩模型,又能保持效果。
5.3 数据蒸馏:让训练数据更精炼
除了模型蒸馏,还有数据蒸馏。思路是:用大模型生成大量数据,然后从中筛选出最有价值的样本,用小模型去训练。这样可以用更少的数据达到更好的效果。
数据蒸馏的关键是筛选策略。常见的方法有:基于置信度筛选、基于多样性筛选、基于影响力函数筛选。我试过用教师模型的困惑度来筛选数据,保留那些教师“犹豫”的样本,效果比随机采样好不少。
6. 我踩过的坑和实操心得
6.1 温度参数不是越大越好
刚开始做蒸馏的时候,我看论文里说温度越大软标签越平滑,信息越丰富,就直接把T设成了10。结果学生模型训练出来输出非常“平均”,每个类别的概率都差不多,完全没有区分度。
后来才明白,温度太大会把教师模型本来就不确定的样本变得更加模糊,学生学到的是噪声而不是知识。对于分类任务,T=3左右是个比较稳妥的起点;对于生成任务,T=1.5到2就够了。
6.2 教师模型的选择比学生模型更重要
很多人把精力花在调学生模型的结构上,却忽略了教师模型的选择。我的经验是:教师模型不一定要选最大的,但要选在目标任务上最强的。
比如你要蒸馏一个代码生成模型,那就选代码能力最强的教师,哪怕它参数量不是最大的。教师在该任务上的上限,决定了学生的天花板。选错了教师,后面怎么调都是事倍功半。
6.3 数据清洗比训练调参更值得投入
蒸馏数据里如果混入了低质量样本,学生模型会把这些错误也学过去。我见过一个案例:教师模型在某个类别的标注上有系统性偏差,学生模型把这个偏差放大了,导致该类别的准确率比教师还低。
所以我现在做蒸馏,至少花30%的时间在数据清洗上。具体做法包括:用多个教师模型交叉验证、人工抽检低置信度样本、对输出做规则过滤。这些工作看起来枯燥,但回报很高。
6.4 别指望一次蒸馏就成功
蒸馏是一个迭代过程。第一轮蒸馏出来的学生模型,通常只能达到教师70%到80%的效果。然后你需要分析差距在哪里,补充数据、调整损失权重、修改学生结构,再做第二轮、第三轮。
我做过一个项目,前后蒸了五轮,每轮都有提升,最后一轮才达到可上线的标准。所以如果你第一次蒸馏效果不理想,别灰心,这是常态。
6.5 评估要贯穿始终
从数据准备阶段就要开始评估。教师模型在验证集上的表现、蒸馏数据的质量分布、学生模型每轮的进步曲线,这些都要持续跟踪。
我习惯用WandB记录所有实验,每个实验的配置、数据版本、评估结果都存档。这样当某个模型效果好的时候,我能快速回溯到是哪个配置起了作用。没有这套记录系统,蒸馏实验很容易变成“玄学调参”。
7. 蒸馏技术的未来走向
7.1 从单教师到多教师
早期的蒸馏都是从一个教师模型学。现在越来越多的研究在做多教师蒸馏:从多个不同架构、不同能力的教师模型同时学,学生模型综合各家之长。
多教师蒸馏的难点在于如何融合多个教师的输出。简单平均往往不是最优的,因为不同教师在不同样本上的可靠性不同。现在有一些方法用注意力机制来动态加权多个教师的输出,效果比固定权重好。
7.2 自蒸馏与在线蒸馏
自蒸馏是让模型自己教自己:用模型自己的输出作为软标签,再训练一遍。听起来有点奇怪,但实测有效。因为模型在训练过程中会逐渐变得更自信,用后期的输出教前期的自己,能起到正则化的作用。
在线蒸馏则是教师和学生同时训练,教师也在更新。这种方式适合教师模型也在持续优化的场景,但训练稳定性是个挑战。
7.3 蒸馏与强化学习的结合
最近有一些工作把蒸馏和强化学习结合起来:用教师模型的输出作为奖励信号,让学生模型通过强化学习去逼近教师的行为。这种方式在生成任务上表现不错,因为生成任务的输出空间太大,传统的软标签蒸馏不好直接套用。
不过这条路还在早期,工程上不太成熟。如果你现在要做蒸馏,还是建议从经典的软标签蒸馏入手,稳定可靠。
8. 给不同角色的实操建议
8.1 如果你是普通AI用户
你不需要自己动手做蒸馏,但你需要知道:你用的AI产品可能经过了蒸馏。这意味着它在某些任务上可能不如宣传的那么强,在某些任务上可能突然变弱。遇到这种情况,不要急着骂产品,先想想是不是蒸馏带来的能力不均衡。
另外,如果你在用多个AI产品,可以对比它们在相同任务上的表现。如果某个产品在某些任务上明显弱于其他产品,很可能就是蒸馏导致的。
8.2 如果你是开发者
选型的时候多问一句:这个API背后的模型是原生的还是蒸馏的?如果是蒸馏的,教师是谁?蒸馏数据是什么?这些问题能帮你判断这个API的能力边界。
如果你自己要部署模型,蒸馏是一个值得考虑的方案。但要做好心理准备:蒸馏不是一键操作,需要数据、算力、调参的持续投入。
8.3 如果你是企业决策者
蒸馏可以帮你降低推理成本,但不要只看成本。蒸馏后的模型在关键业务场景上的表现,需要单独评估。有些场景下,蒸馏带来的效果损失可能超过成本节省。
另外,合规问题要提前考虑。用商业API的输出做蒸馏,可能涉及法律风险。建议在法务确认后再推进。
8.4 如果你是研究者
蒸馏还有很多开放问题:如何蒸馏MoE模型、如何做跨模态蒸馏、如何保证蒸馏后的模型在分布外数据上的鲁棒性。这些都是有价值的方向。
但做研究的时候要注意:蒸馏的实验成本不低,建议先从小的教师-学生组合开始验证想法,再扩展到大规模模型。
9. 一个完整的蒸馏项目复盘
9.1 项目背景与目标
去年我参与了一个文本分类的蒸馏项目。教师是一个13B的通用大模型,在分类任务上经过微调,准确率92%。学生是一个1.5B的小模型,目标是达到教师90%以上的准确率,同时推理速度提升5倍以上。
数据方面,我们有50万条无标注文本,覆盖20个类别。教师模型对这50万条数据做推理,生成软标签。然后从中筛选出30万条高置信度样本作为蒸馏数据。
9.2 训练配置与过程
学生模型用1.5B的预训练模型初始化,加了一个分类头。训练配置:T=3,alpha=0.7,学习率2e-5,批次大小32,训练3个epoch。
第一轮训练后,学生模型在验证集上的准确率是84%,距离目标还有差距。分析发现,学生模型在几个长尾类别上表现特别差,准确率只有60%左右。
9.3 问题排查与优化
排查后发现两个问题:一是长尾类别的蒸馏数据太少,教师模型在这些类别上的输出也不够自信;二是软标签在这些类别上过于平滑,学生学不到区分度。
解决方案:对长尾类别做数据增强,用教师模型生成更多相关样本;同时对这些类别降低温度T到1.5,让软标签更尖锐。第二轮训练后,长尾类别的准确率提升到78%,整体准确率到了89%。
第三轮继续优化:加入特征蒸馏,让学生模型的中间层去对齐教师模型的中间层。这一轮提升不大,整体到了90%,但训练时间增加了40%。权衡后,我们决定不采用特征蒸馏,保持纯软标签蒸馏的方案。
9.4 最终效果与上线
最终学生模型在验证集上的准确率是90.2%,达到了教师的98%。推理速度方面,学生模型比教师快了6倍,显存占用从24G降到了4G。上线后,线上准确率稳定在89%左右,略低于验证集,但在可接受范围内。
这个项目让我深刻体会到:蒸馏不是一次性的工作,而是一个持续迭代的过程。每一轮优化都需要分析、实验、验证,没有捷径。
10. 蒸馏技术的常见误区澄清
10.1 蒸馏不等于压缩
很多人把蒸馏和模型压缩混为一谈。蒸馏是一种训练方法,压缩是一种部署优化。蒸馏得到的学生模型可能比教师小,也可能和教师一样大(只是结构不同)。压缩则是明确要减小模型体积。
你可以用蒸馏来得到一个更小的模型,也可以用蒸馏来得到一个同样大小但能力更专精的模型。蒸馏的目标是能力迁移,不是单纯的体积压缩。
10.2 蒸馏不是“偷”能力
从技术角度,蒸馏是一种合法的模型训练方法。但从商业和伦理角度,用别人的模型输出训练自己的模型,可能涉及知识产权问题。这两件事要分开看。
技术社区对蒸馏的态度是开放的,因为这是推动AI进步的重要手段。但商业公司对蒸馏的态度是谨慎的,因为涉及竞争和合规。作为从业者,要清楚这两者的边界。
10.3 蒸馏后的模型不一定更快
学生模型比教师小,理论上推理更快。但如果学生模型的结构没有针对硬件优化,实际速度可能提升有限。比如一个1.5B的稠密模型,如果没有做算子融合和量化,推理速度可能只比13B的教师快2到3倍,而不是理论上的8到9倍。
所以蒸馏之后,通常还要配合量化、算子优化等工程手段,才能把速度优势充分发挥出来。
10.4 蒸馏不是一次性的
教师模型会更新,数据分布会变化,业务需求会演进。蒸馏出来的学生模型也需要持续维护和更新。我见过一些团队,蒸馏完一个模型就放在那里不管了,半年后发现效果下降了很多,因为线上数据分布已经变了。
建议把蒸馏纳入MLOps流程,定期用新数据重新蒸馏,或者至少做持续微调。这样才能保证学生模型的效果不随时间衰减。
11. 写在最后:一些个人体会
做蒸馏这几年,最大的感受是:蒸馏是一门实验科学,不是理论科学。论文里的公式和算法只是起点,真正决定效果的往往是数据质量、超参调优、工程细节这些“脏活累活”。
我见过太多人拿着论文复现,发现效果差很远,然后就放弃了。其实不是方法不对,而是论文里没写的那些细节——数据怎么洗、温度怎么调、学习率怎么设——才是关键。
另外,蒸馏不是孤立的技术。它和量化、剪枝、微调、强化学习都有结合点。实际项目中,往往需要多种技术组合使用,才能达到最优的效果。
最后说一句:如果你刚开始接触蒸馏,建议从一个小项目做起。找一个你熟悉的教师模型,准备一批干净的数据,跑通整个流程。不要一上来就搞70B到7B的大规模蒸馏,那样很容易在工程细节上卡住,打击信心。
先跑通,再优化,最后规模化。这个顺序不能乱。