This is a dated research narrative. For the current installable package, supported capabilities, API and active measurements, see grouped-nf4-gemm (2026-09-05). Numbers on this page are quoted as they stood when it was written; the repository's docs/claims.json says which are still current.

Cerin Amroth Research · ML systems · grouped-nf4-gemm repository

← ML systems

Receipts-driven engineering

Six blind confirmatories  ·  five published failures  ·  one kernel  ·  July 14 – 30, 2026

Performance claims in ML tooling are, as normally published, unfalsifiable. A benchmark is run an unknown number of times, on unknown hardware, against a baseline configured by the person with the incentive; the number that survives is the number that flattered. This project applies the fix medicine already knows — preregistration — to a GPU kernel, so every headline links to a protocol that provably existed before the data did.

grouped-nf4-gemm is a Triton kernel that runs mixture-of-experts matmuls directly on 4-bit-packed weights: one launch for all active experts, the codebook decoded in registers inside the GEMM mainloop, no dequantize-to-bf16 round trip. It serves both 16-entry codebooks — NF4 on the bitsandbytes packed format unchanged, and MXFP4 (OCP e2m1) on a checkpoint’s exact released bytes — and the NF4 path is differentiable, so fine-tuning never leaves the packed format either. MIT, pip install grouped-nf4-gemm, every wheel signed. The method is the part that transfers.

The discipline

Each claim runs the same pipeline, and the pipeline has no discretionary exits:

What the discipline caught

These findings exist because of the protocol, not despite it. Each one would have been invisible to ordinary review.

The numbers

Every row carries its evidence tier. confirmed = a stamped blind protocol. measured = a real benchmark whose protocol predates its data in public git, without an OpenTimestamps anchor. projected = arithmetic from measured constants. The distinction is not decorative — it is the whole apparatus, so the newer lanes are labelled honestly rather than left to inherit the stamped tier’s credibility.

ClaimResultTier
MoE decode vs the bitsandbytes dequant path (sm_86)1.16–2.73× median across the model census; energy below baseline in 104 of 112 cells; numerical error below baseline in every cellconfirmed
Prefill after the v6 register-LUT mainloop rewrite1.39–1.54× the prior mainloop on every census cell; 1.14–2.78× vs dequant. Bracketed 26→170 SM with zero retuneconfirmed
235B on ≤16 GB VRAM, real checkpointcoherent generation at 4.3–4.4 tok/s on 15.2 GB, replicated across five machines — all on 45–55 GB/s datacenter links. Per-token rate is link- and host-dependent (t ≈ cbox + bytes/link, cbox 53.5–114.0 ms across seven hosts), so the rate does not transferconfirmed
vs bitsandbytes’ own CUDA dequant kernel, identical pipeline2.33× throughput, 2.21× energy — the registered contrary prediction refutedconfirmed
MXFP4 serve — gpt-oss-120b on the vendor’s shipped bytes (receipts)exact-chunk ppl 26.72 vs dequant-reference 26.75 — the requantization tax measured at 20b (+9.4%) is deleted at 120bconfirmed
MXFP4 train — 120b QLoRA, native bytes (receipts)peak 9.82 GB VRAM; 144/144 expert tensors sha256-identical to the release before, during and after trainingconfirmed
Fused training vs reference — Qwen3-30B-A3B, all 48 layers, offload + grad checkpointing (receipts)held-out eval 0.95% apart (0.337073 vs 0.340271) against a registered 0.05 band; the zero-adapter floor is 0.099%, so the trained gap sits within an order of magnitude of pure summation order. Peak VRAM 0.768× reference — it uses less. 192/192 frozen tensors byte-identical over 16.31 GB hashed, under a byte-flip control proving the check can failmeasured
NVMe tier — experts read from disk (ceiling · determinism)per-box S ≈ 3.45 GB/s, which makes this a batch tier by construction: ~2.3 s/token for a fully cold 235B, ~7.5 s/token at K3 scale. Interactive use is not the claim. The arena itself is reproducible — two GPU generations, two hosts, two independent 438 GB downloads, 20,480/20,480 segment hashes identicalmeasured
vs the grouped-GEMM class unsloth’s MoE backend ridesfaster on every census cell — decode median 4.67×, prefill 3.02×. Their kernel targets bf16-resident training, a job it is excellent at; this is the 4-bit-storage regimemeasured
Consumer hardware (RTX 4090, sm_89)1.18–3.72× vs the dequant path — best card tested, same code, zero retuningmeasured
Routing-informed hot sets, the residency dial (receipts)+19–120% decode over the all-cold floor at equal VRAM on bandwidth-limited hosts. The gain belongs to the link, not the model: ~+40% on a thin-link A2000, ~0% on a fat-PCIe L40Smeasured
235B on a desktop (receipts) and on gen5 bare metal (receipts)2.60 and 3.92 tok/s real decode, greedy-identical. The gen5 box reached 0.55× of its link ceiling where slower hosts read 0.77× — which falsified the pure-bandwidth model exactly as pre-registered and forced the additive correction abovemeasured

Known losers, published at the same volume: top_k=1 models are instance-unstable in both directions (0.47–1.12×); experts under ~5M weights lose outright and are auto-routed back to the standard path; the smallest-expert census shape stays below parity at one regime (~0.6×). Full loss ledger in the repository README.

Why this lives here

Cerin Amroth’s disclosure practice runs on a doctrine: honest severity, no overclaim, evidence a third party can check without trusting us. This is the same doctrine pointed at performance engineering. A benchmark whose protocol was stamped into a blockchain before the data existed is the performance-claim equivalent of a signed advisory — it converts “trust me” into “check me.” Protocols, stamps, raw receipts, reducers, failures and all: github.com/pjordanandrsn/grouped-nf4-gemm.

Current documentation: grouped-nf4-gemm · ML systems · this page was previously served at /ml/grouped-nf4-gemm/.