用途
知识蒸馏用于压缩大语言模型:让一个较小的学生模型(student)学习较大教师模型(teacher)的输出分布,从而在显著减小模型规模的同时尽量保留性能。典型目标包括:将 70B 模型压缩到 7B 并保留 90% 以上性能;把专有模型(如 GPT-4)的能力迁移到开源模型(如 LLaMA、Mistral);通过部署更小的学生模型降低推理成本;通过蒸馏领域知识创建专用模型;以及利用大教师模型生成的合成数据改进小模型。
主要能力
该技能涵盖以下关键技术与策略:
- 温度缩放(Temperature Scaling):通过提高温度软化概率分布,暴露教师模型的不确定性。常用 T=2-5,2 为常见默认值。
- 损失函数组合:总损失 = alpha × 软损失 + (1 - alpha) × 硬损失。软损失为学生与教师之间的 KL 散度,硬损失为基于真实标签的交叉熵。alpha 常用 0.5(均衡)、0.7(偏重教师)、0.3(偏重标签)。
- 前向与反向 KLD:前向 KL(KL(Student || Teacher))让学生匹配教师的平均行为,适合分类;反向 KL(KL(Teacher || Student),即 MiniLLM)让学生覆盖教师的所有行为模式,适合生成任务。
- Logit 蒸馏:直接让学生匹配教师的 logits,可用 MSE 或 KLD 作为损失。
- 响应蒸馏:用教师模型生成合成响应,再以标准微调方式训练学生模型模仿。
- 两阶段蒸馏:先蒸馏,再在任务特定数据上微调,通常优于单阶段。
- 多教师蒸馏:从多个专家教师模型学习,对学生使用教师预测的平均值进行蒸馏。
使用方式
安装依赖:
# Standard transformers
pip install transformers datasets accelerate
# For training
pip install torch deepspeed wandb
# Optional: MiniLLM implementation
git clone https://github.com/microsoft/LMOps
cd LMOps/minillm
pip install -e .
基本流程为:加载教师(大)与学生(小)模型;定义蒸馏损失(组合软损失与硬损失);在训练循环中,教师前向传播不计算梯度,学生前向传播后计算蒸馏损失并反向传播优化。
MiniLLM 使用反向 KLD 损失,训练时同样先获取教师 logits(无梯度),再计算学生的反向 KL 损失并优化。
响应蒸馏则先用教师模型对提示生成合成响应,再将这些响应作为训练数据对学生模型进行标准微调。
生产部署中可自定义 Trainer 的 compute_loss,在训练参数中设置输出目录、训练轮数、批大小、梯度累积、学习率、预热步数、日志与保存步数、bf16、梯度检查点等。
适用场景
- 需要将大模型压缩为小模型并尽量保留性能。
- 需要把专有模型能力迁移到开源模型。
- 需要降低推理成本、部署更小的学生模型。
- 需要创建领域专用模型。
- 需要用大教师模型的合成数据改进小模型。
限制与注意事项
- 模型规模比例建议:70B/7B(10×)效果优秀,13B/1B(13×)良好,7B/1B(7×)可接受;70B/1B(70×)差距过大,效果不佳。
- 数据质量方面,建议使用教师生成数据(约 70%)加真实数据(约 30%);仅使用真实数据无法充分利用教师模型。
- 超参数规律:更高的温度加更高的 alpha 意味着更强的蒸馏。
- 评估时可使用 pipeline 对比学生与教师在同一提示下的生成结果,并计算相似度。
- 资料未提供具体的性能数值、收费、价格或平台支持信息。
参考论文与资源
- Hinton et al. 2015(基础):https://arxiv.org/abs/1503.02531
- MiniLLM(反向 KLD):https://arxiv.org/abs/2306.08543
- KD Survey for LLMs (2024):https://arxiv.org/abs/2402.13116
- MiniLLM GitHub:https://github.com/microsoft/LMOps/tree/main/minillm