首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LLM蒸馏与微调·第三章:蒸馏实操

LLM蒸馏与微调·第三章:蒸馏实操

作者头像
IT蜗壳-Tango
发布2026-07-14 21:55:38
发布2026-07-14 21:55:38
190
举报

CHAPTER 03 · DISTILLATION IN PRACTICE

蒸馏实操

教师部署 · 数据生成 · 黑盒/白盒/特征/同步/渐进式蒸馏全流程 · 调参与排查

蒸馏的实操比微调复杂,因为你要同时处理两个模型(教师和学生),而且需要选择蒸馏策略、生成蒸馏数据、调整蒸馏损失。本章将把这些环节逐一拆解,让你能从零跑通。

3.1 教师模型选择与部署

3.1.1 教师模型的选择原则

能力越强越好 教师的能力天花板就是学生的能力天花板

同系列优先 架构相似,白盒蒸馏时中间层对齐更容易

显存能装下 需同时运行教师(推理)和学生(训练),教师显存是硬约束

推荐组合

72B → 7B 压缩~10x | 显存~52GB(72B 4bit + 7B LoRA)| 2×A100 80GB

72B → 1.5B 压缩~48x | 显存~42GB | 1×A100 80GB

14B → 1.5B 压缩~9x | 显存~32GB | 1×A100 40GB

7B → 0.5B 压缩~14x | 显存~16GB | 1×RTX 4090

3.1.2 教师模型的部署方式

方式一:直接加载(白盒蒸馏用) 需要访问教师模型的Logits和Hidden States,必须直接加载模型权重。建议4bit量化节省显存。

方式二:API服务(黑盒蒸馏用) 用vLLM部署教师模型API,只需文本输出。适合闭源模型或显存不够的场景。

方式三:离线批量推理 ★推荐 先批量运行教师生成蒸馏数据保存到文件,再用数据训练学生。不需要同时加载两个模型。

离线生成建议temperature=0.7和top_p=0.9,既有质量保证又有多样性。temperature=0(贪心解码)所有输出都一样,学生学不到多样性。

3.2 蒸馏数据生成

3.2.1 白盒蒸馏:Logits提取

白盒蒸馏的核心是提取教师模型的Logits(未归一化的概率分布)。这需要在训练过程中实时获取,不能离线完成。

关键参数

temperature: 2.0~5.0 温度越高软标签越"软",暗知识越丰富,推荐从2.0开始

alpha: 0.5~0.7 蒸馏损失权重。教师信号质量高时增大alpha,数据有标注时降低

kl_div reduction: batchmean 使损失值与batch_size无关

显存优化技巧

教师模型4bit量化 → 推理显存降低约70%

学生模型开启gradient_checkpointing

降低batch_size → 白盒蒸馏显存约为普通微调的1.5~2倍

教师模型卸载到CPU → 速度极慢(约10倍),但可在单GPU上跑通

3.2.2 黑盒蒸馏:输出采样

黑盒蒸馏只需教师生成的文本,数据生成三步走:准备输入提示 → 用教师生成回答 → 数据质量过滤。

蒸馏提示的设计原则

覆盖面要广 提示应覆盖目标场景的各种任务类型

难度要有梯度 50%中等 + 30%简单 + 20%困难

长度要有变化 短指令(10字以内)和长指令(100字以上)都要有

避免重复 去重很重要,重复提示会让学生在相同模式上过拟合

蒸馏提示来源选择

UltraChat 1.5M条 | 多样性高 | 通用蒸馏数据量最大

Alpaca 52K条 | 质量高 | 通用蒸馏质量较好

Open-Orca 4.2M条 | 多样性高 | 大规模蒸馏

领域模板+Self-Instruct 自定义 | 领域蒸馏推荐组合

黑盒蒸馏数据量建议

通用能力蒸馏 50K~500K条

特定领域蒸馏 10K~100K条

推理能力蒸馏 5K~50K条(含思维链)

对话风格蒸馏 1K~10K条

DeepSeek-R1蒸馏Qwen-1.5B的成功案例使用了80万条推理链数据。这说明高质量的大规模蒸馏数据可以显著提升小模型能力。

3.3 学生模型选择

Qwen2.5系列学生模型对比

0.5B FP16 ~1.2GB | 4bit ~0.4GB | ~200 tokens/s | 手机/嵌入式

1.5B FP16 ~3GB | 4bit ~1GB | ~120 tokens/s | 端侧/低成本部署

3B FP16 ~6GB | 4bit ~2GB | ~80 tokens/s | 消费级GPU

7B ★最常用 FP16 ~14GB | 4bit ~4GB | ~40 tokens/s | 服务器/云端

学生模型一定要用预训练权重初始化,不要从零开始。蒸馏是在已有能力基础上"增强",不是从零"建造"。

3.4 蒸馏训练流程

3.4.1 黑盒蒸馏训练(最简单)

黑盒蒸馏的训练流程与普通微调完全一致——区别只在于训练数据来自教师模型而非人工标注。配置和第二章的SFT配置一样,只需把dataset换成教师生成的蒸馏数据。

# 黑盒蒸馏就是"用教师数据做SFT"

CUDA_VISIBLE_DEVICES=0 llamafactory-cli train qwen2.5_blackbox_distill.yaml

3.4.2 白盒蒸馏训练(需自定义训练循环)

白盒蒸馏需要同时运行教师和学生模型,LLaMA-Factory目前不直接支持Logits级别训练,需自定义脚本。核心步骤:

1. 加载教师(4bit量化,eval模式,不计算梯度)和学生(LoRA微调)

2. 数据加载 + tokenize + label masking(prompt部分设为-100不计入损失)

3. 训练循环:教师前向(no_grad)→ 学生前向 → KD Loss + CE Loss → 梯度累积更新

4. 注意:Qwen系列已有pad_token,不要用eos_token覆盖;global_step按梯度更新计数

3.4.3 白盒蒸馏调参指南

温度参数(Temperature)

τ=1 → 尖锐分布,暗知识不足,不推荐

τ=2 → 适度软化,★推荐起点,大多数场景效果好

τ=3~5 → 明显软化,教师远大于学生时适用(如72B→1.5B)

τ>5 → 过度软化,信号被稀释,不推荐

Alpha(蒸馏损失权重)

α=0.3 → 偏向硬标签,有高质量标注数据时

α=0.5 → ★推荐起点,蒸馏和硬标签各半

α=0.7 → 偏向蒸馏,标注数据少或质量低时

α=0.9 → 几乎全靠蒸馏,纯蒸馏无标注数据

Epoch选择

差距小(14B→7B)→ 1~2 epoch

差距中(72B→7B)→ 2~3 epoch

差距大(72B→0.5B)→ 3~5 epoch

完整调参实验记录(72B→7B,10K条数据)

基线(直接SFT)→ C-Eval 68

τ=2, α=0.5, lr=5e-5, 2ep → C-Eval 71

τ=3, α=0.5, lr=5e-5, 2ep → C-Eval 72(温度提升有效)

τ=4, α=0.5, lr=5e-5, 2ep → C-Eval 71(温度过高,信号稀释)

★最优 τ=3, α=0.5, lr=3e-5, 3ep → C-Eval 73(降低lr+增加epoch)

结论:温度2→3有提升,3→4反而下降;降低学习率+增加epoch比增大alpha更有效。

3.4.5 特征蒸馏完整脚本

在响应蒸馏基础上,额外对齐教师和学生的中间层隐藏状态。核心改动三点:

1. 教师和学生模型均需开启 output_hidden_states=True

2. 创建可学习的对齐矩阵(nn.Linear: student_dim → teacher_dim),将学生特征映射到教师空间

3. 损失函数增加特征对齐项:L_total = α·L_KD + β·L_feature + (1-α-β)·L_CE

层映射配置(72B→7B为例)

教师80层,学生28层,均匀映射+每隔4层对齐一次

推荐权重:α=0.4(KD)+ β=0.3(Feature)+ 0.3(CE)

3.5 效果对比与调参指南

3.5.1 蒸馏评估指标体系

能力保留率 学生/教师在基准测试上的得分比,衡量"学到了多少"

蒸馏增益 (蒸馏后-蒸馏前)/(教师-蒸馏前),衡量"蒸馏带来的提升占理论最大提升的比例"

输出相似度 学生和教师输出文本的语义相似度(BLEU/ROUGE/BERTScore)

分布对齐度 学生和教师Logits分布的KL散度,越小说明学生越像教师

3.5.2 正向KL vs 反向KL:原理与调参

LLM生成任务推荐反向KL

正向KL(标准KD):学生尝试覆盖教师的所有模式 → 倾向模式覆盖 → 学生可能过度估计低概率区域,生成不连贯文本

反向KL(MiniLLM方案):学生聚焦于教师分布的主要模式 → 倾向模式寻求 → 生成质量更高,但可能遗漏教师的某些能力

微软MiniLLM(ICLR 2024)系统性地验证了这一点。反向KL需要特殊训练技巧(梯度方差大),建议先从正向KL开始,熟悉后再尝试反向KL。

3.6 蒸馏训练常见问题排查

蒸馏比微调更容易出问题——因为你要同时处理两个模型。以下是5个最常见的问题:

问题1:教师模型OOM

教师量化到4bit(显存降70%);或改用黑盒蒸馏(先离线生成数据再训练)

问题2:蒸馏loss不下降

检查温度参数(τ=2~4安全区间);检查学习率(LoRA蒸馏推荐3e-5~5e-5);检查数据格式和label masking

问题3:学生生成质量差

调整KD/CE损失比例(增大α让输出更像教师);检查数据覆盖面(不要只用单一类型);温度可能过高

问题4:训练速度极慢

检查教师是否在CPU上(速度慢10倍);增大batch_size;考虑黑盒蒸馏替代

问题5:蒸馏后不如直接SFT

先用少量数据做对比实验排查配置问题;可能是温度过高或α设置不当;确认教师模型确实比学生强

3.7 多模态蒸馏概述

多模态蒸馏(如视觉-语言模型)在文本蒸馏基础上增加了视觉编码器的对齐。核心差异:

视觉编码器对齐 需要对齐教师和学生的视觉编码器中间层特征,通常用L2距离+余弦相似度联合损失

跨模态对齐 对齐视觉和文本的交叉注意力层,让学生学会教师的跨模态推理模式

显存挑战 多模态模型本身显存需求高,蒸馏时需同时加载两个多模态模型,建议教师4bit量化+教师CPU offload

多模态蒸馏目前仍是前沿研究方向,工程实践尚不成熟。建议先掌握纯文本蒸馏,再扩展到多模态场景。

本章小结

- 教师模型怎么选?→ 能力越强越好,同系列优先,显存能装下

- 黑盒蒸馏怎么做?→ 和SFT完全一样,只是数据来自教师

- 白盒蒸馏怎么做?→ 自定义训练循环,KD Loss + CE Loss联合优化

- 温度怎么选?→ 从τ=2开始,2~4之间有最优点

- 正向KL vs 反向KL?→ LLM生成任务推荐反向KL(MiniLLM)

- 特征蒸馏怎么加?→ 开启output_hidden_states,加对齐矩阵,增加β·L_feature项

- 蒸馏出问题?→ 5大问题排查:OOM/loss不降/质量差/速度慢/不如SFT

PAPER & INK · AI EDITION · CHAPTER 03


#得到大脑

#《日更者联盟》 14天打卡活动---Day03

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT蜗壳 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 蒸馏实操
    • 3.1 教师模型选择与部署
      • 3.1.1 教师模型的选择原则
      • 3.1.2 教师模型的部署方式
    • 3.2 蒸馏数据生成
      • 3.2.1 白盒蒸馏:Logits提取
      • 3.2.2 黑盒蒸馏:输出采样
    • 3.3 学生模型选择
    • 3.4 蒸馏训练流程
      • 3.4.1 黑盒蒸馏训练(最简单)
      • 3.4.2 白盒蒸馏训练(需自定义训练循环)
      • 3.4.3 白盒蒸馏调参指南
      • 3.4.5 特征蒸馏完整脚本
    • 3.5 效果对比与调参指南
      • 3.5.1 蒸馏评估指标体系
      • 3.5.2 正向KL vs 反向KL:原理与调参
    • 3.6 蒸馏训练常见问题排查
    • 3.7 多模态蒸馏概述
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档