miniTE报告:原生NVFP4训RL后期为何失稳,8×B300上提速1.37倍
InfiX.ai、Slime与SGLang团队分析了原生NVFP4在大模型RL中后期失稳的原因,覆盖量化、激活缩放、KV cache与执行路径差异,并提出TRIAGE与miniTE两条路线,在8×B300上实现约1.33–1.37倍学习器更新加速。
InfiX.ai、Slime 与 SGLang 团队发布 miniTE Technical Report。报告盯的是一个现实问题:大语言模型强化学习(RL)里直接用原生 NVFP4 计算,性能收益是有的,但训练后期可能不稳。团队从量化误差、激活缩放、KV cache 精度、训练与采样框架执行路径差异等角度做了诊断,算法侧给出 TRIAGE,工程侧给出 miniTE。核心结论很直接:低精度算子本身保证不了稳定学习。训练端和采样端都用上 NVFP4,log-probability mismatch 仍可能很明显;mismatch 更低、局部计算更快,也不等于最终学习效果能到 BF16 级别。
TL;DR:问题、方案与收益
- 问题与诊断:原生 NVFP4 RL 到训练后期可能失稳。团队把量化格式、激活缩放、KV cache、执行路径这些因素挨个查了一遍,并分析这些误差怎么影响策略更新。
- 算法与工程:TRIAGE 从更新方向入手,控制残余 mismatch 风险;miniTE 减少数值执行差异,同时优化低精度计算路径。报告对二者分别评估。
- 性能收益:在 8×B300 上,miniTE 搭配 BF16 backward 时,完整 learner update 相比 BF16 达到约 1.33–1.37× 加速;另一项固定输出 serving 测试达到约 1.64× 吞吐。
- 限制与开放问题:报告的 online RL 实验里,权重转换与同步开销把采样收益抵消了;实用的 miniTE checkpoint 在五任务平均上仍低于 BF16。算子对齐、gap 较小,并不能保证 BF16 级的学习效果,误差容忍度、更新规则和最终结果都还要继续研究。
为什么原生NVFP4 RL会在后期失稳?
大模型 RL 一般要反复做 rollout、策略概率重算、梯度更新与权重同步。回答一长,生成和训练都要处理大量 token,低精度计算就变得很有吸引力。Blackwell 架构支持原生 NVFP4 matrix multiplication,此前预训练工作也证明过,scaling、mixed precision 与 rounding 策略合适时,低比特训练是可行的。
不过 RL 闭环比预训练更麻烦:训练框架和推理框架在数值实现上得足够一致。团队早期跑 NVFP4 时,reward 先正常往上走,之后却出现异常 entropy、训练端与采样端 log-probability gap 扩大、reward 下滑。只换一个量化算子,或者确认两端都用了 NVFP4,问题都解决不干净。
训练过程中逐步暴露的失败模式
团队在 DAPO 数学任务上用 Qwen3-4B 与 Qwen3-30B-A3B 做 GRPO 训练。早期原生 NVFP4 实验里,模型先正常提升,随后训练恶化。TRIAGE 分析的轨迹中,4B 模型约在 300 steps 后开始不稳,30B 模型的 mismatch 约在 700 steps 后快速上涨。也就是说,光看初始误差或短期 loss 曲线,判断不了 NVFP4 RL 稳不稳。
报告跟踪 reward、entropy、训练—采样 log-probability gap 以及下游任务得分。对 responsei中 tokent,定义 δ_i,t = log π_l(y_i,t | x_i, y_i,<t) - log π_s(y_i,t | x_i, y_i,<t)。其中 π_l是 learner 给出的条件概率,π_s是 sampler 给出的条件概率。负 gap 说明 learner 给的概率更低,正 gap 说明 learner 概率更高;mean absolute gap 统计的是 token 级|δ_i,t| 的平均值。
NVFP4格式、两级缩放与转换误差
报告把三个概念分开:量化误差、checkpoint 转换误差,以及训练端与采样端执行不一致造成的 mismatch。量化误差指低精度计算相对高精度参考的偏差;training–sampling mismatch 比较的是 learner 与 sampler 的真实执行结果;checkpoint 转换和 inference backend 适配还会再引入误差。
NVFP4 用 E2M1 表示量化值:E 和 M 分别是 exponent 和 mantissa 的 bit 数,另加 1 个 sign bit。解码时,q是 E2M1 数值,s_b是每 16 个元素共享的 E4M3 block scale,s_g是 FP32 outer scale。outer scale 可以按 per tensor、per expert 或 per row 来算。
有个 Qwen3-0.6B NVFP4 预训练 checkpoint 曾因 fused QKV 结构处理不对,性能掉得很厉害。修复之后,Lambda 平均准确率分别是:BF16 约 0.3043,一维量化约 0.3056,二维 block-scaled quantization 约 0.3109。可见在把失败算到 FP4 格式头上之前,模型结构适配和转换流程得先查清楚。
在 Qwen3-4B 上,online quantization 相比 BF16 让 Lambda-base 与 Math23K 分数分别降了 0.0355 与 0.047;offline conversion 又额外带来 0.0089 与 0.019 的下降。靠这些实验,团队把格式/数值路径的损失和转换/scale 处理的损失拆开了。
就算都用 NVFP4,训练端和采样端也可能对不上。
早期配置里,两端 mean absolute log-probability gap 是这样的:
| Training / sampling precision | Dense | MoE |
|---|---|---|
| BF16 / BF16 | 0.0110 | 0.0172 |
| NVFP4 / NVFP4 | 0.1142 | 0.0668 |
| NVFP4 / BF16 | 0.1376 | 0.0621 |
| BF16 / NVFP4 | 0.1690 | 0.0747 |
dense 模型用的是 Qwen3-4B,MoE 模型是 Qwen3-30B-A3B。把 offline ModelOpt conversion 换成 online quantization 之后,dense 模型的 gap 依然在 0.1142 左右。两端就算跑同样的 quantization/GEMM operators,差异还是消不掉。所以问题不光是权重量化,输入怎么组织、scale 怎么算、量化周边那些操作都脱不了干系。
激活精度、缩放粒度与KV Cache
权重固定成 NVFP4 后,调高 activation precision 就能看出激活量化带来的影响。报告里 W 和 A 分别指 weights 与 activations 的 bit width,比如 W4A16 就是 4-bit weights 配 16-bit activations。
| Weights / activations | Dense gap | MoE gap |
|---|---|---|
| W4A16 | 0.0139 | 0.0166 |
| W4A8, MXFP8 activations | 0.0363 | 0.0227 |
| W4A4, NVFP4 activations | 0.0903 | 0.0445 |
换成 W4A16,gap 就压到了 BF16 参考水平附近,说明这套配置下 activation quantization 是主要变量。另一组固定配置里,KV cache 从 FP8 改成 BF16,gap 由 0.0721 降到 0.0583。sampler state precision 同样牵扯跨框架一致性。
缩放域还会带来上下文依赖。sampler decoding 一般一次只处理当前 token,learner 往往一次啃完整个 response。activation outer scale 要是用 tensor-wide amax,两边看到的 token 集合不一样,scale 就可能不同,同一个 token 在两条执行路径上量化出来的结果也就对不上。
TRIAGE:从更新方向控制残余mismatch风险
工程上再怎么对齐,低精度训练还是可能留下躲不掉的 mismatch。TRIAGE 不假设误差能全被消掉,它看的是 mismatch 和 update direction,在高风险片段里调整更新方式,把残余误差对学习过程的破坏压下去。
报告强调,mismatch 危不危险,要看它跟策略更新方向是什么关系。有些时候数值误差只是让结果偏一点;可误差方向和更新方向叠在一起,就可能把错误策略的概率放大,entropy 出异常、reward 往下掉,甚至训练后期直接崩。

训练动态上,TRIAGE 靠识别并处理高风险区域,把 negative tails 和局部不稳定控制住,稳定性和任务表现都跟着改善。报告把 TRIAGE 归为算法侧方案,跟 miniTE 的系统工程优化分开评估。
miniTE:把量化策略、线性层与计算后端解耦
大型训练框架里,动一下 scale granularity 或 GEMM backend,layer wrapper、grouped layout、communication 和 autograd 往往都得跟着改。miniTE 想做的是把 quantization policy、linear layers 与 compute backends 拆开,开发者在现有训练流程里换掉某条计算路径,再分别去看数值正确性、学习行为和运行成本。
miniTE 提供 precision configuration、alignment checks 与 performance analysis,用来排查 learner 和 sampler 在低精度路径上的执行差异。它不是换一个算子那么简单,而是一套围着 NVFP4 训练与推理路径对齐搭起来的工程框架。
Transformer Engine路径优化:减少准备与调度开销
报告还讲了跟 Transformer Engine per-token NVFP4 path 相关的联合工作。优化手段有 contiguous layouts、device-side metadata、amax reuse、grouped GEMM 以及 fusion,目的是把低精度执行中数据准备和 kernel dispatch 的开销降下来。
这些优化盯的不只是算子 microbenchmark 的峰值,而是让 low-precision computation 在完整 learner update 里真正变成收益。RL 里采样、训练、权重同步和框架切换,每一环都会影响端到端收益。

实验结果:速度提升明确,但学习质量仍有差距
系统性能上,8×B300 平台里,miniTE 的两条路径在 BF16 backward 配置下,相比 BF16 完整 learner update 拿到约 1.33–1.37× 的 paired speedup。另一个固定输出 serving 测试中,吞吐约为 BF16 的 1.64×。
报告也把话说清楚了:这些 learning results 和 system results 来自不同配置。mismatch 更低、局部计算更快,不能直接说明已经达到 BF16 级学习,也证明不了端到端 RL 一定加速。报告的 online RL run 里,weight conversion 与 synchronization 开销把 sampling gains 抵消掉了;实际 miniTE checkpoint 在五任务平均上还是低于 BF16。

结论:NVFP4 RL的难点不只是低比特算子
报告真正推进的地方,是把原生 NVFP4 做 RL 这件事的追问换了个层次:原来问的是低精度矩阵乘能不能跑,现在问的是低精度执行会怎样牵动策略学习。在 RL 训练里,可能引发不稳定的环节有好几处,包括 learner 与 sampler 的概率一致性、activation scaling domain、KV cache precision、checkpoint conversion、inference adaptation,以及 update rule。
TRIAGE 管的是算法这一头,用来消化残余的 mismatch 风险;miniTE 管的是工程这一头,尽量压掉本可避免的数值差异,同时把低精度执行效率提上去。两边合起来指向同一件事:NVFP4 想在 RL 里真派上用场,数值对齐、误差容忍、更新规则和最终任务表现得一起盯。眼下的结果已经显出可观的性能潜力,不过要稳定复现 BF16 级的学习效果,还有不少开放问题等着继续研究。