Wink Pings

几个RL专家并成一个模型:MOPD进了TRL,但token分配有个坑

TRL开始支持多教师策略蒸馏MOPD。大厂用它把数学、代码、指令跟随等RL专家并回一个学生模型,小团队也能按同样路子试。真正容易翻车的地方在训练token分配:指令跟随可能占了20%的prompt,却只拿到1%到3%的token。

TRL 开始支持 MOPD 了。

MOPD 全称 Multi-Teacher On-Policy Distillation,多教师策略蒸馏。Hugging Face 的后训练核心库 TRL 里,异步版 AsyncDistillationTrainer 已经能把每个 prompt 路由到对应的专家教师,同步版 DistillationTrainer 的支持在 #7215。

这件事值得看一眼,因为 MOPD 是今年前沿实验室技术报告里反复出现的一类后训练配方。小米在 2026 年 1 月给 MiMo-V2-Flash 命名,之后 DeepSeek、Moonshot、NVIDIA、Liquid AI、Mistral 等都在用。现在 TRL 把工程链路打包了一块,小团队复现大厂那套多教师蒸馏,门槛低了不少。

原文链接在这里:Sergio Paniego 的文章,推文在这里。

先说人话:MOPD 在解决什么

让一个模型同时擅长数学、代码、工具调用、指令跟随,用一次 RL 跑完很难。训练时各领域会把模型往不同方向拉,每个领域只分到 batch 里薄薄一层,一个能力涨了,另一个能力可能悄悄掉。

MOPD 的做法是:先按领域训练各自的 RL 专家,再把专家并回一个学生模型。

完整配方通常是三步:

  1. General SFT:一个模型在混合数据上做常规监督微调,把各领域基础打一遍。
  2. Domain experts:从这个 checkpoint 出发,每个领域单独用 RL 训一个专家,比如数学一个、代码一个、指令跟随一个、agent 任务一个。每个专家只负责把自己那一门做到很好。
  3. Fusion:学生模型通常是那个 SFT checkpoint,它回答各领域 prompt。prompt 属于哪个领域,就由哪个领域的专家教师逐 token 打分,学生朝教师的分布靠。

原文里的配图值得对照看:Liquid AI 的 LFM2.5-2.6B 训练配方图、MiMo-V2-Flash 技术报告 Figure 3、Nemotron 3 Ultra 技术报告 Figure 10,还有 TRL 跑 60 步后记录的 teacher_token_frac 和 teacher_jsd 曲线。图在原文里,这里不伪造图片链接。

On-policy 和 token 级信号

MOPD 底子是 on-policy distillation,只是教师从一位变成多位。

学生从自己生成的样本里学。教师读学生实际写出来的答案,逐 token 给反馈。普通 SFT 只拿教师写好的文本训练学生,推理时学生却要续写自己的文本,前面一步错,后面可能走到训练时没见过的位置。用学生自己的样本训练,就是 on-policy 这一层的意思。

信号是稠密的。RL 通常一条回答给一个 reward,这里每个 token 都有教师反馈。损失常用学生和教师之间的 reverse KL,看教师有多不认同学生每个 token 的选择。教师自己不写答案,只读学生答案。

各实验室在 token 上取教师分布的方式不一样:Nemotron 3 Ultra 和 MiMo-V2-Flash 只用学生写出那个 token 的教师概率;Open-MOPD 比较最可能的 16 个 token;DeepSeek-V4 用全词表分布,因为单 token 版本梯度方差高、训练不稳;Mistral Large 4 也用全分布。

每个 prompt 只交给一个教师。数学 prompt 只由数学专家打分,代码 prompt 只由代码专家打分。这些教师通常和学生同尺寸,从同一个 checkpoint 出发,靠单领域 RL 获得教师价值。

谁已经在用

原文列了一张表,挑几个有代表性的:

  • Mistral Large 4 在 2026 年 11 月用了三个教师,按推理努力程度分高、中、低,不按领域分。
  • Liquid AI 的 LFM2.5-24B-A2B 有两个 MOPD 阶段,一个非 agentic,一个 agentic。
  • 小米 MiMo-V2.6 用了 MOPD2,有两族领域教师。
  • Moonshot Kimi K3 用了九个专家,按领域和推理努力程度拆。
  • NVIDIA Nemotron 3 Ultra 用了十个以上教师,跑两轮 MOPD。第一轮后,从合并模型出发再训新教师,再跑一轮。NVIDIA 还放出了五个教师 checkpoint,覆盖 STEM、竞赛代码、指令跟随、通用推理和聊天。多数实验室只发最终模型,专家 checkpoint 仍然少见。
  • DeepSeek-V4 用了十个以上领域教师,替代 V3.2 的混合 RL 阶段。
  • 智谱 GLM-5 有一个变体,教师是早期 RL 阶段的最终 checkpoint。

这招看起来像 post-train 里的 MoE。各领域先长出自己的专家,再通过蒸馏把能力压回一个稠密学生。工程上是否划算,取决于专家训练成本和合并后的收益。

TRL 里怎么跑

TRL 的例子用了 Open-MOPD 放出的真实专家。学生是 SmolLM3-3B 的 SFT checkpoint,教师是三个从它出发用 GRPO 训出来的专家,分别管数学、代码、指令跟随。数据里已经标好每个 prompt 的领域。

关键配置长这样:

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,
)

每个教师用 vLLM 起服务,训练器拿到一个教师 URL 列表,数据里加一列 teacher_id,把 prompt 路由到对应专家。生成、教师打分、训练异步跑,学生一边生成一边训练。

这套东西需要五个进程:学生自己的 vLLM 服务,负责生成答案并在每步后接收更新权重;三个教师 vLLM 服务,只打分;再加训练进程。原文在 4 张 H200 上的摆法是:GPU0 放学生 vLLM,GPU1 让数学和指令跟随教师共享,GPU2 单独放代码教师因为代码 prompt 最长,GPU3 跑训练。

如果自己机器跑,照 launcher.py 里的 vllm serve 命令抄。每个教师的 --max-model-len 要比学生大,因为打分要送学生完整答案再加一个 token。共享 GPU 的两个教师要先后启动,vLLM 会按启动时的空闲显存决定内存。

真正要盯的指标:token 分配

训练器会按教师记录指标。teacher_jsd/<id> 看学生离每个教师有多远,越低越近;teacher_token_frac/<id> 看每一步训练里,这个教师分到了多少 token。

teacher_token_frac 最容易被忽略。损失按 token 平均,一个领域占的权重跟它产出的 token 数走,不跟 prompt 数走。数学或代码答案是一长串推理,几千 token;指令跟随的答案可能只有几百 token。结果是,指令跟随可能占了 20% 的 prompt,却只拿到 1% 到 3% 的 token,学生从这位教师身上学得很少。Open-MOPD 作者注意到这个问题,论文里有深入解释和修法。

TRL 用 40/40/20 的数学、代码、指令跟随 prompt 配比跑了 60 步,约是论文训练量的 1%。前几步就能看到失衡:指令跟随一开始 token 份额正常,等数学和代码答案变长,它掉到几个百分点。学生离数学和代码教师越来越近,离指令跟随教师几乎没动。

60 步后的评测:

模型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 accuracy,代码没评。60 步已经能看出学生数学和指令跟随都涨了,说明 TRL 这条链路能跑通。数学落到论文最终模型附近,4 个样本下几个点算噪声。差距在指令跟随,正好是 token 最少的领域。

判断

MOPD 本身不神秘,难点在工程和训练信号分配。TRL 这次把路由、异步生成、教师打分、训练串起来,降低了试错成本。对已有 RL 专家的小团队,只要能保证专家从同一个 base model 出发、共享 tokenizer,用 vLLM 起服务,再给每个 prompt 标好领域,就能试。

别只看最终评测涨没涨。先看 teacher_token_frac。如果某个领域 prompt 不少但 token 份额极低,学生大概率没从那位教师身上学到多少。调数据配比、给短答案领域加权,比盲目加训练步数更直接。

参考来源:Sergio Paniego 原文,原推文,触发这条内容的推文。

发布时间: 2026-11-10 01:36