You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs+route(nvfp4): backward GENUINELY datacenter-only on sm_12x — fail-loud is correct, not a build-flag gap
Conclusion from TE source (parked analysis from the rebuild investigation):
the FP4 stochastic-rounding cvt (cvt.rs.satfinite.e2m1x4) + RHT fused-quant
backward kernels are source-gated in TransformerEngine to ArchSpecific<100>/<103>
(sm_100a/sm_103a, datacenter B200/B300). The SM12x family (consumer/Spark
Blackwell, sm_121/GB10) exposes only plain sm_120/sm_121 — NO 120a/120f/121f
code target for these kernels, and RHT needs the SM100 TMEM/tcgen05 pipeline
sm_12x does not implement. So rebuilding TE with a 120f family target does NOT
unblock nvfp4 backward; it stays fail-loud (Nvfp4CudaKernelMiscompiled) with
WHERE+WHAT. Forward NVFP4 GEMM remains working (ffb3069). RULE #1: no fake
unblock, no silent bf16 fallback. Refines the route's capability detection +
error text + doc with the source-gating evidence.
`cutlass/detail/sm100_blockscaled_layout.hpp`, cluster launch — i.e.
179
+
`tcgen05`/TMEM. NVIDIA staff (johnny_nv, NVIDIA Developer Forums) state plainly:
180
+
*"SM12x (GB10 / DGX Spark / RTX 50) does **not** implement `tcgen05`, and
181
+
therefore it also doesn't support the associated FP4 Tensor Core path."* The
182
+
TMEM-backed blockscaled FP4 path is gated to datacenter SM100/SM110. This is
183
+
exactly why the RHT kernel raises `CUDA Error: invalid argument` on gb10 —
184
+
TMEM ops do not exist on this SM. (The sm_121 forward NVFP4 GEMM that *does*
185
+
work goes through a **different**, non-tcgen05 cuBLASLt/CuTe-geforce pipeline.)
186
+
187
+
**Conclusion:** VERIFIED BROKEN **and** verified UNFIXABLE-BY-REBUILD on gb10.
188
+
The enablement is **not in our hands** — it requires NVIDIA to ship
189
+
**SM12x-native (non-tcgen05) FP4 stochastic-rounding + RHT backward kernels** in
190
+
a future TransformerEngine / cuBLASLt release (and to widen
191
+
`ARCH_HAS_STOCHASTIC_ROUNDING` to the 120 family once an `f`/`a` SR cvt exists
192
+
for it). Until then the nvfp4 **backward** stays fail-loud on consumer/Spark
193
+
Blackwell. The **forward** nvfp4 GEMM remains real and working (§3a).
152
194
153
195
**Danger note (why we fail loud):** the backward FP4 error is ASYNC. Without
154
196
`CUDA_LAUNCH_BLOCKING=1` AND a fresh `te.Linear`, TE quantizer-workspace state
@@ -204,7 +246,7 @@ each; it does NOT bf16-fallback:
204
246
205
247
| Op | Why | Enablement |
206
248
|----|-----|-----------|
207
-
|`nvfp4_gemm_backward_vjp_te_cuda_sm121`|TE FP4-cvt/RHT PTX is arch-specific; TE built `sm_120` plain (not the `f`family) → asserts / CUDA invalid-argument on gb10 | Rebuild TE under CUDA ≥ 13 with family target `compute_120f` (NOT `sm_120a`, which SEGFAULTS on desktop Blackwell; cf. cutlass#3096)|
249
+
| `nvfp4_gemm_backward_vjp_te_cuda_sm121` | **Datacenter-only, NOT a build gap.** SR FP4cvt (`cvt.rs.satfinite.e2m1x4`) is TE-source-gated to `sm_100a`/`sm_103a`; RHT kernel needs SM100 TMEM/`tcgen05` which sm_12x does not implement. nvcc 13.x has no sm_12x `a`/`f` target → a TE rebuild **cannot** fix it (see §3b) | **UPSTREAM ONLY**: needs NVIDIA to ship SM12x-native (non-`tcgen05`) FP4 SR + RHT backward kernels in a future TE/cuBLASLt release |
208
250
| `cuda_blackwell_nvfp4_gemm_metal_only` | The Metal fwd GEMM is Metal-only; it RAISES on CUDA | Use the TE/cuBLASLt CUDA forward path above |
209
251
| `gemm_backward_vjp` | No nvfp4 grad kernel for the Metal e2m1 GEMM | Implement an nvfp4 VJP for `mxfp4_matmul_path_c` |
210
252
| `optimizer_state_and_update` | AdamW moments are fp32-only; no nvfp4 optimizer state | Implement nvfp4 optimizer-state kernels |
@@ -242,10 +284,11 @@ assertions run when torch+TE+CUDA+NVFP4 present.
242
284
* `test_metal_forward_nvfp4_gemm_matches_bf16` — real Metal fwd GEMM < 0.5 rel.
0 commit comments