兄弟们,最近群里总有人问:“模型太大跑不动,能不能剪一剪?” 今天我聊聊**模型蒸馏**——这玩意儿不是魔法,本质是“老师教学生”,但坑多,说几个实战要点。
**1. 别只看Loss,要看分布对齐**
很多新手直接拿小模型硬学大模型的输出,结果Loss降了但推理崩了。核心是**软标签(soft label)+温度系数**。比如温度T=4以上,能把概率分布拉平,让学生模型学会“老师犹豫时怎么选”。温度太低等于直接抄作业,过拟合到姥姥家。
**2. 中间层特征也能偷师**
除了最后logits,建议加一层中间特征匹配(比如Transformer的某个隐藏层)。参考Hinton的经典论文+现代变体,像TinyBERT那种“逐层蒸馏”能提3-5个点。但注意别把学生模型压太狠,我见过把7B模型硬塞成0.5B的,结果和原版差距大到没法用。
**3. 部署时量化+蒸馏可以双打**
蒸馏后模型参数变小,如果接上INT8或FP16量化,显存占用直接打骨折。比如用Qwen-7B蒸馏到3B+INT8,在一些低功耗GPU(像A100的MFU都有余量)上延迟降了40%,准确率只降1.2%。但记住:蒸馏和量化要联合调优,别分阶段搞。
**最后抛个砖**:你们在实际落地时,是更倾向蒸馏还是直接剪枝/低秩分解?我试过DistilBERT和ALBERT,发现复杂任务(比如代码生成)蒸馏经常翻车,你们遇到过吗?评论区唠唠。 |