Wink Pings

三个RL专家教一个学生,MOPD在TRL里跑通了

TRL新增多教师在线策略蒸馏。Open-MOPD三个专家加SmolLM3-3B跑60步,数学提分,指令跟随却只拿到1%到3%的token。代码、指标和坑都在。

MOPD这个缩写今年在后训练报告里出现得有点密。Sergio Paniego 在周末读文里把它拆了一遍,重点落在 TRL 的新支持上:AsyncDistillationTrainer 已经能跑多教师在线策略蒸馏,同步版 DistillationTrainer 的 PR 是 #7215。

先补上下文。MOPD 全称 Multi-Teacher On-Policy Distillation。流程通常分三段:先用混合数据做通用 SFT;再从同一个 checkpoint 出发,每个领域用 RL 练一个专家;最后让学生模型回答各领域 prompt,对应领域的专家逐 token 打分,学生朝专家的分布靠。MiMo-V2-Flash 在 2026 年 1 月给这套方法命名,之后 DeepSeek-V4、Kimi K3、Nemotron 3 Ultra、LFM2.5、Mistral Large 4 等模型都在报告里写了类似用法。NVIDIA 的 Nemotron 3 Ultra 用了十多个教师,跑了两轮 MOPD;第二轮教师从合并后的模型重新训练。Mistral Large 4 按推理努力分高中低三个教师,没按领域分。NVIDIA 还放了五个教师 checkpoint 到 Hub,覆盖 STEM、竞赛代码、指令跟随、通用推理和聊天。多数实验室只放最终模型,专家 checkpoint 仍然少见。

它成立靠三件事:学生从自己生成的样本学,教师只给分不写答案;信号是 token 级的,常用 reverse KL,每个 token 都有反馈;每个 prompt 只路由给一个教师。教师通常和学生同尺寸、同起点,共享 tokenizer。教师有用,靠的是各自只练一个领域,规模未必更大。

TRL 的接法是 AsyncDistillationTrainer。每个教师用 vLLM 起一个服务,配置里给一个 URL,数据里加 teacher_id 列,把 prompt 路由到对应专家。生成、教师打分和训练异步跑,学生一边生成一边训练。原文示例用 Open-MOPD 放出的三个专家,学生是 SmolLM3-3B 的 SFT checkpoint,领域是数学、代码和指令跟随。数据按 40/40/20 采样,因为原始 prompt 里指令跟随约占一半。核心配置如下:

from trl.experimental.async_distillation import AsyncDistillationConfig, AsyncDistillationTrainer

config = AsyncDistillationConfig(
    teacher_server_urls={
        "math": "http://localhost:8001",
        "code": "http://localhost:8002",
        "if": "http://localhost:8003",
    },
    beta=1.0,
    teacher_top_k=1,
    max_completion_length=16384,
    vllm_server_timeout=3600,
)
trainer = AsyncDistillationTrainer(
    model="BytedTsinghua-SIA/Open-MOPD-SmolLM3-3B-MixSFT",
    args=config,
    train_dataset=dataset,
)
trainer.train()

这段配置用 reverse KL,beta=1.0,只取学生采样 token 的教师概率,和 Nemotron 3 Ultra、MiMo-V2-Flash 的做法一致。Open-MOPD 原文比较 top-16,这里没跟。teacher_top_k=1 只在 forward KL,beta=0.0 时有意义。所有教师必须和学生共享 tokenizer,否则逐 token 对比无从谈起。

跑起来要同时起五个进程:学生 vLLM、三个教师 vLLM、训练。原文在 4 张 H200 上的排法是 GPU0 学生,GPU1 数学和指令跟随教师共享,GPU2 代码教师单独,GPU3 训练。代码教师单独因为代码 prompt 最长。HF Jobs 一条命令:

hf jobs uv run --flavor h200x4 --image huggingface/trl --secrets HF_TOKEN --timeout 6h https://raw.githubusercontent.com/huggingface/trl/main/examples/async_distillation_mopd/launcher.py

自己机器跑,从 launcher 里抄 vllm serve 命令。教师的 max-model-len 要比学生大,因为打分要送学生完整答案再加一个 token。共享 GPU 的两个教师顺序启动,vLLM 按启动时空闲显存算内存。

原文跑了一个 60 步的小实验,约论文训练量的 1%。指标里 teacher_jsd/

评估表:

模型AIME24AIME25IFEval
MixSFT 起点17.519.267.5
TRL MOPD 60 步24.222.573.0
Open-MOPD 最终模型19.225.075.8

AIME 每个问题 4 个样本,IFEval 是 strict prompt-level 准确率,代码没评。60 步数学到论文最终模型附近,几个点算噪声;IFEval 的差距对应 token 少。这更像管线验证。60 步能看趋势,离 benchmark 结论还远。

MOPD 解决的是多个 RL 专家怎么并回一个模型,不让一次 RL 同时平衡所有领域。现在有 TRL 的 AsyncDistillationTrainer、Open-MOPD 的数据和专家,试起来的门槛低了不少。如果你有同 base 的 RL 专家,serve 成 vLLM,给每个 prompt 标 teacher_id,就能跑。跑起来先盯 teacher_token_frac,别只看平均 loss。

原文:https://x.com/i/article/2116090519092678656 。配方图在原文里:Liquid AI 的 generalist/specialist 双 lane、MiMo-V2-Flash 的 Figure 3、Nemotron 3 Ultra 的 Figure 10。本文不重复贴图,避免二手图失真。

发布时间: 2026-11-09 15:30