SuperAPI AI 工具集

knowledge-distillation

智能体与模型

查看项目

更新于 10-15 13:03

技能介绍

用途

知识蒸馏用于压缩大语言模型:让一个较小的学生模型(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