AnalysisNov 8, 20266 min read13 sources

Miles ships NVFP4 W4A16 fake-QAT; BF16-level RL stability is not shown

In one minute

Fused NVFP4 fake-QAT kernels and a five-layer GLM-5.2 W4A16 recipe are merged and in Miles v0.1.1. The linked logs are a truncated smoke test with no BF16 control, so builders should not treat training-rollout mismatch as proven at the BF16 floor.

The newsroom flagged a claim that Miles, RadixArk’s open post-training stack, has driven training–rollout mismatch for low-precision reinforcement learning down to the BF16 floor by adding fused NVFP4 fake-quantization kernels and a GLM-5.2 W4A16 recipe. That would matter for builders: mixture-of-experts RL is sensitive to any gap between the SGLang sampler and the Megatron trainer, because different log-probabilities on the same tokens move the importance ratio away from one and can collapse the policy. Blackwell NVFP4 is the native 4-bit Tensor Core format, so a stable weight-only path would let rollout keep packed 4-bit experts while the trainer still runs BF16 GEMMs.

The verified item was Miles pull request 2864. That change, and the four-line Megatron hook that ships with it, are real, merged, and present in Miles v0.1.1. Their own logs do not establish BF16-level stability, multi-run reproducibility, or a learning-scale GLM-5.2 result.

What we checked

  • Do the linked raw results demonstrate reproducible low-precision RL stability versus BF16 across runs, seeds, and hardware configurations? refuted. Miles PR 2864 and Megatron-LM PR 91 report one completed two-step GRPO run on a five-layer GLM-5.2 prune on a single 8x B200 node. Rewards, advantages, losses, and gradient norms are zero, every response hits the 100-token cap, parity checkers are off, and the authors call the log integration evidence rather than numerical parity or learning. There is no BF16 control, no second seed, and no second hardware class for that end-to-end recipe. [1][2]
  • Has Miles released fused NVFP4 fake-QAT kernels and a GLM-5.2 W4A16 RL recipe as shipping code? confirmed. PR 2864 merged on 11 September 2026; the paired Megatron hook merged the same day; the W4A16 test is on main and registered to the Blackwell 8-GPU CI suite; Miles v0.1.1 on 26 September 2026 lists the kernels and recipe. [1][2][3][9]
  • Does the W4A16 fake-QAT recipe drop train-rollout mismatch to the BF16 baseline on a learning-scale run? unresolved. Open roadmap issue 3308 asserts a Qwen3-30B-A3B ablation closely tracks pure-BF16 mismatch, but the figure is an image with no transcribed values. The LMSYS Qwen3-30B-A3B NVFP4 study, which also quantizes activations, reported higher train-inference mismatch than BF16 even while reward curves overlapped. No published BF16-matched table exists for W4A16 fake-QAT. [7][10][6]

What we found

  • Pull request 2864, merged 11 September 2026, adds fused CuTe DSL NVFP4 fake-QAT quantize-dequantize kernels, a Transformer Engine-aligned numerical contract, and tests/e2e/megatron/test_glm5_2_744b_a40b_5layer_nvfp4_w4a16.py. Training sets OPEN_TRAINING_NVFP4_FAKE_QAT_FLAG=1 and runs BF16 Transformer Engine GEMMs with straight-through estimator wrapping of routed-expert weights; rollout sets SGLANG_FLASHINFER_CUTEDSL_NVFP4_W4A16=1. The strict quantizer suite reported 1576 passed on two B200 GPUs. The paired Megatron-LM change is four env-gated lines in TEGroupedLinear._get_weight_tensors(). [1][2][3]
  • The completed end-to-end log is a two-rollout GRPO smoke test on Pinaster/GLM-5.2_5layer (five layers, hidden size 6144, 256 experts) on one 8-GPU B200 node using image radixark/miles:dev-202609081227. Trainer/rollout mean absolute logprob difference was 0.011665616184473038 then 0.011925606988370419; sampled k3 KL was 0.00011017757060471922 and 0.00011546722089406103. Raw reward, advantage, policy loss, and gradient norm were 0.0; the truncated fraction was 1.0 at a 100-token cap. The PR states completion is integration evidence, not numerical parity or learning, and the signed MLA KL, logprob, and weight-equality checkers were disabled. [1]
  • Merged PR 3217 reran the same five-layer W4A16 recipe on 8x B300 with a 4+4 trainer/rollout split. Absolute logprob differences stayed between 0.011450588703155518 and 0.011649931780993938 across two steps, again with zero rewards and gradient norms. Companion W4A4 rows on that node sat between 0.011697548441588879 and 0.011872067116200924. Those repeats show the smoke-test mismatch is not a one-box fluke, but they are still not a BF16 control, not a seed sweep, and not a full-depth GLM-5.2 run. [4]
  • Official Miles documentation still marks NVFP4 as Beta, lists Qwen3-30B-A3B as the tested model, and marks NVFP4 rollout with a BF16 trainer as unsupported. The W4A16 recipe is a different contract: fake-quantize routed weights, dequantize to BF16, run BF16 GEMMs, and serve packed NVFP4 W4A16. The Miles v0.1 paper of 8 September 2026 repeats the Beta label. Its GLM-5.2 744B reference run trains in BF16 and serves FP8, with mean train-rollout divergence 0.0369 over 100 steps, and does not report a W4A16 learning curve. [5][6]
  • Open roadmap issue 3308 is the source of the “tracks BF16 mismatch” sentence. It points at scripts/models/qwen3-30B-A3B.py and an embedded figure that GitHub’s text export does not turn into numbers. First/last-layer fake-quant and experimental grouped-MLP QDQ remain unchecked. A 5 October 2026 comment notes that enabling --num-layers-at-{start,end}-in-bf16 today would keep those layers BF16 at rollout but NVFP4 in training. Miles v0.1.1 does ship PRs 2864, 2855, and 3217; parent roadmap 615 still lists the W4A16 tracker as open. [7][8][9]
  • The LMSYS Qwen3-30B-A3B study of end-to-end MXFP8 and per-token NVFP4 on 8x B200, DAPO-math-17k, and 8192-token responses found that both low-precision formats showed higher train-inference mismatch than BF16, while raw reward curves overlapped the BF16 baseline. That recipe quantizes MoE activations as well as weights and is not W4A16 fake-QAT. An earlier Miles NVFP4 PR reported train_rollout_logprob_abs_diff of 0.030812 on Qwen3-30B-A3B. Those are the best published learning-scale NVFP4 comparisons, and neither supports a mismatch-equals-BF16 headline for W4A16. [10][11]

What it means

Treat Miles W4A16 as a shipping Blackwell bring-up path, not as a demonstrated BF16-parity training method. If you adopt it, copy the recipe’s env contract (fake-QAT flag, CuTe DSL W4A16, 4over6 MSE with E4M3 max 448, NVTE_USE_FAST_MATH=0, no 2D quantization, RHT, or stochastic rounding), keep shared experts in BF16 on conversion, training, and live export, keep routing replay and truncated importance sampling on, and do not turn on first/last-layer BF16 exclusions until the training adapter skips those layers. Measure train_rollout_logprob_abs_diff and trainer/rollout KL against a same-topology BF16 control on your model and sequence length; the five-layer 100-token logs are not that control.

Until the Qwen3-30B-A3B figure is published as numbers and someone reports a full-depth GLM-5.2 W4A16 curve, assume you still need TIS, routing replay, and a human watching gradient-norm spikes. Do not read the official NVFP4 cell in the docs as covering this path: that cell requires NVFP4 GEMMs on both sides, while W4A16 fake-QAT trains in BF16 after weight QDQ.

Still open

  • What numeric BF16 versus W4A16 mismatch series does the untranscribed Qwen3-30B-A3B figure on issue 3308 show?
  • Does full-depth GLM-5.2 744B W4A16 RL learn, or does only the five-layer prune complete two zero-gradient steps?
  • How does mismatch vary across seeds, B200 versus B300 versus GB200, and colocated versus disaggregated placement?
  • When will first/last-layer fake-quant skip land so BF16 exceptions match on trainer and rollout?

Evidence / sources

  1. 1github.com/radixark/miles/pull/2864
  2. 2github.com/radixark/Megatron-LM/pull/91
  3. 3raw.githubusercontent.com/radixark/miles/main/tests/e2e/megatron/test_glm5_2_744b_a40b_5layer_nvfp4_w4a16.py
  4. 4github.com/radixark/miles/pull/3217
  5. 5miles.radixark.com/docs/advanced/low-precision
  6. 6arxiv.org/html/2609.08368v1
  7. 7github.com/radixark/miles/issues/3308
  8. 8github.com/radixark/miles/issues/615
  9. 9github.com/radixark/miles/releases/tag/v0.1.1
  10. 10lmsys.org/blog/2026-07-29-mxfp8-nvfp4-rl
  11. 11github.com/radixark/miles/pull/1261
  12. 12github.com/radixark/miles/pull/2855
  13. 13humansand.ai/blog/nvfp4-rl
All Analysis

Next reads

Read next

Open the graph
  1. 01archiveAnalysisOpen the latest authorial analysis.
  2. 02sourcesSourcesSee the original sources this archive cites.
Who read this page?Machine requests, hidden until opened

Loading the privacy-safe route aggregate...

Open the JSON contract