如何让大模型强化学习“不翻车”:30B MoE 实测 30 万 GPU 小时后的 7 条血泪教训

核心问题:
“用 token 级目标去优化序列级奖励”为什么总崩溃?
答案一句话:只有当“训练-推理差距”和“策略陈旧”同时被压到足够小,一阶近似才成立,训练才不会爆炸;否则,Importance Sampling、Clipping、Routing Replay 就是三根救命稻草。


0. 一张图速览全文结论

场景 必须打开的三板斧 常见翻车点 实测最优组合
纯 on-policy Importance Sampling 训练-推理 KL 爆掉 MiniRL(带 IS)
轻度 off-policy(N=2) IS+Clipping+R2 熵崩、奖励震荡 MiniRL+R2
重度 off-policy(N≥4) IS+Clipping+R3 专家路由漂移 MiniRL+R3

1. 为什么序列级奖励直接优化不了?

核心问题:REINFORCE 算出的序列似然比方差大到无法训练,怎么办?
答案:用 token 级似然比做一阶近似,但得先满足两个前提:

  1. 训练引擎与推理引擎算出的 logits 几乎一样(训练-_inference discrepancy →0)
  2. rollout 策略与待更新策略足够接近(policy staleness →0)

只要任一前提被破坏,近似就失效,梯度噪声指数级放大。
血泪教训:FP8 推理+BF16 训练, discrepancy 直接被放大 10×,第一轮更新就炸。


2. 一阶近似失效时,长什么样?

下面这段代码复制粘贴即可复现“熵崩塌”现场(基于原文 MiniRL 超参):

# 伪代码:移除训练-推理 IS 权重
for step in range(1000):
    ratio = πθ(y_t) / μθ_old(y_t)   # ← 把 IS 权重整行注释掉
    loss = -ratio * A_hat * logπ
    loss.backward()

运行 200 步后,熵从 0.9 掉到 0.1,benchmark 得分直接腰斩——这就是论文 Figure 1 里“MiniRL – train-infer-IS”曲线突然坠崖的原因。


3. 三板斧之一:Importance Sampling 只能补“引擎差距”

场景示例
你用了 vLLM 做 rollout,训练却在 Megatron 里,两者 kernel 实现不同,同一输入 logits 差 0.02。
做法
把 token 级 IS 权重 πθ(y_t)/μθ_old(y_t) 留在 loss 里,别偷懒。
反思

我曾以为“只差 2% 没关系”,结果 600 步后 KL divergence 飙到 0.01 以上,奖励方差直接翻 3 倍。——作者备注


4. 三板斧之二:Clipping 负责“策略陈旧”

核心问题:mini-batch 拆分多步更新后, rollout 策略和最新策略差距拉大怎么办?
答案:用 PPO 式 Clipping 把 ratio 限制在 [1-ε_low, 1+ε_high] 之外就停梯度。
场景示例
全局 8192 条回答拆成 8 个 mini-batch,第 8 批回答实际上是用“7 次更新前”的老策略采的。
实验结论
Figure 4 里,不开 Clipping 的曲线在 1500 步熵跌至 0.05;开了 Clipping 后能稳到 4000 步。


5. 三板斧之三:MoE 模型必须“Routing Replay”

5.1 专家路由带来的双重漂移

漂移类型 产生根源 后果
训练-推理不一致 路由 kernel 不同 → 专家选错 logits 差被放大
策略陈旧 参数更新 → 同 token 换专家 激活参数集变天

5.2 Vanilla Routing Replay(R2)与 Rollout Routing Replay(R3)

  • R2:梯度阶段固定用 rollout 训练引擎选的专家 e^π_old
  • R3:更激进,直接把推理引擎选的专家 e^μ_old 搬到训练阶段

使用建议

  • 拆分比例 N=2→R2 足够;N≥4→R3 更稳。
  • 轻度 off-policy 用 R3 反而掉点,因为它动了“第一 mini-batch”的目标策略,见 Table 1。

6. 我的实验:30B MoE 如何走完 30 万 GPU 小时?

6.1 任务与数据

  • 数学竞赛题 4096 道,二值奖励:答案对=1,其余=0
  • 评测集 HMMT25 / AIME25 / AIME24 共 90 题

6.2 关键超参

参数
最大生成长度 32 k token
FP8 推理 开(加大 discrepancy 压力测试)
TIS 截断阈值 5
ε_high / ε_low 0.27 / 0.2

6.3 结果速览

  • on-policy:MiniRL(带 IS)→ 1200 步 0.75 分,熵 0.35,KL 10^-3 级
  • off-policy N=8:MiniRL+R3 → 5000 步 0.77 分,熵 0.32,无崩溃

7. 冷启动不重要,稳定训练才决定终点

核心问题:不同教师模型蒸馏出的冷启动,会影响最终天花板吗?
答案:只要 RL 过程稳,三份冷启动(Qwen3-Max / DeepSeek-R1 / GPT-oss-120B)600 步后收敛到同一 0.86 分区间,差异<0.01。
作者感悟

与其花两周调“最佳冷启动”,不如把 Clipping、Routing Replay 开好,然后放心堆算力——这才是 ROI 最高的路线。


8. 实用摘要 / 操作清单

  1. 训练-推理精度不同?务必保留 token 级 IS 权重。
  2. 拆分 mini-batch 多步更新?一定加 Clipping(ε≈0.2-0.3)。
  3. MoE 场景:

    • N≤2 → 用 R2
    • N≥4 → 用 R3
  4. 观察两个健康指标:

    • 熵 < 0.3 且持续下降 → 快崩了
    • KL(μ||π_old) > 0.01 → 引擎差距过大
  5. 冷启动差距会被长 RL 抹平,把精力留给稳定算法。

9. One-page Summary

We formulate RL with LLMs as “token-level surrogate = first-order approximation of sequence-level reward”. The approximation holds only if training-inference discrepancy and policy staleness are both small. Extensive 30B-MoE experiments show:

  • Importance Sampling corrects engine gap.
  • Clipping reins in stale policy.
  • Routing Replay (R2/R3) tames expert-routing drift.
    Once stability is secured, prolonged RL erases cold-start differences and consistently pushes models to the same performance ceiling.

10. FAQ

  1. Q:直接把序列似然比截断行不行?
    A:方差依旧大,且 MoE 里 expert 不一致问题没解决,仍会崩。

  2. Q:Clipping 阈值怎么选?
    A:0.2-0.3 是 sweet spot;再大约束不足,再小更新太慢。

  3. Q:R2 与 R3 能一起开吗?
    A:没必要,两者互斥且会引入双重偏差,选其一即可。

  4. Q:BF16 推理是不是就没必要做 IS?
    A: discrepancy 降到 10^-4 以下可忽略,但保留 IS 几乎零成本,建议保守留。

  5. Q:为什么不用 PPO 的 value 模型?
    A:序列奖励难以给 token 级 value 打可靠分数,实验发现 variance 更高。

  6. Q:长度归一化到底哪不好?
    A:它把不同长度回答的梯度拉到同一量级,违背“长回答应负更大责任”的直觉,一阶近似不再等于原目标。

  7. Q:entropy 掉到多少要停?
    A:一旦低于 0.25 且仍在降,基本 50 步内必崩,建议提前重启。

  8. Q:算力有限,只能跑 N=2,该怎么组合?
    A:MiniRL + Clipping + R2 是最稳性价比方案,能把 4096 条 batch 拆 2 步更新且无崩溃。