前言:deepseek中蒸馏主要通过强的teacher模型构建高质量推理数据集对参数模型进行SFT,随后再加上DPO加强模型偏好,约束模型输出格式,最后可以通过RL加强模型推理能力。
目录
[1. 先区分三个概念](#1. 先区分三个概念)
[2. DeepSeek-R1 的整体后训练流程](#2. DeepSeek-R1 的整体后训练流程)
[3. DeepSeek 蒸馏到底蒸了什么?](#3. DeepSeek 蒸馏到底蒸了什么?)
[不是蒸 teacher 的参数](#不是蒸 teacher 的参数)
[也不是经典 logits 蒸馏](#也不是经典 logits 蒸馏)
[4. DeepSeek-R1-Distill-Qwen-7B 的过程可以简化成这样](#4. DeepSeek-R1-Distill-Qwen-7B 的过程可以简化成这样)
[5. 你应该从哪个版本学习?](#5. 你应该从哪个版本学习?)
[推荐方案:先复现"小规模 SFT 蒸馏"](#推荐方案:先复现“小规模 SFT 蒸馏”)
[备选方案:小规模 GRPO 复现 R1-Zero 思路](#备选方案:小规模 GRPO 复现 R1-Zero 思路)
[6. 一个工程可落地的学习路线](#6. 一个工程可落地的学习路线)
[阶段 1:理解 SFT 蒸馏](#阶段 1:理解 SFT 蒸馏)
[阶段 2:做 rejection sampling](#阶段 2:做 rejection sampling)
[阶段 3:加入 non-reasoning 数据](#阶段 3:加入 non-reasoning 数据)
[阶段 4:再考虑 DPO / GRPO](#阶段 4:再考虑 DPO / GRPO)
[7. 最小实验设计](#7. 最小实验设计)
[8. 你要重点观察什么?](#8. 你要重点观察什么?)
[9. 推荐学习路径](#9. 推荐学习路径)
[10. 一个关键判断](#10. 一个关键判断)
结论
学习 DeepSeek 蒸馏模型,最适合从"离线 SFT 蒸馏"入手,而不是一上来复现完整 RL/GRPO。
DeepSeek-R1-Distill 系列的核心不是"把 671B 模型压缩成 7B",而是:
用强 teacher 模型 DeepSeek-R1 生成高质量推理样本,再用这些样本对 Qwen / Llama 等开源 base model 做 SFT。
这本质上是 sequence-level distillation / response distillation ,不是传统意义上拿 teacher logits 做 KL 蒸馏。DeepSeek 官方论文明确写到:蒸馏模型只使用 SFT ,没有加入 RL 阶段;训练数据约 80 万条,由 DeepSeek-R1 生成。(arXiv)
1. 先区分三个概念
| 概念 | DeepSeek 中对应什么 | 你学习时应该怎么理解 |
|---|---|---|
| SFT | 用问答样本训练模型模仿目标输出 | 最基础、最省事、最适合先做 |
| RL / GRPO | R1-Zero、R1 的核心强化学习阶段 | 用 reward 逼模型自己探索更好的推理策略 |
| Distillation | R1-Distill-Qwen / Llama 系列 | 用 R1 生成样本,然后小模型做 SFT |
DeepSeek-R1-Zero 是直接在 DeepSeek-V3-Base 上做大规模 RL,没有先做 SFT;它出现了自我验证、反思、长 CoT 等行为,但也有可读性差、语言混杂、重复等问题。(GitHub)
DeepSeek-R1 则加入了 cold-start SFT、两阶段 RL、rejection sampling、再次 SFT 等流程,用来改善可读性、泛化能力和人类偏好对齐。(arXiv)
DeepSeek-R1-Distill 系列则更简单:用 DeepSeek-R1 生成的样本去微调 Qwen2.5 / Llama3 系列 base model。(GitHub)
2. DeepSeek-R1 的整体后训练流程
可以把它拆成两条线:
路线 A:训练大 teacher
DeepSeek-V3-Base
→ RL,无 SFT,得到 R1-Zero
→ cold-start SFT
→ 第一阶段 RL,增强推理与语言一致性
→ rejection sampling
→ 第二阶段 SFT,混合 reasoning + non-reasoning 数据
→ 第二阶段 RL,对齐 helpfulness / harmlessness
→ DeepSeek-R1
路线 B:蒸馏小 student
DeepSeek-R1
→ 生成高质量 reasoning / general 数据
→ 清洗、过滤、保留正确答案
→ SFT 微调 Qwen / Llama base model
→ DeepSeek-R1-Distill-Qwen / Llama
DeepSeek 论文里的多阶段 pipeline 正是这个结构:先通过 RL 得到 R1-Zero,再通过 cold-start、RL、SFT、二阶段 RL 得到 R1,最后用 R1 的输出蒸馏小模型。(arXiv)
3. DeepSeek 蒸馏到底蒸了什么?
不是蒸 teacher 的参数
student 不会直接获得 DeepSeek-R1 的内部权重,也不是复制 hidden states。
也不是经典 logits 蒸馏
经典知识蒸馏通常是:
teacher logits → soft label → student 用 KL loss 学分布
但 DeepSeek-R1-Distill 更接近:
prompt
→ teacher 生成长推理轨迹 + 最终答案
→ 过滤正确样本
→ student 用 SFT 学完整输出
所以它蒸的是:
| 蒸馏对象 | 含义 |
|---|---|
| 推理格式 | <think>...</think> 或类似长思考结构 |
| 解题路径 | 多步推导、反思、验证、纠错 |
| 答案表达 | 最终答案的格式和解释方式 |
| 任务分布 | 数学、代码、STEM、逻辑、通用问答等样本覆盖 |
| teacher 行为风格 | 更长的 reasoning、更强的 self-check、更谨慎的输出习惯 |
DeepSeek 的 80 万 SFT 数据中,大约 60 万是 reasoning-related 样本,约 20 万是 non-reasoning 样本;数据覆盖数学、代码、STEM、逻辑、通用任务等领域。(arXiv)
4. DeepSeek-R1-Distill-Qwen-7B 的过程可以简化成这样
以 DeepSeek-R1-Distill-Qwen-7B 为例:
Base model:
Qwen2.5-Math-7B
Teacher:
DeepSeek-R1
Training data:
约 800k teacher-generated samples
Training method:
SFT only
训练超参:
2--3 epochs
max context length = 32768
batch size = 64
initial lr for Qwen-7B = 8e-5
cosine decay 到初始 lr 的 1/10
这些超参数来自 DeepSeek-R1 论文附录 B.4.3;官方列出的 Qwen-7B 蒸馏 base model 是 Qwen2.5-Math-7B,初始学习率为 8e-5。(arXiv)
5. 你应该从哪个版本学习?
推荐方案:先复现"小规模 SFT 蒸馏"
适合你现在学习后训练体系。
Teacher:
DeepSeek-R1 / DeepSeek-R1-Distill-32B / GPT-4.1 / Qwen3-235B 等强模型
Student:
Qwen2.5-7B / Qwen3-8B / DeepSeek-R1-Distill-Qwen-7B 二次微调
数据规模:
先做 1k → 5k → 20k,不要一开始搞 800k
训练方式:
LoRA / QLoRA SFT
工具:
LLaMA-Factory 或 TRL SFTTrainer
原因很直接:蒸馏的工程闭环最短 ,可以快速理解数据构造、模板、loss、评估、过拟合、泛化这些后训练核心问题。TRL 官方文档也把 SFT 作为最常用、最直接的后训练方式之一,SFTTrainer 支持 conversational / prompt-completion 等数据格式。(Hugging Face)
备选方案:小规模 GRPO 复现 R1-Zero 思路
适合你已经跑通 SFT 蒸馏之后。
Base:
Qwen2.5-0.5B / 1.5B / 3B
任务:
数学、代码、可验证 QA
Reward:
答案正确性 reward + 格式 reward
训练:
TRL GRPOTrainer
风险:
慢、吃显存、reward 设计难、容易 reward hacking
TRL 已经支持 GRPOTrainer,并且支持自定义 reward function;官方示例里也展示了用准确率 reward 训练数学任务的流程。(Hugging Face)
但 DeepSeek 论文也指出,小模型直接靠大规模 RL 未必能超过从强 teacher 蒸馏;他们的实验中,DeepSeek-R1-Distill-Qwen-32B 明显优于直接对 Qwen2.5-32B-Base 做大规模 RL 得到的 Qwen2.5-32B-Zero。(arXiv)
6. 一个工程可落地的学习路线
阶段 1:理解 SFT 蒸馏
目标:让 7B 模型学会 teacher 的推理格式和答案风格。
数据格式建议:
{
"messages": [
{
"role": "user",
"content": "题目或任务"
},
{
"role": "assistant",
"content": "<think>推理过程</think>\n最终答案"
}
],
"domain": "math",
"source": "teacher_generated",
"teacher_model": "deepseek-r1",
"quality_score": 0.92
}
关键字段说明:
| 字段 | 作用 |
|---|---|
messages |
训练主字段,适配 chat template |
domain |
方便后续做分领域评估,比如 math/code/general |
source |
区分 teacher-generated、人类数据、真实业务数据 |
teacher_model |
记录 teacher 来源,便于追踪质量 |
quality_score |
可选,用于过滤低质量样本 |
训练本质是 token-level cross entropy:模型根据前文预测 assistant 输出。TRL 文档里明确 SFT 的目标是最小化目标序列的 negative log-likelihood,也就是常见的 next-token 交叉熵。(Hugging Face)
阶段 2:做 rejection sampling
不要让 teacher 生成一次就直接训练。成熟做法是:
同一个 prompt 生成 N 个答案
→ 用规则 / judge / 单元测试筛选
→ 保留正确、清晰、格式合格的答案
→ 加入 SFT 数据
DeepSeek-R1 的 800K supervised data 就使用了 rejection sampling:对每个 prompt 采样多个响应,只保留正确的;同时过滤语言混杂、长段落混乱、代码块异常等 CoT。(arXiv)
阶段 3:加入 non-reasoning 数据
只训数学/代码长 CoT 会有副作用:
模型可能所有问题都长篇思考
普通问答变啰嗦
闲聊/写作能力退化
安全边界变差
多轮对话能力弱
DeepSeek 的 supervised 数据里除了 reasoning 样本,也加入了写作、事实问答、自我认知、翻译、软件工程、前端开发等 non-reasoning 数据;论文也指出这批数据大多是单轮,这可能限制多轮对话能力。(arXiv)
你的工程实践里,建议数据比例先这样设:
reasoning 数据:60%--70%
general instruction 数据:20%--30%
安全/拒答/边界数据:5%--10%
多轮对话数据:5%--10%
阶段 4:再考虑 DPO / GRPO
不要一开始就上 RL。
更合理顺序:
SFT 蒸馏
→ eval
→ 错误样本分析
→ 补数据
→ 再 SFT
→ DPO / ORPO 调偏好
→ 小规模 GRPO 做可验证任务
原因是 RL 的难点不在代码,而在 reward:
| 问题 | 风险 |
|---|---|
| reward 设计不稳 | 模型学会钻规则漏洞 |
| judge model 有偏 | 模型优化 judge 喜欢的格式,而不是正确性 |
| rollout 成本高 | 每个 prompt 要采样多个 completion |
| 长 CoT 成本高 | 显存、吞吐、训练时间都上升 |
| 小模型基础能力弱 | 容易重复、崩格式、答非所问 |
DeepSeek 论文也提到 reward hacking:模型可能利用 reward model 的偏差获得高分,但不符合真实人类偏好。(arXiv)
7. 最小实验设计
你可以这样做一个真正能学到东西的小实验。
实验目标
训练一个小型 reasoning distillation model:
Base: Qwen2.5-1.5B-Instruct 或 Qwen2.5-3B
Teacher: DeepSeek-R1 / DeepSeek-R1-Distill-Qwen-32B
数据: 3000--10000 条
方法: LoRA SFT
评估: GSM8K / MATH 子集 / 自建代码题 / 中文推理题
数据构造
1000 math
1000 code
1000 general reasoning
1000 normal instruction
500 safety / refusal
每条数据做这些检查:
1. final answer 是否正确
2. 是否出现中英混杂
3. 是否无限重复
4. 是否格式稳定
5. 是否过长
6. 是否有明显幻觉
训练配置参考
stage: sft
model_name_or_path: Qwen/Qwen2.5-1.5B-Instruct
finetuning_type: lora
template: qwen
cutoff_len: 8192
learning_rate: 2.0e-5
num_train_epochs: 2
per_device_train_batch_size: 1
gradient_accumulation_steps: 16
lora_rank: 16
lora_alpha: 32
bf16: true
这里我不会建议你直接照 DeepSeek 的 32768 context + batch size 64,因为那是大规模训练设定。你学习阶段用 4k--8k context 更现实,先观察模型是否真的学到推理格式。
8. 你要重点观察什么?
不要只看 loss。
| 指标 | 说明 |
|---|---|
train loss |
只能说明拟合程度,不能说明推理变强 |
eval accuracy |
数学/代码题是否真的答对 |
format compliance |
是否稳定输出指定格式 |
reasoning length |
是否过短或过长 |
repetition rate |
是否出现长 CoT 重复 |
general ability |
普通问答是否退化 |
safety refusal |
是否过拒答或不拒答 |
尤其要警惕一个假象:
模型会模仿"推理样子",但不一定真的推理正确。
所以 evaluation 必须看最终答案正确率,而不是只看回答是否像 R1。
9. 推荐学习路径
推荐方案
先学 DeepSeek-R1-Distill 的 SFT 蒸馏路线
适用条件:
-
你想快速理解后训练;
-
你显存有限;
-
你想训练 1.5B / 7B 模型;
-
你希望流程可控、可复现。
核心收益:
数据构造能力 > 训练脚本能力
过滤策略 > 模型结构修改
评估闭环 > 单次训练效果
备选方案
SFT 蒸馏完成后,再用 GRPO 做可验证任务增强
适用条件:
-
你有稳定的数学/代码题 reward;
-
你能承担 rollout 成本;
-
你已经有较好的 SFT checkpoint;
-
你想学习 R1-Zero 式 RL。
trade-off:
效果上限更高,但工程复杂度和失败概率明显更高。
10. 一个关键判断
DeepSeek 蒸馏模型最值得你学的不是"怎么把大模型变小",而是这套后训练思想:
强 teacher 生成候选
→ 自动/半自动过滤
→ 构造高质量 SFT 数据
→ 小模型模仿
→ 评估错误
→ 补充难例
→ 必要时再做 preference / RL
这也是现阶段个人和小团队最现实的后训练路线。完整复现 DeepSeek-R1 的大规模 RL 成本很高;但复现一个小规模 R1-style distillation pipeline,是完全可落地的。