AREX Feed Article
Modal 用六种加速器、三种精度做 RL 采样器:称训练稳定收敛、成绩与全 B200 方案相当且采样成本低 15%
北京时间 10 月 14 日凌晨(UTC 时间 10 月 13 日 18:26),AI 基础设施公司 Modal 在连发六条推文,并在同日发布(迈向混精度、混加速器采样器上的 RL),报告一项针对 RL 训练基础设施的实验:用完全异步强化学习在 agentic coding 任务上训练开源权重模型 Qwen3.6-35B-A3B 时,采样器不锁在同一种加速器上,而是同时跑在 B200、B300、H100、H200、A100 和 RTX PRO 6000 六种加速器上,覆盖 BF16、FP8 和 NVFP4 三种数值精度;配合 off-policy correction(离策略修正),训练稳定到收敛,SWE-bench Pro V2 成绩与只用 B200 的同构采样器持平,而采样器每步更新的成本低约 15%。
Modal 把这项实验的动机写在推文开头:RL 训练通常把采样器和训练器放在同一代最新加速器组成的同构集群里,让两边数值上尽量接近、吞吐更快,但这种常规做法“丢掉了为其他厂商和世代所做的推理优化工作,限制了你能利用的容量,而且不必要地昂贵”。博文称,在大型 RL 运行里,采样环节要占用 80%~85% 的 GPU(这一比例引用自 Reflection 与 Microsoft 的公开材料)。
需要说明:上述结果均为 Modal 自报,博文中的数据全部出自公司自有运行,本文无法独立核实训练过程与结果,写作时也未检索到第三方复现的公开记录。
八组采样器,一个 BF16 训练器
实验的具体配置是:训练对象为 Qwen3.6-35B-A3B,上下文最长 256K token;任务取自小米随 MiMo-V2.6 模型发布的 2,700 个仓库级编程任务,Modal 删掉了其中仓库历史等会泄漏参考修复的痕迹。每个回合(episode)里,模型多轮迭代为某个 issue 生成补丁,通过 bash 工具提交进 Modal Sandbox;补丁在新沙箱里通过全部测试得 1 分,否则得 0 分。
RL 框架用的是 radixark 的 Miles,采样器用 SGLang,训练器用 Megatron-LM,在 B200 GPU 上以 BF16 更新策略。训练完全异步,策略滞后(staleness)不设上限,平均约 4 个训练步;每次更新使用 128 个 prompt、每个 prompt 采样 8 条轨迹。训练器不复现采样器的 MoE(混合专家)路由决策。
Modal 在中说明了两种设置。混合采样器分成八组:B200 和 B300 跑 NVFP4 权重,H100 和 H200 各有 FP8 与 BF16 两组,A100 和 RTX PRO 6000 跑 BF16。每组只跑自己加速器的 kernel(计算核心),KV cache(注意力键值缓存)统一放在 FP8;一个路由器按各组服务容量的比例把 agent 会话分到八组,让每组在整个训练过程中承担稳定份额的请求。在 Modal 上,各组按需伸缩、运行中途也能调整,并以各自的精度加载训练器的最新权重。对照组则是只在 B200 上、BF16 权重加 BF16 KV cache 的同构采样器——与训练器同加速器、同精度,只差 kernel 和滞后。
评估在 SWE-bench Pro V2(与训练集无重叠)及其难子集 HARD-51 上进行,每个检查点(checkpoint)都用 BF16 评估。
不加修正,同构采样器也一样会崩
Modal 从不做失配修正的标准 GRPO(Group Relative Policy Optimization)起步,结果两种设置都崩:混合采样器上,GRPO 在训练开始后不久就崩掉;同构采样器撑得久得多,最终仍然崩。三项修正各自单独使用只能推迟崩溃,所有这类运行最终停在基座模型水平或更低。
崩溃有三个共同征兆:训练奖励(reward)下降,sampler–trainer KL(采样器与训练器概率分布间的 KL 散度)增长到 3 倍以上,多数 episode 以重复的格式错误结束。轨迹长度没有一致规律,有的崩在提前收尾,有的开始重复自己反而跑得更长。同构采样器的起点 KL 低约 4 倍,但从大约第 100 步起走上同一条路——单纯把采样器换成与训练器同款硬件、同精度,只是把崩溃往后推。
崩掉的样子很具体:模型很少写出格式坏掉的命令,而是在任务做到一半时不再调用工具,连续三次回复不带工具调用后回合被终止。GRPO 在混合采样器上的第 40 步检查点,62% 的评估 episode 这样结束,中位第 22 回合就停(通过的 episode 中位跑满 57 回合);这些最后回复里 98% 是空的,只有 6% 含畸形调用。
三项修正:重要性比率掩码、分数居中、top-p 掩码重放
修正以 GRPO 为底座,叠加三件东西:
- 掩码重要性采样(masked importance sampling,MIS):每个 token 的更新项乘上它的重要性比率,比率落在固定范围之外的 token 直接置零。保留下来的 token 上,期望更新对齐训练策略,且每个比率有界——没有掩码时,采样器极少产出的 token 可能携带极大的比率、主导整个更新。
- 分数居中(score centering,SC):在每个位置减去采样策略下 log 概率梯度的期望。这样在期望上,只有 token 之间 advantage(优势值)的差异才会移动策略;重要性比率本也能除掉漂移,但掩码会把它带回来。
- top-p 采样加掩码重放(top-p with mask replay):采样器只从 top-p 候选集里采样,可能携带极端比率的极稀有 token 进不了数据;训练器在同一个候选集上重新归一化自己的概率,让两边共享支持集。
结果分层明显。SC + MIS(带或不带 top-p)能稳定训练到底:HARD-51 上的 pass@4(四次生成内至少一次通过的比例)在前 100~140 步上升,随后停在约 65%~75%;全集从 89% 升到约 94%。消融实验里其余组合都以失败告终,方式各不相同:GRPO 的梯度范数开局不久涨约 20 倍;GRPO + MIS 修好了加权,但掩码带回的漂移让它在训练中途熵坍缩,KL 和范围外比率 token 的占比跳升 10 倍以上;单独 SC 的熵持续下降,KL 涨约 3 倍后崩;GRPO + top-p 的 KL 稳步爬升、崩得晚一些;SC + MIS 全程稳定(除一次短暂的梯度尖峰),KL 升约 2 倍;SC + MIS + top-p 的 KL 最低,梯度范数与熵保持平稳。
平均 4.7 倍失配下追平同构采样器
三件修正叠满之后(SC + MIS + top-p),混合采样器与同构采样器的 pass@4 在整个训练过程中保持接近,训练奖励和梯度范数也走出相似路径——尽管前者的 sampler–trainer KL 平均是后者的 4.7 倍。熵在约 160 步前两边一致,之后同构采样器上熵上升,混合采样器上持平。
成本方面,训练的大部分时间里,混合采样器每步更新的成本比同构方案低约 15%。Modal 在中注明,这套配置是为验证性能搭的,没有按最低成本优化:每组采样器可以单独调优,组合也可以向最划算的组倾斜,进一步节省的空间还在。
分组数据说明修正为何能覆盖这么大的失配。H100 FP8 组供了 10% 的训练样本,却贡献了 29% 落在 [0.2, 5] 范围外的重要性比率 token;B200 和 B300 的 NVFP4 组供了 47% 的样本,只占 16%。即便在最失衡的 H100 FP8 组里,也只有约 0.3% 的 token 落在范围外。修正按每个 token 自己的比率加权,同一套修正对混合里的每一组都成立。
Modal 的论点:盯住失配的增长,而不是它的大小
Modal 在博文里反驳了一个通行看法:失配越小训练越稳,所以要把采样器的数值锁得离训练器很近。博文给出的判断是:稳定性更多取决于失配是否持续增长。没有修正时,失配让更新带偏、自我放大直到崩溃;同构 GRPO 的起点 KL 更低,照样崩了,只是更晚。加上修正后,失配可以停在很高的水平而训练照样稳定。
博文也解释了为什么不去做“真 on-policy”(每个 token 都从正在训练的策略中采样):对齐意味着两边都用确定性、批不变(batch-invariant)的 kernel(采样变慢,或要为每个模型单写 kernel)、两边同一种精度(A100 没有 FP8 tensor core,Hopper 没有 FP4)、同步运行(放弃异步吞吐)、复现 MoE 路由(引入有偏的目标策略和额外通信开销)。逐项对齐等于把采样器和训练器绑在一起,各自交出一部分优化;Modal 的做法是让两边保留各自的优化,用修正处理差异。
从另一个策略生成的数据中学习,是 RL 的老问题。博文追溯到 IMPALA:把生成经验的 actor 和 learner 分开,对策略滞后做修正,而不是让两边锁步。Modal 的补充在于:修正不需要知道两个策略为什么不同——kernel、精度、加速器、滞后,统统只表现为一个不同的采样策略 q,于是同一套修正同样适用于不同精度或加速器带来的差异。
自报结果,等待外部检验
这条主线推文截至发稿获得 92,433 次浏览、1,041 个赞、1,035 次收藏。回复里有实质性的技术追问:署名 Vstorm 首席工程师的 Kacper Włodarczyk 在中问,混合硬件上生成的轨迹(rollout)会拉大推理引擎和训练器之间的对数概率(logprob)差距,该怎么处理。博文机制部分处理的就是这类差异:每个采样器逐 token 记录自己的概率 q,修正按 q 与训练策略的比率逐 token 进行。
Modal 在博文里同时列出了这些结果的边界。MIS、SC 和 top-p 都是逐 token 近似,轨迹前缀和 advantage 仍然来自采样器;序列级修正(如 GSPO 或 DeepSeek-V3.2 的做法)和 staleness 上限可以防住这类误差,但本次运行一项都没用,训练照样稳定到头。top-p 加掩码重放还改变了被优化的对象——更新只优化截断到 top-p 候选集的策略,集合外的 logit 在该位置拿不到梯度;Modal 称,评估从全词表采样时,SC + MIS + top-p 与从全词表训练的 SC + MIS 表现相当。另外,修正不改变采样器产出哪些轨迹,选精度或加速器由此从“吞吐与稳定”的权衡,变成“吞吐与样本效率”的权衡。
按 Modal 的说法,修正一旦成立,改变的是 RL 训练的形态:采样不再需要一整片同构集群,任何跑得动该模型的加速器都能贡献样本,采样集群可以和训练器分开扩缩、中途加容量,推理侧的更快 kernel、投机解码、更低精度也能直接进 RL。这些判断目前还没有 Modal 之外的公开运行数据可以检验。
参考链接
- Modal 官方 X 帖文(2026-10-13):
- Modal 博文《Toward RL on mixed-precision, mixed-accelerator samplers》(2026-10-13):
- Modal X 线程·实验设置:
- Modal X 线程·KL 与成本结果:
- Kacper Włodarczyk 的回复: