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(§21): fp8 levers re-measured on sm_121 — native fp8-input MMA is REAL (2.2-3.5x over fp16-decode, still <bf16), R1-e2e fp8 backward is memory-NO-GO (MLX<->torch cudaMallocAsync), cleanup freed 14.88GB
LEVER 3 cleanup: removed venv_unsloth (5.53GB) + cuda-13.0 (4.63GB) + cuda-13.1 (4.72GB) + dangling gds confs, ldconfig refreshed; kept cuda-13.2/13.3 + cppmega-venv. freed 14.88GB total, had_skip=0.
LEVER 1 R2 native fp8-input MMA: VERIFY gate PASS — generated CUDA emits tl::mma_sync<kFloat8_e4m3,kFloat8_e4m3,kFloat32,16,8,32> (0 kFloat16, 0 __nv_fp8-decode, native SM120 m16n8k32 f8f6f4 atom, fp32 accum). MEASURED 23.4/25.2/23.6/31.6 TFLOPs = 0.69/0.73/0.70/0.95x bf16, 2.2-3.5x over fp16-decode R2, parity 0.0376. Real-fp8-MMA GO, speed-vs-bf16 NO-GO (untuned single tile).
LEVER 1b MXFP8: still TE-upstream-blocked CC>=12.0 (PR#3050 needs unreleased cuBLASLt 13.6).
R1 e2e wiring: bf16 arm MEASURED (74.26 s/step, 13.8 tok/s, 37.58 GB, seq1024 bs1 13L, raw MLX-eager); fp8 arm OOMs in the fp8 BACKWARD at the MLX->torch zero-copy bridge (cudaMallocAsync), reproduced to seq=512 no-opt 30GB-cap — MLX<->torch unified-memory contention, NOT activation size. RAISED per RULE #1, not degraded. fp8 e2e tok/s UNMEASURED. §17 (907/298 tok/s) stays canonical.
Updated TL;DR + Verdict.
|**peak memory**|**6.400 GB planned 8L / 12.998 GB planned 28L device-peak** (Korthikanti launch-cache §14; the gridded SSD scan §15 reuses the same banks → peak UNCHANGED; was 4.682/8.787 GB pre-§14 — the launch lever trades +1.7/+4.2 GB for the launch reduction, still 2x under Megatron) |**~26 GB**|
| **tok/s** | **§17 (gridded fwd + RE-GRIDDED gridded backward, MEASURED B2 substituted): ≈907 tok/s @8L / ≈298 @28L (gap ≈3.75×/≈11.4×) — B2 re-gridded 2484→334.6 ms (7.42×), chain 447.8 ms < 456 ms numpy bwd, ALL 8 grads pass incl dD 2.48e-5. §18 RE-MEASURED the 3 gap levers: bs4 fwd MEASURED+PASS but tok/s batch-invariant (saturated kernels, gap unchanged ≈3.75×/≈11.4×), bs4 bwd memory-NO-GO (gold harness OOM), fp8 UNRUNNABLE on sm_121 (byte-halving 2.0× MEASURED, speed UNMEASURED), B2 v2 NO-GO (0.997×/1.001×) — §17 headline holds. §21 RE-MEASURED the fp8 levers on the unblocked sm_121: our OWN native fp8-input e4m3 MMA is now VERIFIED real (kFloat8_e4m3 m16n8k32, 0 fp16) and 2.2–3.5× faster than the old fp16-decode but still 0.69–0.95× bf16 (untuned tile → speed NO-GO); TE standalone fp8 GEMM stays the only ~1.7× win; wiring TE fp8 into the e2e step is a memory-NO-GO (fp8 backward OOMs at the MLX↔torch cudaMallocAsync bridge, reproduced to seq=512) — so §17's ≈907/≈298 stays the canonical step number, fp8 e2e tok/s UNMEASURED. Prior: ≈894/≈293 @ §15 (gridded scan + numpy bwd, EXTRAPOLATED); 45.44 @8L MEASURED (§14); 29.82 @ §13, 25.2 pre-§13.** | **3399 tok/s** |
46
46
| tok/s ratio vs Megatron |**≈0.27x (8L) / ≈0.088x (28L) with §17 (gridded fwd + gridded bwd) — i.e. ≈3.75x–11.4x slower** (was 75x–289x @ §14, 114x–654x @ §13) | 1.0x |
47
47
| what runs the compute |**REAL tilelang path_c-CUDA MR kernel, device-resident fwd (§13) + Korthikanti recompute cache (§14) + GRIDDED CUDA SSD chunked scan replacing the serial MR mamba recurrence (§15, F2 0.980 ms vs serial 6.56 s)** + abstract numpy bwd/adam/loss (lever 4, now the dominant remaining term) | tuned fused-FP8-CUDA kernels + selective recompute |
48
48
@@ -1387,6 +1387,128 @@ Measured 2026-06-04 on gb10 `tvm.cuda(0)` sm_121, single exclusive run, gb10 lef
1387
1387
1388
1388
---
1389
1389
1390
+
## §21. FOUR LEVERS RE-MEASURED — cleanup done, NATIVE fp8-input MMA is now REAL (2.2–3.5× over the old fp16-decode but still <1× bf16), R1-e2e fp8 backward is a memory-NO-GO (MLX↔torch cudaMallocAsync contention) (MEASURED, gb10 sm_121, 2026-06-04)
1391
+
1392
+
This round spent four levers as the sole exclusive gb10 owner (serial discipline, drop_caches between
1393
+
runs, box left idle). Headline: **the R2 native fp8-input MMA now compiles, runs, and is VERIFIED a real
1394
+
e4m3 tensor-core MMA** (not the fp16-decode relabel) — a 2.2–3.5× lift over the §19/§20 fp16-decode R2 —
1395
+
**but it is still below bf16** (untuned single-tile), so it is a real-fp8-MMA GO and a speed NO-GO. **The
1396
+
R1 standalone fp8 GEMM stays the only measured ~1.7× win**, and **wiring it into the e2e step is a
1397
+
memory-NO-GO**: the fp8 backward OOMs at the MLX→torch zero-copy bridge from MLX/torch `cudaMallocAsync`
1398
+
unified-memory contention (reproduced down to seq=512, no optimizer). The cleanup freed 14.88 GB.
1399
+
1400
+
### Lever 3 — CLEANUP (done, non-GPU)
1401
+
`scratch/gb10_cleanup_and_e2e.sh` cleanup portion (re-verify-then-remove, `sudo -n` available at execute
1402
+
time, live `/usr/local/cuda` + `/usr/local/cuda-13` both → cuda-13.3 so the removals are NOT the live
| 1 — R2 native fp8-input MMA | VERIFIED real e4m3 MMA (kFloat8_e4m3 m16n8k32, 0 fp16); 0.69–0.95× bf16, 2.2–3.5× over fp16-decode, parity 0.0376 |**GO as real fp8 MMA; NO-GO as speed (still <bf16, untuned tile)**|
1491
+
| 1b — MXFP8 bypass | TE gate still hard-blocks CC≥12.0 (PR#3050 needs unreleased cuBLASLt 13.6); CUTLASS bypass not integrated |**NO-GO (upstream block, documented)**|
1492
+
| R1 e2e wiring | bf16 arm ran (74.26 s/step, 13.8 tok/s, 37.58 GB); fp8 arm OOMs in the fp8 backward (MLX↔torch cudaMallocAsync contention), RAISED not degraded |**bf16 GO; fp8 e2e NO-GO (memory, as wired)**|
0 commit comments