第18章 两阶段后训练:领域 SFT/RL + on-policy 蒸馏
“First specialize, then unify. The opposite produces mediocrity in everything.” —— V4 团队的训练哲学
V4 不是用一套 SFT + RLHF 一条龙就上线的——它先训好 N 个领域专家,再蒸馏到一个统一模型。
18.1 引子:单阶段 SFT 走到尽头了吗
LLM 的标准后训练流程是:
- SFT (Supervised Fine-Tuning):用人工写的 (prompt, answer) 对训练
- RLHF / DPO / GRPO:用人类偏好或可验证奖励调优
这套流程在 GPT-3.5 / Llama 2 / V3 时代很成功,但在 V4 这种 1.6T + 多领域的场景下暴露三个问题:
问题 1:跨领域负迁移
在一个统一模型上同时做”代码 SFT” + “数学 SFT” + “聊天 SFT” + “long context SFT”——领域之间的训练信号会互相干扰。模型学了代码后聊天能力可能下降;学了数学后写作能力可能下降。
问题 2:思考形态混淆
V4 同时支持 Non-Think / Think High / Think Max 三种推理模式。如果在统一模型上同时训三种模式的数据,模型会”困惑”——什么时候该 thinking、什么时候不该。
问题 3:384 expert 的精细调优
384 个 routed expert 已经在预训练里有差异化。后训练应该强化这种差异化,而不是把所有 expert 统一往同一个目标拉——单阶段 SFT 会模糊化预训练学到的 expert 专业性。
V4 的解法:把后训练拆成两阶段——先让多个领域专家模型独立成长,再蒸馏到统一模型。
18.2 阶段一:领域专家独立培养
V4 README 描述:“Domain-specific expert cultivation independently with SFT + RL (GRPO).”
这个阶段的工作:
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
- 用本领域的可验证奖励做 RL(GRPO,DeepSeek 的强化学习算法)
- 训练 thousands 到 tens-of-thousands steps
这样得到 N 个”领域专家”模型——每个在自己领域显著超过预训练 base,但在其他领域可能弱于 base(因为没训)。
GRPO(Generalized Reinforcement Policy Optimization)是 DeepSeek 在 R1 训练中引入的算法——简化版 PPO,不需要 value function。它的优势:
- 实现简单
- 训练成本低(不需要训 critic)
- 在可验证奖励(数学题对错、代码 pass/fail)上效果显著
第一阶段的产出是 N 个领域专家模型——每个的能力轮廓鲜明、差异化。
18.3 阶段二:on-policy 蒸馏到统一模型
V4 README 描述:“On-policy distillation into a single unified model.”
这个阶段把 N 个领域专家的能力蒸馏回一个统一模型:
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 接轨
on-policy 的优势:
- student 学到的是它自己分布下的纠正——避免 teacher 数据分布与 student 不匹配
- 训练效率更高——每个 step 都是”针对 student 当前弱点”的纠正
- 可以增量加领域——新领域专家训完,蒸馏阶段直接把它加进 teacher 集合
具体的算法(推测):
for batch in training_data:
# 1. student 生成回答
student_output = student_model(batch.prompt)
# 2. 选择最相关的领域专家作为 teacher(基于 prompt 类型)
teacher = route_to_teacher(batch.prompt)
teacher_output = teacher(batch.prompt)
# 3. 用 KL 散度 / cross-entropy 让 student 接轨 teacher
loss = distillation_loss(student_output, teacher_output)
loss.backward()
optimizer.step()
第二阶段的产出就是发布的 V4 模型——同时具备 5+ 领域专家的能力,且没有领域间负迁移。
18.4 与 R1 路线的关系
V4 的两阶段后训练与 DeepSeek-R1 的训练路线有明显血缘——R1 的训练流程:
- R1-Zero:从 V3 base 直接用 RL(GRPO)训长链推理能力
- R1:用 R1-Zero 生成的高质量推理数据 SFT,再 RL
V4 的两阶段是 R1 路线的一般化:
- R1 只针对”推理”一个领域
- V4 把这个思路扩到 5+ 领域
- 多个领域专家通过 on-policy 蒸馏融合
这种”先专后通”的训练哲学源自 R1 在推理任务上的成功——把它推广到多领域是 V4 的工程贡献。
18.5 数据工程:每阶段的数据特点
后训练阶段的数据需求与预训练完全不同:
阶段一数据(领域 SFT + RL):
- 总量:每领域 100K - 1M 高质量样本
- 质量要求:样本必须接近”标准答案”——错误数据会教坏模型
- 多样性:覆盖该领域的关键 sub-task
- 来源:人工写 + 合成 + 从 R1 / V3 蒸馏
阶段二数据(蒸馏):
- 总量:millions of prompts
- 质量要求:prompts 多样化即可,“答案”由 teacher 生成
- 多样性:覆盖所有 5+ 领域的混合分布
- 来源:通常是真实用户 prompt 的脱敏版本 + 合成 prompts
评估数据:
- 每领域有 hold-out 测试集
- 严格不参与训练
- 用于检测训练 over-fit / catastrophic forgetting
数据工程的工作量在 V4 这种规模下远超预训练——预训练数据是”爬下来过滤”,后训练数据是”高质量精修”,单位成本差几个数量级。
18.6 评估闭环:什么决定阶段切换
后训练阶段的”何时停”是工程关键。V4 用一套评估闭环控制阶段切换:
每个领域专家的”训练完成”判断(推测):
- 该领域 benchmark 的 score 收敛(连续几次 eval 不再提升)
- 训练 loss 收敛(不再下降但也不上升)
- gradient norm 稳定
- expert utilization 不偏离预训练分布太多
第二阶段(蒸馏)的停止判断:
- 各领域 benchmark 综合 score 接近各自专家的 90%+
- 没有显著的”领域间负迁移”
- 长上下文任务(needle-in-haystack 类)准确率维持
这套评估必须严格——否则训练可能”看起来在前进,实际在退步”。第三方独立评估(如 Artificial Analysis、HF Open LLM Leaderboard)的结果会与团队内部 eval 互相对照。
18.7 后训练对架构的影响
后训练对 V4 的架构有几个反向影响——不是”训练适配架构”,而是”架构为后训练优化”:
影响 1:384 expert + Hash 路由的稳定性 后训练阶段不能让 expert 路由发生大幅变化(否则破坏预训练学到的差异化)。V4 的 Hash routing 前 3 层 + bias term + sqrtsoftplus 等设计让后训练阶段路由稳定——bias 仍可调但变化小。
影响 2:MTP 在后训练里的角色 MTPBlock 在后训练阶段也参与训练——它的 next-next 监督让模型在”思考链生成”任务上表现更好(生成长 think 链时 MTP 的”看远”能力发挥)。
影响 3:稀疏 attention 的鲁棒性 后训练经常涉及长 prompt(特别是推理任务),稀疏 attention 的”选错”会被 SFT/RL 的 reward 惩罚——模型学到”主动多关注关键 KV 位置”,强化稀疏选择能力。
影响 4:混合精度的稳定性 后训练时 FP4 expert 的 QAT 路径继续生效——后训练数据会让 FP4 量化误差进一步降低(模型继续学习对量化误差的鲁棒性)。
这几个影响说明:V4 的架构设计已经把”后训练友好性”作为一等约束——不只是”能训到收敛”,而是”训练完后部署时仍然鲁棒”。
18.8 与同类后训练方案对比
把 V4 的两阶段后训练与几个流行方案对比:
| 方案 | 阶段数 | 主要算法 | 领域处理 | 代表模型 |
|---|---|---|---|---|
| 传统 SFT + RLHF | 2 | SFT + PPO | 单阶段统一 | Llama 2 / GPT-3.5 |
| DPO | 1 | Direct Preference Opt | 单阶段统一 | Mistral / Zephyr |
| Constitutional AI | 多 | RLAIF | 单阶段统一 | Claude |
| R1 路线 | 2-3 | SFT + GRPO + 蒸馏 | 推理专长 | DeepSeek R1 |
| V4 两阶段 | 2 | SFT + GRPO + on-policy 蒸馏 | 多领域专长 + 统一 | DeepSeek V4 |
| Llama 4 SFT/RLHF | 2 | SFT + RLHF | 多领域单阶段 | Llama 4 |
V4 在三个维度上独特:
- 多领域专长:先培养 5+ 专家而非单模型 multi-task
- on-policy 蒸馏:让 student 在自己分布上学
- GRPO 取代 PPO:训练成本低、不需要 critic
这种工程权衡让 V4 的最终模型在多个领域同时表现优秀——单领域 vs 通用的 trade-off 被很大程度规避。
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)
# 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. KL 散度 loss
loss = F.kl_div(
F.log_softmax(student_logits, dim=-1),
F.softmax(teacher_logits, dim=-1),
reduction='batchmean'
)
opt.zero_grad()
loss.backward()
opt.step()
if step % 20 == 0:
print(f"Step {step}, domain {domain}: loss = {loss.item():.4f}")
跑通后会观察到:student 的输出分布逐步接近 3 个 teacher 的混合——这就是 on-policy 蒸馏的核心动力学。
18.9·补 后训练阶段的”质量墙”与”对齐墙”
V4 的两阶段后训练面对两堵”墙”——任何 LLM 后训练都要过:
质量墙:模型必须比 base 显著强
如果后训练后的模型在 benchmark 上没有显著提升,整个后训练阶段就是失败的——浪费几百万美元。V4 通过领域专家分别培养,让每个领域单独突破质量墙,再蒸馏融合。
突破质量墙的关键是数据质量 —— 100K 高质量样本胜过 10M 低质量样本。V4 团队大概率用了”R1 蒸馏 + 人工精修”组合——R1 生成大量推理过程,人工筛选最优的 1% 用作 SFT 数据。
对齐墙:模型必须符合人类偏好
模型有能力 ≠ 模型符合用户期望。对齐墙包括:
- 拒绝有害请求(safety)
- 输出格式与用户期望一致
- 推理深度与任务匹配(Non-Think / Think High / Think Max 切换)
- 风格一致性(不要前 100 token 客气、后 100 token 冷漠)
V4 通过 GRPO 在每个领域独立做对齐——比单阶段 RLHF 在多领域同时对齐更稳定。
两堵墙的同时突破:V4 的工程精妙之处在于质量提升 + 对齐改进可以并行——领域专家阶段同时优化”该领域能力” + “该领域对齐”。蒸馏阶段把多领域的”质量 + 对齐”统一融合到一个模型。这种设计让 V4 在多领域同时表现 SOTA。
18.9·补·补 后训练阶段的可观测性
后训练比预训练更难监控——loss 曲线不一定反映真实质量。V4 大概率用了一套多维度评估管道:
自动评估:
- 各领域 benchmark 自动跑(HumanEval / MATH / MMLU / RULER 长文等)
- 每 epoch 跑一次,监控 score 趋势
- pass@1 / pass@10 等多个指标对照
人工评估:
- Win rate vs base model(人工对比 100-1000 prompts)
- 风格 / 安全 / 帮助度 三维度打分
- 每周抽样监控
对比基线:
- 与 V3、Qwen3、Llama 4 等同类模型对比
- 与 V4 base(未经后训练)对比 ——确认提升幅度
回归检测:
- 每个新版本与上一版做 A/B—— 不能新版在某些领域提升、其他领域回退
- 用同一组 prompt 重复跑——检测随机性是否增加
生产监控(GA 后):
- 用户实际 query 的输出质量分布
- 拒答率、不确定性表达频率
- 推理深度分布(Think Max 占比)
这套评估管道的工程量极大——比训练本身还耗工程师时间。这是大模型后训练的”隐性成本”——大多数学术 paper 不报告这部分,但工业部署必须。
18.10 延伸阅读
- DeepSeek-R1 论文(arXiv:2501.12948):R1 路线的源头
- DeepSeekMath 论文(arXiv:2402.03300):GRPO 的提出
- Distilling the Knowledge in a Neural Network(arXiv:1503.02531):蒸馏的源头
- Self-Play Fine-Tuning(arXiv:2401.01335):on-policy 蒸馏的早期理论
- 本书《LLM 评估工程》第 6 章:训练-评估闭环的工程实践
- 本书第 17 章:预训练阶段如何为后训练铺垫
18.10·补 V4 后训练 pipeline 的”复刻路线图”
如果你的团队想复刻 V4 的两阶段后训练(在自己的 base model 上),给一个具体的复刻路线图:
前置条件:
- 已有 base model(pretrained,能力达到 V4 base 的 50%+)
- 至少 32 卡 GPU 集群(用于并行训练 5+ 领域专家)
- 数据团队(每领域准备 100K+ 高质量样本)
- 评估管道(每领域 benchmark 自动跑通)
步骤 1:定义领域分类(1-2 周)
不要从 5 个领域开始——从 2-3 个最重要的领域开始(典型:代码、数学、聊天)。每领域定义:
- 训练数据来源
- benchmark 集合
- 期望提升幅度
步骤 2:领域专家培养(4-8 周 / 领域)
并行训练每个领域专家:
- SFT 阶段:1-2 周,10-50K samples
- RL/GRPO 阶段:2-4 周,多次迭代
- 评估收敛 + 调参:1-2 周
每个专家的训练成本约是 base model 训练成本的 2-5%。
步骤 3:on-policy 蒸馏(2-4 周)
在所有领域专家完成后启动蒸馏:
- 准备多领域混合 prompt 集
- 配置 teacher routing(按 prompt 类型选 teacher)
- 蒸馏到统一模型
- 评估每领域 score 是否接近各自专家的 90%
步骤 4:综合评估 + 迭代(2-4 周)
- 跑全部领域 benchmark
- 与 base model + 其他模型对比
- 如果某领域回退,回到步骤 2 重新培养该领域专家
- 直到综合 score 达标
总时间:3-6 个月。总成本:base model 训练成本的 15-30%。
这条路线图对中等规模团队可行——但需要严格的工程纪律。任何环节松懈(如评估不严格、领域定义模糊),最终模型会出现”训练时看起来好、生产时退化”的尴尬。
18.10·补·补 “领域专家培养 → 蒸馏” 路径的几个失败模式
V4 的两阶段路径已经被证明可行——但任何团队尝试复刻时会遇到几个典型失败模式。把这些失败模式列出来作为警示:
失败模式 1:领域分得过细
某些团队为了”全面覆盖”分了 20+ 领域专家——结果蒸馏阶段无法收敛(teacher 太多、知识冲突)。V4 仅 5 个领域专家是经验值——10 个是上限,超过反而效果下降。
失败模式 2:领域定义有重叠
如果”代码专家”和”数学专家”都涵盖了”算法题”——这部分数据被两个 teacher 同时影响,蒸馏阶段 student 不知道该听谁的。领域定义必须接近正交,重叠 < 10%。
失败模式 3:蒸馏数据分布不均
如果蒸馏阶段的 prompt 90% 是聊天、10% 是代码——shared 蒸馏后的 student 在代码上明显弱于代码专家。蒸馏数据必须镜像目标用户分布——而非任意 sample。
失败模式 4:评估闭环失效
如果某领域 benchmark 不严格——专家训练时”看起来 score 涨了”实际质量没变。蒸馏后 student 在该领域显著退化。每领域必须有可信 benchmark + hold-out 测试。
失败模式 5:忽略领域间负迁移
某些技巧在领域 A 上有效,对领域 B 反而有害。比如”长 thinking” 在数学上加分,在简单聊天上反而让用户烦躁。蒸馏阶段必须监控所有领域的综合表现,不能只盯主要领域。
失败模式 6:训练时间分配错误
每个领域专家训练时间应该按”该领域的难度 / 重要性” 分配。如果”聊天”训了 4 周但”数学”只训了 1 周——蒸馏后数学能力会拖后腿。V4 大概率给”难领域 / 重要领域” 更多训练步数。
这 6 个失败模式都来自工程实践——任何想复刻 V4 后训练 pipeline 的团队都应该提前规避。
18.11 本章小结
- V4 用两阶段后训练:领域专家培养 + on-policy 蒸馏
- 阶段一:从同一 base 出发,训练 5+ 领域专家(SFT + GRPO)
- 阶段二:用 on-policy 蒸馏把领域专家融合到统一模型
- GRPO 取代 PPO——简单、低成本、无 critic
- on-policy 蒸馏让 student 在自己分布上学——避免 teacher 数据偏离
- V4 架构(hash routing / MTP / 稀疏 attention / 混合精度)专门为后训练阶段的稳定性设计
- 与传统单阶段 SFT + RLHF 相比,V4 多领域同时表现优秀的关键在两阶段拆分
第 19 章:把 V4 部署到生产——vLLM / SGLang / TensorRT-LLM 的工程接缝。
评论 0
还没有评论,来说两句吧。
评论加载失败,刷新重试。