
“7家中国公司被点名‘蒸馏’”——这个说法在圈子里炸锅的那几天我正好卡在一个模型压缩项目的调参环节上。说实话看到新闻标题我心里咯噔一下蒸馏这项技术我从2019年就一直在用怎么一夜之间就变成了“偷”的代名词先把技术账算清楚。“蒸馏”这个叫法出自Hinton等人在2015年提出的知识蒸馏框架。它本身是大模型落地里再正常不过的压缩手段让一个小模型去模仿一个大模型的输出把大模型的能力浓缩进小模型里实现减参数、降延迟、保精度的效果。这个思路和学界的模型压缩、工业界的部署优化完全是一条线。而新闻里被点名的7家中国公司被指控的问题恰恰不在“蒸馏”本身而在“隔着API偷偷蒸馏闭源模型”这件事上——这就把一个中性技术推到了版权、服务条款和商业伦理的风口浪尖。这篇文章我想跟你掰扯清楚三件事蒸馏到底蒸的是什么、黑盒蒸馏为什么会被钉在“偷”的柱子上、以及作为一个做落地工程的人我们该怎么合规地把蒸馏跑通。不管你是刚入门大模型的小白还是已经在做微调、部署的一线工程师这十分钟读下来应该能把“蒸馏”这词的里子看穿。1. 先搞清楚蒸馏到底“蒸”的是什么1.1 从一篇2015年的论文说起知识蒸馏这个概念的源头是Hinton、Oriol Vinyals和Jeff Dean在2015年发表的论文《Distilling the Knowledge in a Neural Network》。当时这篇论文解决的问题很朴素大模型效果虽好但部署成本太高能不能让一个参数少得多的小模型学到大模型的能力他们的答案是别只学大模型的最终结论要学大模型在给出结论前的那份“犹豫”。怎么理解这份“犹豫”分类任务里一个模型对一张图片的预测不只是“猫”还是“狗”而是一个概率分布猫0.7、狗0.2、鸟0.1。这个分布里藏着大量额外信息——它说明这张图“更像猫但也带点狗的特征”。如果只拿硬标签0或1去教小模型等于丢掉了这些细微知识如果拿软标签概率分布去教小模型就能学到类别之间的模糊关系和相似性。为了实现“软标签”论文引入了一个温度参数T把softmax改写成softmax(z_i / T)T1时就是标准softmaxT越大输出分布越平滑模型对不同类别的“偏好”被摊得越开呈现出来的是一种更柔和的“知识地图”。训练时通常用T4左右的温度让teacher模型“放话”再让小模型在同样的温度下对齐这个分布。2015年的框架最初用在图像分类和语音识别上后来的十多年里这套思路被一路放大到了大语言模型从学logits到学hidden states再到学生成文本的概率流。大模型时代的“蒸馏”本质上就是把这个老师教学生的过程搬到了参数规模更大的舞台上。1.2 三种蒸馏路线三种不同的“偷法”圈内聊蒸馏通常会按“你能拿到老师的什么”来分路线。这个分野也是理解这次风波的关键。路线你手里有什么典型做法合规风险白盒蒸馏teacher模型的权重、logits、hidden states直接读运行时的logits做KL散度对齐低前提是teacher权重许可允许蒸馏黑盒蒸馏只能调API拿模型返回的文本或概率构造海量输入收集API输出再用这些数据训练/微调自己的模型高通常违反API服务条款数据蒸馏teacher生成的高质量文本数据让大模型写指令、写解答把语料拿去训练中取决于数据和生成模型的版权约定白盒蒸馏是学界研究最充分、工业落地最安全的一条路。你拥有teacher的权重就意味着你清楚它的计算公式、激活值和损失函数可以逐层计算蒸馏损失甚至做token级别的对齐。缺点是前置条件高没有权重一切都免谈。黑盒蒸馏则是这次“7家被点名”事件的核心场景。简单说就是人家不开源你只能通过付费API去调用正常情况下你调用一次API拿到一个结果用于自己的业务这没问题但如果你把海量API返回值搜集起来当成训练数据去训练自己的大模型这就越界了。这在技术圈内还有一个更直白的叫法——“借用”。借的是别人模型的思考过程还的是自己模型的参数空间。数据蒸馏则处在一个灰色地带。用合法调用的生成模型产出数据再裁剪、筛选、拼接成训练集这种事在数据匮乏的领域非常普遍但“生成内容的版权归谁”“能不能用来训练同类模型”各家平台的服务条款里画线画得越来越细。这次被点名的公司里有些被质疑的操作路径就是“API输出→数据清洗→模型微调”只不过外界把它统称为蒸馏。把三条路线摆在一起看结论就清晰了蒸馏本身无所谓善恶关键是你拿什么当老师、又有没有获得授权。用开源模型蒸馏天经地义隔着API蒸馏闭源模型踩线拿别人平台的生成数据回去养自己的竞品重踩。2. 被点名“偷走”的三种东西能力、数据与信任2.1 模型能力从输出分布里“猜”解题思路被新闻用“偷走”这个词描述的首先是一种能力闭源模型花了大价钱训练出来的本事。可这里有个技术事实得说破黑盒蒸馏偷不走权重偷不走参数也偷不走训练时候的内部特征。它真正偷走的是模型的“行为分布”。模型的能力本质上是一个条件概率分布给一个输入x模型输出y的概率p(y|x)。这个分布在训练完成后就固定下来了API每次返回的文本本质上是从这个分布里采样出来的样本。黑盒蒸馏的套路是用海量输入去“采样”这个分布我问你一千万个问题把你每个问题的输出记下来这些输出就成了一个采样过的分布近似。我的小模型不直接看你的代码和参数只拟合这批采样结果就能在行为上贴近你。打过比方就是纸面考试的答案你抄不到但你观察到一个学霸面对一千道题时的所有反应就能反推出他大概的解题套路。注意是“套路”不是“能力”两者之间有一道跳不过去的坎——你的模型仍然受限于自身参数规模和数据容量。业界把这称为“能力上限”蒸馏模型在行为上再像老师也不可能超过老师本身。它学到的是老师在该分布覆盖范围内的作答风格和推理倾向而不是老师内部涌现出来的真正推理机制。这点和“偷代码再跑一遍”有本质区别但在商业层面这区别已经不重要了——如果你的模型在用户界面上的表现和某个闭源模型惊人地相似用户不会关心你是蒸馏还是独立研发只会觉得“这俩是一个东西”。2.2 数据价值API输出的背后是大量人工标注“偷走能力”之后更值钱的是偷走数据。很多人忽略了一件事闭源大模型的输出里嵌入了大量比普通互联网语料昂贵得多的数据劳动。今天的大模型普遍要做对齐训练也就是用人类反馈去校准模型的回答偏好。这些人工反馈数据是几千人花数十万小时标注出来的——哪些回答安全、哪些回答专业、哪些回答符合价值观。经过这一层对齐后模型给出的回答本身就携带了“什么是对的、什么是好的”的偏好信息。你用API批量抓取它的输出再把输出拿去蒸馏等于直接跳过了昂贵的人工对齐环节白嫖了几十万小时的标注成本。我见过一个更生动的类比有人花费三年时间建设一座文化展馆把文物、展板、动线全部精心设计好另一个人不去买票进场参观而是站在馆外用长焦镜头逐面墙扫描拍照回去之后重新搭建了一座几乎一样的小型复制馆。你说他偷了什么他没有搬走任何一件实物但三年积累的策展理念、组合方式、细节偏好全被一次性打包带走了。这就是为什么技术圈普遍反感“黑盒蒸馏闭源模型”你偷的不只是一个模型的“答案”而是支撑那个答案背后的数据体系。尤其对于闭源模型公司靠API售卖服务数据积累和用户反馈循环是一道商业护城河。蒸馏等于在护城河上架了一座桥而且是绕过了收费站的那种。2.3 信任与规则服务条款为什么要管“蒸馏”接下来要说的是这次事件里最容易被吃瓜群众忽略的一环——服务条款。主流闭源模型的API用户协议里基本都明文禁止“使用API输出开发与平台竞争的模型、训练竞品模型、或提取高价值信息用于大规模再训练”。换句话说闭源厂商从一开始就在合同层面堵死了蒸馏这条路。这项条款的初衷并不难理解API是按次收费的商业服务你成千上万次调用把结果用于训练另一个模型这在商业逻辑上等于把别人的付费产品变成了你的免费训练集。为什么平台仿佛“能发现”被蒸馏因为输出行为本身带有模式指纹。一个模型在语感、措辞、标点习惯、错误模式上都有自己独特的统计偏好。如果你的模型在大量测试集上的输出概率分布与某个闭源模型高度重合超过正常独立研发可能达到的范围就足以引发怀疑。近半年主流平台还加强了输出侧的水印和检测机制某些API返回结果里甚至加入了细不可察的模式标记目的就是做数据溯源。这里必须多说一句我相信大多数一线团队并不会刻意去做违规蒸馏但很多初学者在不知情的情况下踩过线——比如下载了一个“热心网友”爬取的API生成数据集直接拿去微调。最终被点名的7家公司具体事实如何我们缺乏一手信息但整个行业的共识已经达成开发者在选用训练数据时必须把“数据来源是否合规”当作第一优先级而不是等到被发函、被下架之后再亡羊补牢。3. 实操视角一次合规的蒸馏是怎么跑通的3.1 选teacher模型合规开源是第一原则如果说这波风波给从业者最大的启示那就是做蒸馏请务必选择有权使用的teacher。我自己在实际项目中已经全面转向“开源teacher白盒蒸馏”路线原因不只是合规还有工程上的切实好处。首先开源模型权重在你手里蒸馏性能远高于黑盒方案。你能拿到模型运行中的完整logits而非只能看到采样后的文本输出这让训练信号精细得多。其次你不需要忍受API的限流、延迟和费用特别是在模型压缩项目中动不动要生成几十万条训练样本黑盒API的成本会高到让人怀疑人生。再次合规上彻底安心开源许可协议里把“是否允许蒸馏、是否允许商用、是否要求衍生品开源”都写得清楚而绝大多数开源大模型如Llama系、Qwen系等都允许基于其权重进行蒸馏和微调。选型时有个实操经验尽量让teacher和student来自同一系列。比如你是从Qwen2.5家族里挑一个7B型号当老师那student最好也选Qwen2.5的1.5B或0.5B。同一家族的tokenizer一致、输出分布风格相近蒸馏时的KL散度会更平滑训练稳定性会明显好于跨家族“硬凑”。如果你一定要跨家族蒸馏至少保证两个模型的词典有较高重合度否则embedding层的对齐会非常难受。3.2 准备蒸馏数据与软标签确定好老师后下一步就是准备“蒸馏集”。蒸馏集不需要像预训练语料那样海量但必须紧密覆盖你实际业务的输入分布。比如你做法律问答就准备一万条法律领域的指令你做客服意图分类就准备一万条客服会话开头。公开数据集可以打底但最后一定要混入自己的真实业务数据否则蒸馏出来的模型在公开测试集上好看一上线就被真实流量打回原形。软标签的生成在大模型场景通常有三种粒度token级、序列级、文本级。学术界最严格的是token级蒸馏——用teacher对每个输出token给出概率分布然后让student去拟合。实践中我常用一种相对轻量的方案生成teacher在每一轮对话中的最优输出作为“soft target”同时配合hard target正确答案一起训练。一段示意性代码展示如何用transformers库的teacher模型生成软标签import torch import torch.nn.functional as F from transformers import AutoTokenizer, AutoModelForCausalLM MODEL_NAME Qwen/Qwen2.5-7B-Instruct TEMPERATURE 3.0 tokenizer AutoTokenizer.from_pretrained(MODEL_NAME) teacher AutoModelForCausalLM.from_pretrained(MODEL_NAME, torch_dtypetorch.float16).eval() def generate_soft_labels(prompts, max_new_tokens128): soft_targets [] for prompt in prompts: inputs tokenizer(prompt, return_tensorspt) with torch.no_grad(): outputs teacher.generate( **inputs, max_new_tokensmax_new_tokens, return_dict_in_generateTrue, output_scoresTrue, temperatureTEMPERATURE ) # 取生成token序列对应位置的logits经温度缩放后作为软标签分布 # 实际工程中会按需做序列截断和长度对齐 for step, score in enumerate(outputs[scores]): probs F.softmax(score[:, -1, :] / TEMPERATURE, dim-1) soft_targets.append(probs) return soft_targets这里最核心的一点是“除以温度”这一步。原论文为什么这么做因为训练student时候如果把teacher的logits直接做softmax概率分布会过于尖锐——教师模型的确定性太强隐藏知识都被一刀切掉了而用较高温度软化之后低概率高常识的细节才能浮现出来student才有机会学到“边界知识”。这个操作我建议至少先跑一轮小规模实验再确定T而不是直接抄参数。3.3 训练student模型含代码示例蒸馏训练的目标函数公式并不复杂但第一次上手的人容易在实现上翻车。经典KD loss结构是L alpha * T^2 * KL( student_logits/T || teacher_probs/T ) (1-alpha) * CE( student_logits, hard_labels )两项分别代表“模仿老师的语义分布”和“学习标准答案”。alpha控制两者权重通常取0.7到0.9之间。注意KL散度前面要乘T^2这不是某个文献随手写的系数——因为logits经过温度缩放后梯度会变化乘上T^2是为了让两种loss的梯度量级保持一致。如果不乘你会发现最终模型只会硬背答案软标签的知识学不到多少。训练脚本里的核心损失函数可以参考下面这个实现def distillation_loss( student_logits, teacher_probs, hard_labels, T3.0, alpha0.8 ): # student logits也要除以温度 student_logits_T student_logits / T # teacher_probs已经是teacher logits/T后softmax的结果 kd_loss F.kl_div( F.log_softmax(student_logits_T, dim-1), teacher_probs, reductionbatchmean ) ce_loss F.cross_entropy(student_logits, hard_labels) return alpha * T * T * kd_loss (1 - alpha) * ce_loss实际训练时student模型的权重建议用LoRA方式微调参数量小、收敛快避免在蒸馏过程中把原本能力破坏太多。训练完后把LoRA权重合并回base模型再做一次评估。不少工程经验里还会加一步“回复蒸馏”不仅拟合logits还让teacher生成的真实文本作为student的参考目标这相当于先保证输出风格对齐再在细节embedding上微调。两者结合会比单靠logits蒸馏稳定得多特别是对于对话模型这种输出自由度很高的场景。3.4 温度与损失权重两个最关键的旋钮蒸馏调参的核心就两个旋钮温度T和权重alpha。很多人问我“蒸馏效果不好是不是模型选错了”大多数时候其实是这两个旋钮没转对。温度T决定了你想让student学到多“细”的知识。T1时软标签退化为硬标签整个蒸馏过程等于直接微调完全丧失意义T2到4之间分布平滑度适中适合对话生成和分类任务T超过5之后分布变得过于平坦所有类别的概率几乎拉平student学到的信号衰减严重输出会变得模棱两可、缺乏锐度。alpha的物理意义则是“信老师还是信答案”。alpha高学生更像老师能学到老师不温不火的思考痕迹alpha低学生更依赖标准答案训练过程更稳但收益也低。实际经验是分类任务alpha可以取0.7到0.9让“模仿”占主导生成任务可以适当降到0.6到0.8避免过度模仿导致的生硬腔调。我自己的实操体会是最有效率的做法是做一个温度扫描实验选一组有代表性的验证集样本分别在T1、2、4、8下跑几十步画出student在这些温度下的困惑度曲线。往往半小时内就能看出T4附近是否有一段明显的“平台期”如果有就用这个温度如果没有显著区别说明这份数据和任务对温度不敏感直接取T3.0起步就好。别一上来就全量跑先把旋钮摸清能省一整天的算力钱。4. 常见问题与排查技巧实录4.1 蒸馏后模型质量下滑先查这三个地方第一批跑蒸馏的人几乎都会遇到这个问题训练完评估时指标不升反降严重的时候甚至出现胡言乱语。这里把我的排查顺序列出来供你对照自查。第一看teacher和student之间的能力鸿沟。如果teacher是70Bstudent是0.5B两者的表达空间差异过大student根本拟合不动teacher的复杂分布训练loss持续飘忽。解决办法是在中间加一个“中继蒸馏”先用7B模型作为中间目标从70B蒸馏到7B再从7B蒸馏到0.5B。虽然多了几步但每一步的跨度都在可学习范围内。第二看蒸馏集和业务分布的匹配度。模型在蒸馏集上表现好一上线就崩大概率是数据分布偏移你喂的“考试题”和真实用户的“真题”不是一回事student只学会了应付考试。这个问题没有捷径必须在蒸馏集里掺入一线业务数据哪怕数量少也要有代表性。第三看训练时长和早停策略。蒸馏不是越练越好步数过多时模型会逐渐“背下”teacher的训练集导致过拟合。我习惯在流水线里挂一个验证集困惑度监控连续10个step困惑度不降就停下来。做部署的朋友可以把这个监控做成一个早停回调比事后看loss曲线靠谱得多。如果以上三项都正常但质量仍然不佳就该往温度T和alpha上怀疑。实在不行还可以检查一下student的base模型是否质量太差——模型压缩不是“点石成金”给一个本身的0.5B糟心模型再好的teacher也救不回来。4.2 蒸馏和微调到底该怎么选很多刚开始学习大模型开发的朋友会把“蒸馏”和“微调”混为一谈。这两个技术解决的问题不同并不是二选一的关系而是可以组合使用。维度知识蒸馏模型微调核心目标让student模型复制teacher模型的行为让模型适配某个具体任务的标注规律数据要求大量“输入→teacher输出”的配对样本任务输入和人工标注的对应关系训练对象student模型通常参数更小几乎可以是任意规模的模型典型场景模型压缩、能力迁移领域适配、指令对齐、风格定制算力成本需要额外跑一次teacher生成成本更高相对更省但要看标注数据是否好搞实际操作中最推荐的做法是“微调蒸馏”混合先用微调让student具备基础任务能力再用蒸馏阶段对齐teacher的风格和边界知识。好比一个学生先自己把课本背熟微调再找一个家教老师点拨易错题和高阶技巧蒸馏最终效果远好于只做其中一步。如果资源紧张又想快速上线一个小模型我反而建议优先微调因为蒸馏前置成本高你需要跑大量teacher推理对算力和时间都是压力。只有当你的目标明确是要缩小模型、且你已经有一个效果不错的大teacher时“先蒸馏、再微调”才划算。4.3 反蒸馏检测你的模型有没有“案底”既然“蒸馏”可能被点名那得聊聊平台方怎么看穿你。这里不教怎么规避检测只是帮你建立风险意识免得一堆数据被洗干净了还不知道自己一身“老师的气味”。反蒸馏检测在技术上分三层。第一层是输出重叠率检测把被怀疑的模型和闭源模型分别对同一批测试集做生成对比文本的n-gram重叠率、语义向量余弦相似度。如果相似度高到超过正常独立研发的阈值就会被扣上“高度近似”的帽子。第二层是基于困惑度的判断大家族的语言模型在语感上有细微但稳定的统计特征跨模型的困惑度分布有时候能当“笔迹”用。第三层是针对性探针测试平台方会精选一些高价值、高边际的知识点去问如果你的模型答出的模式和闭源模型几乎逐字相同排除“撞库”的可能性后自然会被怀疑是蒸馏出来的。我的建议很直接不要在这条线上走钢丝。合规蒸馏的路径那么清晰何必为了省一点数据成本把自己挂进风口浪尖。如果你做的是纯白盒蒸馏随手保留好训练日志、teacher模型许可文件、样本来源记录万一被问到手里有扎实的证明链底气完全不一样。5. 这波风波的连锁反应跟每个从业者都有关系5.1 闭源模型的“护城河”焦虑会被放大“7家被点名”事件最直接的影响是让所有闭源平台对自己API的管控力度再次升级。闭源模型的商业模式决定了它们必须守住“输出即服务”的边界而蒸馏恰恰把这层边界捅了个洞。可以预见的是未来的API会从这几个方面全面收紧更严格的调用频控与行为审计、更频繁的输出水印和指纹嵌入、以及更复杂的反爬与异常检测机制。对普通开发者来说这意味着依托闭源API做“快速搭模型”的窗口正在收缩。别再指望抓几百条API返回就能攒出一个能打的模型这条路会被封得越来越死。以后想借用顶尖模型的智慧要么老老实实按API付费做业务推理要么转向开源生态把重心放在数据组织和工程落地上。“用最快的方式白嫖老师”的时代基本过去了。5.2 开源模型变成“公共课堂”风波推动的另一件事是开源模型加速成为“蒸馏的合法课堂”。理由很简单开源许可协议里写明了你可以用什么、不可以用什么严格遵守协议做蒸馏既不需要担心服务条款也没有“偷”的道德负担。我会看到越来越多的团队把蒸馏流水线完全迁移到开源teacher上先把数据沉淀下来再等新版本开源模型发布后直接换teacher迭代速度反而比等着API限流更快。这一趋势还有一个深远影响开源模型与闭源模型之间的能力差距如果持续缩小“蒸馏闭源模型”的动机就会越来越弱。与其冒险去偷一个可能被检测的模型行为不如直接使用一个授权明确的开源模型。市场会慢慢形成一个新共识蒸馏不是禁忌违规的蒸馏才是禁忌。5.3 对国内大模型团队的三点现实建议作为一个在一线折腾过不少模型落地的工程师我给周围团队的建议就三条。第一别把“蒸馏”当捷径。真正的竞争力来自对数据分布的理解、对业务的拆解、对工程链路的精细打磨。蒸馏只是能力迁移的一种手段不是通往“最强模型”的传送门。把宝押在偷鸡摸狗式的黑盒蒸馏上属于把战略资源浪费在战术投机上。第二尽早建立“数据来源合规”意识。从数据采集、生成、清洗到训练每个环节都要保留可追溯记录。记录里至少要包含数据从哪个平台来、该平台的服务条款是否允许二次加工、使用的是什么版本的许可协议、清洗和筛选步骤怎么做的。这些材料平时看起来没什么用一旦遇到审计或质疑就是你的“清白证明”。第三把蒸馏流水线做成标准工程。我有一次就是在项目紧急时手动跑teacher生成、手动拼接数据最后发现两个实验的软标签散度不一致白白浪费了两次训练。后来我花了半天时间把“teacher生成→软标签→student训练→评估”做成了一条带版本记录的标准流水线训练参数、数据版本、蒸馏集哈希全部自动落盘整个团队的实验效率翻了一倍。这件事任何一个想长期做模型优化的团队都值得提前做。写在最后我在实际项目里踩过不少隧坑最深刻的一条是别贪teacher大也别图省事走黑盒路线。合规问题放到一边单论工程效率——找一份开源权重跑一次白盒蒸馏比黑盒调用API收集数据、清洗数据、防检测要干净得多也快得多。如果你最近也在计划做模型压缩或学习路线建议先从“读开源许可”开始再把温度T和小样本实验跑通最后才是全面铺开训练。最后分享一个小技巧动手蒸馏之前先拿100条样本跑一次Mini实验对比student在T1、T3、T5下的输出差异。半小时就能看到哪个温度下模型最有“灵性”这个习惯帮我省下的时间和算力不比任何一个大工程技巧少。所以与其纠结那几家常被点名的公司到底偷走了什么技术秘密不如回过头来认真想想在今天的行业节奏里你手头的模型每一步数据都来历清白吗