GB300 DSV4.1 Megakernel: Can One Station Run DeepSeek-V4.1-Flash in 5 ms a Step?
A project charter, not a result. The Station decodes in 7.36 ms a step today; we want 5.0 ms, and fusion alone cannot get there.
1. The machine and the model
One GPU with 250.7 GiB of visible HBM, a Grace CPU with 494 GiB of RAM, NVLink-C2C between them; pinned host reads measure around 340 GB/s. DeepSeek-V4.1-Flash-1017 is a 552B-parameter MoE plus 196B of Engram tables, about 475 GiB on disk: 40 MoE layers × 384 MXFP4 experts × 17.93 MiB = 269.0 GiB of expert weights, plus two Engram tables of 94.6 GiB. That cannot all fit HBM (fact, verified 2026-09-10): Engram lives in pinned Grace RAM, and so do some experts. An RTX PRO 6000 (96 GB) sits on PCIe with no P2P path to the big GPU; its results come back through host memory.
Figure 1 — Where the bytes can go. HBM and Grace are facts of the hardware; the ~340 GB/s is a measured pinned-read figure from our notes. The HBM box lists what lives there without a byte total, because we have not published one.
2. Where 11 ms goes
The only full per-role anatomy we have is from the earlier v27 build (2026-10-27), traced with nsys at roughly 0% overhead: 11.216 ms per step, one user, 6 rows per step (DSpark speculative decoding, k=5). GPU 98.6% busy, 0.15 ms idle. 1,305 kernel launches per step; 1,035 ran under 10 µs yet together cost 4.54 ms, 40% of the step. Counters: SMs active 49%, SM issue 6%, tensor 2.3%, DRAM read 32%. Our reading: latency- and occupancy-bound on many tiny kernels; not compute-bound, not launch-bound (CUDA graphs already hide the launches).
Today's lane, Pg61 (vLLM v0.31.0, Garner McCloud's public dgx-station-recipes, our patches), runs the same decode at 7.36 ms (measured, release round 2026-10-31). It has not been profiled per role; that profile is the project's first job.
Figure 2 — The v27 step by role (measured, nsys, 2026-10-27). "Other" is 11.216 ms minus the listed roles and idle: 1.34 ms. "Sidecar wait" is the _finish2 span where the GPU has finished its hot-expert math and is waiting for the RTX card's rows to come back over PCIe. Pg61's 7.36 ms step has no equivalent breakdown yet.
3. Why "megakernel" is the banner, not the plan
Start with what a perfect megakernel cannot remove. Bojie Li's sm_120 microbenchmarks (author's claim, 2026-09-26) put a PDL one-to-one handoff at about 0.37 µs and an all-SM gather at about 1.0 µs; at roughly 1,370 dependency boundaries per step, that is 0.5–1.4 ms of irreducible cost even inside one kernel. Our outside-view model (W1, 2026-10-28) prices everything fused-layer or PDL work can address at 50–70 µs per layer: 2.0–2.8 ms theoretical, −0.7 to −1.4 ms realistic, 6–13% of the 11.0 ms v27 step. Pg61 has already spent some of that pool (it inherits the peer's PDL and fused-sampler tree), so it cannot be subtracted again from 7.36 ms.
Peer evidence agrees (author's claims, 2026-10-28): a PDL reconstruction of the Hazy megakernel reaches 97.3% of a single persistent kernel with 81 ordinary kernels; SGLang #46088 found a fused Mega-mHC slower at every batch size; vLLM-Moet measured a +2.7% step regression from fusing routing into the MoE kernel. Nobody has published one kernel per forward with a PCIe sidecar, host Engram, sparse indexer and speculative decoding in the loop.
The peers who are fast use a chain. NVIDIA's sgl-nvidia-mega SGLang plugin (PR #1, merged 2026-10-19) decodes DeepSeek-V4.1-Flash at a p50 of 3.386 ms per step, batch 1, 6 rows, on four GB300s in TP4: 10–15 right-sized kernels per layer handing outputs through mailboxes, PDL and side streams. Per-GPU weight bytes there are a quarter of ours and no experts live off-GPU; that number is evidence for the shape, not a target for one Station. vLLM's specialized decode for Kimi K3 (2026-10-16) is the same shape: 23 kernels → 13 per layer, 130 µs → 69 µs, on GB300 at TP8/TP16.
So "megakernel" here means whatever makes the decode step shortest: first a fused multi-kernel chain with mailboxes and PDL, one persistent kernel per decoder layer as the stretch, one kernel per forward not a goal. The vehicle is a standalone decode runtime: one Python process, no vLLM, no SGLang; Python host, CuTe DSL kernels, Triton glue, CUDA C++ for the scheduler and mailboxes. Only decode gets optimized; prefill speed is a non-goal until the headline is met. Milestone 0 borrows every existing kernel as a library (DeepGEMM MegaMoE, FlashMLA sparse attention, FlashInfer MXFP4 MoE and MXFP8 GEMMs, vLLM's Engram gather, the peer's draft samplers) and replaces a piece only when the step trace names it and the replacement is measured against it in the same window.
Figure 3 — The fusion pool is modeled (W1, 2026-10-28) against the measured v27 step; the hatched slice is the realistic −0.7 to −1.4 ms. Pg61 is measured. The target is a decision. The gap between Pg61 and the line is larger than anything fusion is modeled to buy.
4. The two recipes
Why the round trip costs what it does: per layer at 6 rows, the hot-expert kernel touches about 25 unique experts, roughly 448 MiB, about 65 µs at ~7 TB/s of HBM (modeled, W1; we measured ~81 µs). Then the GPU waits on the RTX card, a ~112 µs MoE section on about 80% of layers: the 1.33 ms _finish2 wait on v27. The hot math is not the problem; the waiting is.
Recipe A comes first and is Grace-only. The thesis: a fused layer gathers the cold expert rows it needs directly from pinned Grace RAM over C2C, inside the kernel. One memory system, no sidecar, no GPU spinning on a PCIe mailbox. Recipe B is the same runtime plus a persistent cooperative kernel on the RTX PRO 6000: the peer's "GP1" shape, the configuration we know is fast. If A's C2C self-fetch loses to B on measurement, that is a published result.
Figure 4 — One MoE layer under each recipe. In both, the hot expert rows are in HBM and Engram stays in Grace. The difference is where the cold experts are computed: inside the GPU's own kernel from C2C-reachable Grace memory (A), or on a second card that answers over PCIe (B).
5. The number and the ladder
The headline metric is single-user decode step time at 6 rows, measured with nsys on the cudaProfilerApi range over a fixed prompt corpus. Baseline: Pg61, 7.36 ms. Bar: ≤ 5.0 ms per step, about 1.5× Pg61 (decision). It exceeds the modeled fusion pool on purpose: reaching it means removing the MoE-section round trip, not just fusing kernels.
| M | Target | Done when |
|---|---|---|
| W0 | first dark window, ~1 day | Pg61 per-role nsys step breakdown at 7.36 ms; per-boundary PDL gap histogram; 1-row greedy logit capture as the parity reference. Taken while Pg61 still exists; then Pg61 goes down. 2026-11-06: parity capture and step cell done; the nsys breakdown is blocked (see Status). |
| M0 | Dec 18, 2026 | Standalone runtime, borrowed kernels end to end, greedy 1-row parity vs the W0 capture, 32K context, step trace with named boundaries, step ≤ Pg61 + 10% at 1-row-equivalent. |
| M1 | Jan 2027 | DSpark k=5 in the runtime, 6-row step, headline instrument live → first honest ms/step vs 7.36. |
| M2 | Feb 2027 | Recipe A fused chain + C2C self-fetch of cold rows — the thesis test; plus an "everything in Grace" bounding measurement. |
| M3 | Mar 2027 | Recipe B: persistent cooperative RTX kernel on the same runtime. |
| M4 | — | Minimal OpenAI-compatible surface; 128K → 1M context; production-candidacy review. |
Month labels are targets, not promises. Context ladder is 32K → 128K → 1M; 1M gates production candidacy only. Rows C1–C8 are designed in; C32 is a declared non-goal of the runtime.
Kill rule: milestone 0 by December 18, 2026 (six weeks), or Pg61 is restored and the project parks as desk research.
6. What stays fixed
Stock weights: no NVFP4, no requantization. No KV-cache quantization. No expert pruning, no router masking; all 384 experts stay. Quality gates as calibrated. Determinism is a design requirement: bit-identical output across runs and relaunches, fixed-order reductions, no atomics on the data. Today's sidecar lane fails that (measured: 79,376 of 100,000 sidecar calls differ between two runs of the same binary; reduction order depends on arrival when two or more cold experts are summed). The one thing reopened is layout: weight tiling on disk and in HBM may change, as long as every value stays bit-identical to the pinned checkpoint (HF revision 1bae0e10).
7. Status today
Charter signed. Production DeepSeek-V4.1-Flash moved to the four-DGX-Spark SGLang lane on 2026-11-06 (consumers repointed, gateway alias shelved); the Station is the project's dev box for the duration. The first measurement window (W0) ran the same day. Measured: on our own driver, Pg61 decodes at 7.72–7.75 ms per step across three 512-token greedy generations (2.6–2.9 tokens per step); that is a different prompt and instrument from the 7.36 ms release number, not a regression claim. Two identical greedy runs over eight fixture prompts agreed byte-for-byte on seven and diverged at token 121 on the code prompt: that is Pg61's own run-to-run spread, and the bar milestone 0 is graded against. The nsys-wrapped boot did not deliver the per-role breakdown: the server booted and answered warm requests, but once the CUDA profiler range opened the engine stopped making progress (GPU idle, the engine process spinning on the host) and had to be stopped after six minutes. CUPTI kernel tracing and the sidecar's spin-wait protocol do not coexist on this lane; that is the first finding, and the first thing the project has to instrument around. Pg61 is now stopped-and-kept as a one-command rollback. No runtime code exists yet. The repo is public: github.com/jmeadlock/gb300-dsv41-megakernel, Apache-2.0, from the first commit (W0 receipts and scripts are in it). Peers invited after milestone 0.