DeepSeek V4 源码剖析

第18章 两阶段后训练:领域 SFT/RL + on-policy 蒸馏

作者 杨艺韬 · 6,489 字 · 发布于 · 更新于

先分头做精,再合并成一个。反过来做,会在每一件事上都平庸。

V4 不是用一套 SFT + RLHF 一条龙就上线的——它先训好 N 个领域专家,再蒸馏到一个统一模型。


18.1 引子:单阶段 SFT 走到尽头了吗

LLM 的标准后训练流程是:

  1. SFT (Supervised Fine-Tuning):用人工写的 (prompt, answer) 对训练
  2. RLHF / DPO / GRPO:用人类偏好或可验证奖励调优

这套流程在 GPT-3.5 / Llama 2 / V3 时代很成功,但在 V4 这种 1.6T + 多领域的场景下会遇到三个问题(技术报告第 5.1.2 节只点明了第 1 个方向:权重合并或混合 RL 容易掉点;问题 2、3 是本专栏的分析):

问题 1:跨领域负迁移

在一个统一模型上同时做"代码 SFT" + "数学 SFT" + "聊天 SFT" + "long context SFT"——领域之间的训练信号会互相干扰。模型学了代码后聊天能力可能下降;学了数学后写作能力可能下降。

问题 2:思考形态混淆

V4 同时支持 Non-Think / Think High / Think Max 三种推理模式。如果在统一模型上同时训三种模式的数据,模型会"困惑"——什么时候该 thinking、什么时候不该。技术报告第 5.1.1 节的做法是:为不同推理强度分别训练专家(RL 时用不同的长度惩罚和上下文窗口),回答格式用 <think> / </think> 区分,Think Max 再在 system prompt 开头注入一段固定指令(即 encoding/encoding_dsv4.py 里的 REASONING_EFFORT_MAX,仅在 thinking_mode="thinking" 且 reasoning_effort="max" 时加在第 0 条消息前)。

问题 3:384 expert 的精细调优

384 个 routed expert 已经在预训练里有差异化。后训练应该保住这种差异化,而不是把所有 expert 统一往同一个目标拉——单阶段 SFT 有可能冲淡预训练学到的分工(本专栏推测,技术报告没有讨论后训练对 expert 分工的影响)。

V4 的解法:把后训练拆成两阶段——先让多个领域专家模型独立成长,再蒸馏到统一模型。


18.2 阶段一:领域专家独立培养

V4 README 的原话是(注意这是一句话里的前半段,不是一个独立标题):

The post-training features a two-stage paradigm: independent cultivation of domain-specific experts (through SFT and RL with GRPO), followed by unified model consolidation via on-policy distillation, integrating distinct proficiencies across diverse domains into a single model.

下面这张图里的领域划分是本专栏的示意,不是官方口径——README 只说了"独立培养领域专家";技术报告第 1 节举例提到数学、代码、agent、指令遵循等领域,第 5.1.2 节说蒸馏阶段用了十余个 teacher 模型,但没有给出完整清单。图里只画 5 个作示意:

flowchart TB
  Pretrained["预训练 V4 base model<br/>(1.6T 参数)"]
  Pretrained --> ECode["V4-Code<br/>(代码专家)"]
  Pretrained --> EMath["V4-Math<br/>(数学专家)"]
  Pretrained --> EChat["V4-Chat<br/>(聊天专家)"]
  Pretrained --> ELongCtx["V4-LongCtx<br/>(长上下文专家)"]
  Pretrained --> EThink["V4-Think<br/>(推理专家)"]
  ECode -->|SFT + GRPO| ECodeOpt[V4-Code 优化版]
  EMath -->|SFT + GRPO| EMathOpt[V4-Math 优化版]
  EChat -->|SFT + GRPO| EChatOpt[V4-Chat 优化版]
  ELongCtx -->|SFT + GRPO| ELongCtxOpt[V4-LongCtx 优化版]
  EThink -->|SFT + GRPO| EThinkOpt[V4-Think 优化版]

每个领域专家:

  • 从同一个预训练 V4 base 出发
  • 用本领域的 SFT 数据 fine-tune
  • 用本领域的 prompt 和奖励信号做 RL(GRPO,DeepSeek 的强化学习算法,超参沿用此前工作):易验证任务用规则校验器或测试用例;难验证任务用 rubric 引导的数据加生成式奖励模型(GRM)打分,不再训练标量奖励模型,而且 GRM 就是 actor 本身,评判能力和生成能力一起被 RL 优化(技术报告第 5.1.1 节)

这样得到 N 个"领域专家"模型——每个在自己领域显著超过预训练 base,但在其他领域可能弱于 base(因为没训)。

GRPO(Group Relative Policy Optimization,组相对策略优化)由 DeepSeekMath 提出(arXiv:2402.03300,Zhihong Shao 等 2024),在 R1 的训练中被大规模使用。它的做法是对同一个 prompt 采样一组回答,用组内的相对得分当基线,从而省掉 PPO 里那个独立的 value 网络。它的优势:

  • 实现简单
  • 训练成本低(不需要训 critic)
  • 在可验证奖励(数学题对错、代码 pass/fail)上效果显著

第一阶段的产出是 N 个领域专家模型——每个的能力轮廓鲜明、差异化。(技术报告只说蒸馏阶段用了十余个 teacher,领域的完整切分没有公开。)


18.3 阶段二:on-policy 蒸馏到统一模型

接上一节那句话的后半段:followed by unified model consolidation via on-policy distillation, integrating distinct proficiencies across diverse domains into a single model。

这个阶段把 N 个领域专家的能力蒸馏回一个统一模型。技术报告第 5.1 节交代了它的位置:整体流程大体沿用 DeepSeek-V3.2,关键替换是把 V3.2 的混合 RL 阶段整个换成了 on-policy 蒸馏(OPD),思路引自 Thinking Machines Lab 的 On-Policy Distillation(2025):

flowchart TB
  ECode[V4-Code 优化版] --> Distill[on-policy<br/>蒸馏过程]
  EMath[V4-Math 优化版] --> Distill
  EChat[V4-Chat 优化版] --> Distill
  ELongCtx[V4-LongCtx 优化版] --> Distill
  EThink[V4-Think 优化版] --> Distill
  Distill --> V4Final["V4 统一模型<br/>(发布版)"]

on-policy 蒸馏与传统蒸馏的区别:

  • 传统蒸馏:teacher 模型生成数据集,student 在这个固定数据集上 fine-tune
  • on-policy 蒸馏:student 自己对 prompt 采样出回答轨迹,teacher 在这条轨迹的每个位置上给出自己的输出分布,student 学着向 teacher 的分布靠拢。V4 的目标函数是对 N 个专家的加权 reverse KL 求和:LOPD(θ)=∑i=1Nwi DKL(πθ ∥ πEi)\mathcal{L}_{\text{OPD}}(\theta)=\sum_{i=1}^{N} w_i\, D_{\text{KL}}(\pi_\theta \,\|\, \pi_{E_i}),权重 wiw_i 按专家的相对重要性定;而且用的是全词表 logits 蒸馏,而不是常见的逐 token KL 估计(后者方差大、训练不稳,技术报告第 5.1.2 节)

on-policy 的优势:

  • student 学到的是它自己分布下的纠正——避免 teacher 数据分布与 student 不匹配
  • 训练效率更高——每个 step 都是"针对 student 当前弱点"的纠正
  • 可以增量加领域——新领域专家训完,蒸馏阶段直接把它加进 teacher 集合(本专栏推断;技术报告第 5.2.2 节只说框架支持"实际上不设上限"的 teacher 数量)

按技术报告第 5.1.2、5.2.2 节的描述整理的示意伪代码(函数名是本专栏起的,不是官方代码):

for batch in training_data:
    # 1. student 对 prompt 自己采样回答轨迹(on-policy)
    traj = student_model.sample(batch.prompt)

    # 2. 取与当前任务相关的领域专家作 teacher;样本按 teacher 编号排序分发,
    #    teacher 只做前向:在 student 的轨迹上算最后一层 hidden,再过它自己的预测头还原全词表 logits
    teacher = teacher_for(batch)
    teacher_logits = teacher.forward_on(traj)

    # 3. 全词表 reverse KL:D_KL(student || teacher),按 w_i 加权
    loss = w[teacher] * reverse_kl(student_model.logits_on(traj), teacher_logits)
    loss.backward()
    optimizer.step()

工程上最麻烦的是 teacher 多而大:十余个 teacher、每个可能上万亿参数,权重放在集中式分布式存储里按需加载;词表超过 10 万,不能把所有 teacher 的 logits 物化下来,只缓存最后一层 hidden state,训练时再过对应的预测头重算 logits;KL 用专门的 TileLang kernel 算(技术报告第 5.2.2 节)。后训练的 rollout 和 teacher / reference 这类只做推理的前向用真 FP4 权重,训练步则把 FP4 无损反量化到 FP8 复用 FP8 训练框架(技术报告第 5.2.1 节)。

第二阶段的产出就是发布的 V4 模型——README 的说法是"把多个领域上各自的专长整合进一个模型"。


18.4 与 R1 路线的关系

V4 的两阶段后训练与 DeepSeek-R1 的训练路线有明显血缘——R1 的训练流程:

  1. R1-Zero:从 V3 base 直接用 RL(GRPO)训长链推理能力
  2. R1:先用少量冷启动长 CoT 数据(部分取自 R1-Zero 的输出,经人工整理)SFT,再做推理向 RL;然后用拒绝采样产出的推理数据加通用数据再 SFT 一轮,最后做覆盖全场景的 RL

按本专栏的解读,V4 的两阶段可以看作 R1 路线的一般化:

  • R1 的 RL 重心是"推理"一个领域
  • V4 把这个思路扩到多个领域
  • 多个领域专家通过 on-policy 蒸馏融合

不过这只是思路上的类比。技术报告第 5.1 节说得很明白:V4 的后训练流程大体沿用 DeepSeek-V3.2,专家训练也是改编自 V3.2 的流程;V4 真正换掉的是后面那一步——V3.2 流程里的混合 RL 阶段被整个替换成多 teacher 的 on-policy 蒸馏。


18.5 数据工程:每阶段的数据特点

后训练阶段的数据需求与预训练完全不同。技术报告对后训练数据只说了"高质量、领域特定的 SFT 数据"和"rubric 引导的 RL 数据",没有给规模与来源,下面是本专栏按业界常见做法的推测:

阶段一数据(领域 SFT + RL):

  • 总量:每领域需要大量高质量样本(具体规模未公开)
  • 质量要求:样本必须接近"标准答案"——错误数据会教坏模型
  • 多样性:覆盖该领域的关键 sub-task
  • 来源:人工写 + 合成 + 从 R1 / V3 蒸馏

阶段二数据(蒸馏):

  • 总量:大规模多领域 prompt 集(具体规模未公开)
  • 质量要求:prompts 多样化即可,回答由 student 自己采样,teacher 只提供每个位置的输出分布
  • 多样性:覆盖全部领域的混合分布
  • 来源:通常是真实用户 prompt 的脱敏版本 + 合成 prompts

评估数据:

  • 每领域有 hold-out 测试集
  • 严格不参与训练
  • 用于检测训练 over-fit / catastrophic forgetting

数据工程的工作量在后训练阶段不比预训练小——预训练数据是"爬下来过滤",后训练数据是"高质量精修",单条样本的成本要高得多。


18.6 评估闭环:什么决定阶段切换

后训练阶段的"何时停"是工程关键。技术报告没有公开 V4 的阶段切换判据,这里按常见做法推测,大体是一套评估闭环:

每个领域专家的"训练完成"判断(推测):

  • 该领域 benchmark 的 score 收敛(连续几次 eval 不再提升)
  • 训练 loss 收敛(不再下降但也不上升)
  • gradient norm 稳定
  • expert utilization 不偏离预训练分布太多

第二阶段(蒸馏)的停止判断(同样是推测):

  • 各领域 benchmark 的 score 接近各自专家的水平
  • 没有显著的"领域间负迁移"
  • 长上下文任务(needle-in-haystack 类)准确率维持

这套评估必须严格——否则训练可能"看起来在前进,实际在退步"。模型发布后,第三方独立评估(如 Artificial Analysis)的结果也可以和官方公布的分数互相对照。


18.7 后训练对架构的影响

后训练和 V4 的架构之间有几处值得对照着看。先说明口径:技术报告只对第 4 条(FP4 QAT 在后训练阶段引入)有明确交代,前 3 条是本专栏从架构特性出发的推断,报告没有把这些设计说成"为后训练而做":

影响 1:384 expert + Hash 路由的稳定性 后训练阶段最好不要让 expert 路由发生大幅变化(否则可能破坏预训练学到的差异化)。V4 前 3 层用 Hash 路由,expert 由 token ID 查表决定(inference/model.py:559 的 tid2eid 是 requires_grad=False 的固定表),这几层的选择本身不会被后训练改动;其余层靠 bias 均衡加 sqrtsoftplus 打分。本专栏推断这些设计对后训练期间的路由稳定有利,但这只是工程推断,技术报告没有公开后训练期间路由变化的数据。

影响 2:MTP 在后训练里的角色 技术报告没有说明后训练阶段 MTP 模块是否继续参与训练、权重多少(第 4.2.2 节公开的 0.3 / 0.1 权重是预训练口径)。"MTP 的看远监督让思考链生成更好"是一种常见猜想,目前没有一手依据;MTP 在推理侧的用途(投机解码)见第 11 章。

影响 3:稀疏 attention 的鲁棒性 后训练经常涉及长 prompt(特别是 agent 任务,技术报告第 5.2.4 节专门为百万 token 级的 RL / OPD 做了优化),稀疏 attention 的"选错"可能间接被 SFT/RL 的信号惩罚,从而强化稀疏选择能力——这是推测,报告没有交代后训练期间 Indexer 怎么训。

影响 4:混合精度的稳定性 FP4 QAT 不是从预训练"延续"下来的,而是在后训练阶段才引入(技术报告第 3.4 节;预训练是 FP8 混合精度):训练步里 FP32 主权重先量化到 FP4,再无损反量化到 FP8 参与计算,梯度经 STE 回到 FP32 主权重;RL rollout 和推理才直接用真 FP4 权重。模型正是在后训练中学会适应 FP4 带来的精度损失。

除 FP4 QAT 外,这几条都是推断;能确定的是,V4 把"部署时用 FP4"这件事放进了后训练流程里去解决。


18.8 与同类后训练方案对比

把 V4 的两阶段后训练与几个流行方案对比:

方案 阶段数 主要算法 领域处理 代表模型
传统 SFT + RLHF 2 SFT + PPO 单阶段统一 Llama 2 / GPT-3.5
DPO 2 SFT + Direct Preference Opt 单阶段统一 Zephyr
Constitutional AI 多 RLAIF 单阶段统一 Claude
R1 路线 2-3 SFT + GRPO + 蒸馏 推理专长 DeepSeek R1
V4 两阶段 2 SFT + GRPO + on-policy 蒸馏 多领域专长 + 统一 DeepSeek V4
Llama 4 3 轻量 SFT + 在线 RL + 轻量 DPO 多领域单阶段 Llama 4

V4 的特点在前两条,第三条是 DeepSeek 的一贯做法:

  • 多领域专长:先培养十余个专家(按蒸馏阶段的 teacher 数)而非单模型 multi-task
  • on-policy 蒸馏:让 student 在自己分布上学,用全词表 reverse KL
  • 用 GRPO 而不是 PPO:训练成本低、不需要 critic(这一点并非 V4 首创,V3 和 R1 已经用 GRPO)

技术报告第 5.1.2 节的说法是:这种 logits 层面的对齐,实际上绕开了传统权重合并或混合 RL 常见的性能退化。


18.9 动手实验:simple distillation

import torch
import torch.nn as nn
import torch.nn.functional as F

class MiniTeacher(nn.Module):
    """模拟一个已训好的领域专家"""
    def __init__(self, vocab=1024, dim=128):
        super().__init__()
        self.embed = nn.Embedding(vocab, dim)
        self.linear = nn.Linear(dim, vocab)
    def forward(self, x):
        return self.linear(self.embed(x).mean(dim=1))

class MiniStudent(nn.Module):
    """统一模型 (student)"""
    def __init__(self, vocab=1024, dim=128):
        super().__init__()
        self.embed = nn.Embedding(vocab, dim)
        self.linear = nn.Linear(dim, vocab)
    def forward(self, x):
        return self.linear(self.embed(x).mean(dim=1))


# 假设我们有 3 个领域专家
torch.manual_seed(0)
teachers = [MiniTeacher() for _ in range(3)]
student = MiniStudent()
opt = torch.optim.Adam(student.parameters(), lr=1e-3)

# 逐 logits 蒸馏(简化:输入是随机 token,不是 student 自己采样的轨迹,所以只演示 loss 形式,不算真正的 on-policy)
for step in range(100):
    # 1. 随机选一个领域 (在生产中由 prompt 类型决定)
    domain = torch.randint(0, 3, (1,)).item()
    teacher = teachers[domain]

    # 2. 生成 batch
    x = torch.randint(0, 1024, (32, 16))

    # 3. teacher 算 logits
    with torch.no_grad():
        teacher_logits = teacher(x)

    # 4. student 算 logits
    student_logits = student(x)

    # 5. 全词表 reverse KL:D_KL(student || teacher),与技术报告的 OPD 目标同向
    #    F.kl_div(input, target, log_target=True) 算的是 KL(target || input)
    loss = F.kl_div(
        F.log_softmax(teacher_logits, dim=-1),
        F.log_softmax(student_logits, dim=-1),
        reduction='batchmean', log_target=True
    )

    opt.zero_grad()
    loss.backward()
    opt.step()

    if step % 20 == 0:
        print(f"Step {step}, domain {domain}: loss = {loss.item():.4f}")

在 CPU(torch 2.11.0)上实跑,loss 从 step 0 的 0.0238 降到 step 80 的 0.0145(随机初始化的模型输出都接近均匀分布,所以数值很小)。因为每步随机换一个 teacher、输入又不分领域,student 最终学到的是 3 个 teacher 之间的折中;V4 的做法是让每条样本只对齐与任务相关的那个专家,避免这种互相拉扯。要改成真正的 on-policy,还需要让 student 先自回归采样出轨迹,再在轨迹上算两边的 logits。


18.10 后训练阶段的"质量墙"与"对齐墙"

V4 的两阶段后训练面对两堵"墙"——任何 LLM 后训练都要过:

质量墙:模型必须比 base 显著强

如果后训练后的模型在 benchmark 上没有显著提升,整个后训练阶段就是失败的——投入的算力和人力都白费了。V4 通过领域专家分别培养,让每个领域单独突破质量墙,再蒸馏融合。

突破质量墙的关键是数据质量——少量高质量样本往往胜过大量低质量样本。V4 的 SFT 数据怎么来的,技术报告没有交代;能确认的是 RL 阶段的难验证任务改用 rubric 引导数据加生成式奖励模型,报告称这样只需少量多样化的人工标注。

对齐墙:模型必须符合人类偏好

模型有能力 ≠ 模型符合用户期望。对齐墙包括:

  • 拒绝有害请求(safety)
  • 输出格式与用户期望一致
  • 推理深度与任务匹配(Non-Think / Think High / Think Max 切换)
  • 风格一致性(不要前 100 token 客气、后 100 token 冷漠)

V4 通过 GRPO 在每个领域独立做 RL,再用 on-policy 蒸馏合并——技术报告称这绕开了权重合并或混合 RL 常见的性能退化。

两堵墙的同时突破:V4 的工程精妙之处在于质量提升 + 对齐改进可以并行——领域专家阶段同时优化"该领域能力" + "该领域对齐"。蒸馏阶段把多领域的"质量 + 对齐"统一融合到一个模型。效果上,技术报告第 1 节的自评是:V4-Pro-Max 知识类评测领先开源模型但仍落后于 Gemini-3.1-Pro;推理上超过 GPT-5.2 和 Gemini-3.0-Pro,略逊于 GPT-5.4 和 Gemini-3.1-Pro;agent 公开评测与 Kimi-K2.6、GLM-5.1 相当,略逊于前沿闭源模型——并非各项都是 SOTA。


18.11 后训练阶段的可观测性

后训练比预训练更难监控——loss 曲线不一定反映真实质量。V4 大概率用了一套多维度评估管道:

自动评估:

  • 各领域 benchmark 自动跑(HumanEval / MATH / MMLU / RULER 长文等)
  • 每 epoch 跑一次,监控 score 趋势
  • pass@1 / pass@10 等多个指标对照

人工评估:

  • Win rate vs base model(人工对比 100-1000 prompts)
  • 风格 / 安全 / 帮助度 三维度打分
  • 每周抽样监控

对比基线:

  • 与前代及同类开源、闭源模型对比(技术报告公开的对照对象包括 Opus-4.6、GPT-5.4、Gemini-3.1-Pro、Kimi-K2.6、GLM-5.1)
  • 与 V4 base(未经后训练)对比 ——确认提升幅度

回归检测:

  • 每个新版本与上一版做 A/B—— 不能新版在某些领域提升、其他领域回退
  • 用同一组 prompt 重复跑——检测随机性是否增加

生产监控(GA 后):

  • 用户实际 query 的输出质量分布
  • 拒答率、不确定性表达频率
  • 推理深度分布(Think Max 占比)

这套评估管道的工程量极大——耗费的工程师时间往往不亚于训练本身。这是大模型后训练的"隐性成本"——大多数学术 paper 不报告这部分,但工业部署必须。


18.12 V4 后训练 pipeline 的"复刻路线图"

如果你的团队想复刻 V4 的两阶段后训练(在自己的 base model 上),给一个具体的复刻路线图。下面的卡数、样本量和周期都是本专栏的粗略估计,DeepSeek 没有公开这类数据:

前置条件:

  • 已有能力足够的 base model(pretrained)
  • 至少 32 卡 GPU 集群(用于并行训练多个领域专家)
  • 数据团队(每领域准备 100K+ 高质量样本)
  • 评估管道(每领域 benchmark 自动跑通)

步骤 1:定义领域分类(1-2 周)

不要一上来就铺开——从 2-3 个最重要的领域开始(典型:代码、数学、聊天)。每领域定义:

  • 训练数据来源
  • benchmark 集合
  • 期望提升幅度

步骤 2:领域专家培养(4-8 周 / 领域)

并行训练每个领域专家:

  • SFT 阶段:1-2 周,10-50K samples
  • RL/GRPO 阶段:2-4 周,多次迭代
  • 评估收敛 + 调参:1-2 周

步骤 3:on-policy 蒸馏(2-4 周)

在所有领域专家完成后启动蒸馏:

  • 准备多领域混合 prompt 集
  • 配置 teacher routing(按 prompt 类型选 teacher)
  • 蒸馏到统一模型
  • 评估每领域 score 是否接近各自专家

步骤 4:综合评估 + 迭代(2-4 周)

  • 跑全部领域 benchmark
  • 与 base model + 其他模型对比
  • 如果某领域回退,回到步骤 2 重新培养该领域专家
  • 直到综合 score 达标

总时间:3-6 个月(估计)。总成本:没有可直接参照的公开数字。作为量级参考,DeepSeek-V3 报告里后训练只用了 5K H800 GPU 小时,预训练是 2664K;但那是 R1 式大规模 RL 之前的数字,V4 的报告没有公开后训练开销,不能直接套用。

这条路线图对中等规模团队可行——但需要严格的工程纪律。任何环节松懈(如评估不严格、领域定义模糊),最终模型会出现"训练时看起来好、生产时退化"的尴尬。


18.13 "领域专家培养 → 蒸馏" 路径的几个失败模式

V4 的两阶段路径已经被证明可行——但任何团队尝试复刻时会遇到几个典型失败模式。把这些失败模式列出来作为警示:

失败模式 1:领域分得过细

为了"全面覆盖"把领域切得过碎,每多一个专家就多一轮完整的 SFT + RL 成本,蒸馏阶段 teacher 之间的边界也更难划清。V4 自己用了十余个 teacher(技术报告第 5.1.2 节),为此专门做了 teacher 权重按需加载、只缓存最后一层 hidden 等调度设施(第 5.2.2 节)——teacher 多到十几个是可行的,前提是有这样的基础设施,并且每条样本能明确对应到一个相关专家。完整的领域清单没有公开,本专栏 §18.2 图里的 5 个是示意;"上限是多少"没有依据,这里只给方向:没有配套设施时宁可少而正交。

失败模式 2:领域定义有重叠

如果"代码专家"和"数学专家"都涵盖了"算法题"——这部分数据被两个 teacher 同时影响,蒸馏阶段 student 不知道该听谁的。领域定义应当尽量正交。

失败模式 3:蒸馏数据分布不均

如果蒸馏阶段的 prompt 90% 是聊天、10% 是代码——蒸馏后的 student 在代码上明显弱于代码专家。蒸馏数据必须镜像目标用户分布——而非任意 sample。

失败模式 4:评估闭环失效

如果某领域 benchmark 不严格——专家训练时"看起来 score 涨了"实际质量没变。蒸馏后 student 在该领域显著退化。每领域必须有可信 benchmark + hold-out 测试。

失败模式 5:忽略领域间负迁移

某些技巧在领域 A 上有效,对领域 B 反而有害。比如"长 thinking" 在数学上加分,在简单聊天上反而让用户烦躁。蒸馏阶段必须监控所有领域的综合表现,不能只盯主要领域。

失败模式 6:训练时间分配错误

每个领域专家训练时间应该按"该领域的难度 / 重要性" 分配。如果"聊天"训了 4 周但"数学"只训了 1 周——蒸馏后数学能力会拖后腿。V4 大概率给"难领域 / 重要领域" 更多训练步数。

这 6 个失败模式是本专栏按一般工程经验归纳的,并非 DeepSeek 公开的经验——想复刻 V4 后训练 pipeline 的团队可以作为检查清单。


18.14 延伸阅读

  • DeepSeek-R1 论文(arXiv:2501.12948):R1 路线的源头
  • DeepSeekMath 论文(Zhihong Shao 等 2024,arXiv:2402.03300):GRPO 的提出
  • Distilling the Knowledge in a Neural Network(arXiv:1503.02531):蒸馏的源头
  • DeepSeek-V4 技术报告第 5 节:后训练流程、GRM、OPD 目标函数与 teacher 调度的一手描述
  • Thinking Machines Lab, On-Policy Distillation(博客,2025):V4 技术报告引用的 on-policy 蒸馏出处
  • Self-Play Fine-Tuning(arXiv:2401.01335):同样在模型自己生成的数据上训练的自博弈微调思路,可与 on-policy 蒸馏对照
  • 《LLM 评测体系》专栏第 18 章:把 Evals 变成 Quality Gate(CI 集成与回归告警)
  • 本专栏第 17 章:预训练阶段如何为后训练铺垫

18.15 本章小结

  • V4 用两阶段后训练:领域专家培养 + on-policy 蒸馏
  • 阶段一:从同一 base 出发,独立培养多个领域专家(SFT + GRPO,难验证任务用生成式奖励模型)——蒸馏阶段用了十余个 teacher,完整领域清单未公开
  • 阶段二:用 on-policy 蒸馏(全词表 reverse KL)把领域专家融合到统一模型,替换了 V3.2 流程里的混合 RL 阶段
  • GRPO(Group Relative Policy Optimization,DeepSeekMath 提出)用组内相对得分当基线,省掉 PPO 的 value 网络;V3、R1 已在用
  • on-policy 蒸馏让 student 在自己分布上学——避免 teacher 数据偏离
  • FP4 QAT 在后训练阶段才引入:训练时 FP4 无损反量化到 FP8,rollout 与推理用真 FP4;hash routing / MTP / 稀疏 attention 与后训练稳定性的关系是本专栏推断,报告未说明
  • 与传统单阶段 SFT + RLHF 相比,V4 的关键改动是先分头培养专家、再用 on-policy 蒸馏合并,报告称这避开了权重合并或混合 RL 的性能退化

第 19 章:把 V4 部署到生产——vLLM / SGLang / TensorRT-LLM 的工程接缝。