Measured results β GLM-5.3-Flash (NVFP4) + DFlash2, 2Γ DGX Spark (GB10), SGLang TP=2
First known deployment of this pairing on any hardware outside inco.ai (drafter repo showed 0 downloads at deploy time; enabling PR #36708 merged ~7 h before first boot).
Serving config (first-light envelope)
mem-fraction-static 0.88, max-total-tokens 131072 (configurator resolved 64,832),
mamba-full-memory-ratio 2, context 65,536, max_running_requests resolved to 1,
KV bf16, draft tokens 8 (drafter-native block), draft attention flashinfer,
DSA tilelang retuned for GB10 (see patches/). Clocks: stock (no cap), engine warmed 2Γ800 tok.
Decode throughput β warmed, temp 0, stream:false, 800 max_tokens, n=5, medians
| prompt | DFlash2 ON | DFLASH off (same stack) | ratio |
|---|---|---|---|
| code-1 (threaded queue impl) | 27.6 tok/s (27.6β27.8) | 14.7 | 1.88Γ |
| prose-1 (measurement essay) | 20.7 tok/s (20.7β20.7) | 14.7 | 1.41Γ |
Instantaneous scheduler gauge peaked at 45.5 tok/s during code decode; reported here only as a gauge peak β sustained medians above are the comparable numbers.
Acceptance (scheduler decode-batch log, during active code decode)
accept len 3.65β5.62 (of 9 per step: 7 drafts + verify + bonus), accept rate 0.38β0.66. Consistent with the Qwen3.8 GB10 DFlash2 deploy's ~5/8 code acceptance.
Losslessness (G6)
5 fixed prompts, temp 0, DFlash2-on vs DFLASH-off, token-for-token:
NOT claimed lossless. Of 5 prompts, 3 were VOID (harness captured only content,
which the auto-detected reasoning parser left empty β harness flaw, not a result),
1 matched exactly, 1 diverged at a formatting token (**Step 1: Square each integer**
vs ## Step 1: Square each number) β a near-tie flipped by on/off-path numerics.
Full 20-prompt matrix with reasoning captured is queued. Treat DFlash2-on outputs as
distribution-preserving, not bit-identical, on this stack until that lands.
Reference comparison (other published GB10 GLM-5.3 numbers, different stack)
- tonyd2wild vLLM TP2 + MTP-4: 21.8 tok/s median (peak 22.7); TP4: 35.7
Serving measurements (FINAL config: v4b image + D5 flags, 2026-08-28 ~04:00)
- TTFT (stream:true, first content/reasoning delta, warm): ~4k-token prompt 2.3 s uncached / 0.74 s radix-cached; ~16k 7.9 s (β2,000 tok/s prefill). ~64k: unmeasurable at the 65,536 context window. First-request-after-boot 4k read 39.6 s β cold-start JIT/caches; excluded as contaminated, reported for honesty.
- Concurrency: superseded twice β first by the c-sweep (the "saturates at one stream" read was a max_running=2 artifact), then by the multi-stream unlock (LADDER.md): the mamba state cache capped ALL DFlash configs at 2 concurrent streams. With
--max-mamba-cache-size 40 --mamba-ssm-dtype bfloat16 --mem-fraction-static 0.90on the fp8-KV config: c8 80.3 tok/s aggregate (8/8 concurrent), c12 85.4 vs 47-49 capped and 55 no-spec. Single-stream cost of the unlock: 27.4 vs 29.2 code median (~6%).
G6 losslessness β FINAL verdict (20 prompts, temp 0, content+reasoning captured, on vs off)
1/20 exactly identical; 19/20 diverge somewhere in their (mostly long, reasoning-bearing) outputs. Divergences are near-tie token flips that cascade in long generations β outputs remain correct and comparable in quality (all gates passed), but on this stack (sm_121, DSA tilelang, NVFP4) DFlash2-on is NOT bit-identical to DFLASH-off at temp 0. The drafter card's "greedy output matches the target exactly" does not reproduce here; whether the cause is verify-path numerics on this chip or quant interaction is unresolved. Users needing bit-exact greedy reproducibility should serve DFLASH-off.
Thinking mode vs effort (2026-08-28)
Decode tok/s is IDENTICAL with thinking on or off (~18-22 on this probe; run variance exceeds any mode difference). But with a tight max_tokens budget, thinking-ON can spend the ENTIRE budget on reasoning and return zero answer: at 600 max_tokens our probe got 2,600 chars of reasoning_content and empty content (finish=length), while thinking-OFF returned 2,462 chars of pure answer in the same wall time. For agent/tool workloads, disable thinking per-request ("chat_template_kwargs": {"enable_thinking": false}) or budget max_tokens for reasoning + answer. Conditions: merge-sorted-lists code prompt, 600 max_tokens, temp 0, FP8T8V config.
Cross-stack comparison vs EXL3+vLLM (2026-08-28, same prompts, our hardware for our column)
MiaAI-Lab published GLM-5.3-Flash-EXL3-2x-DGX-Sparks (EXL3/TR3 4bpw by brandonmusic, custom vLLM image, DFlash2 k=7, fp8_ds_mla KV, 900k context). Their headline 62.9/103.3/146.5 is the "Structured" bench β counting 1 to 200 β a ~0.92-accept regime their own fine print separates from prose (26.9) and long-context (24-27). We ran their exact protocol on our stack (temp 0, thinking off, 400 max_tokens, top_p 1, warmed, n=5 medians, FP8T8V config):
| workload (their prompts) | EXL3+vLLM (their lab numbers) | ours (SGLang fp8-KV) |
|---|---|---|
| structured count-to-200 | 61.7 | 43.3 |
| prose hash-map | 26.9 | 29.2 |
| Structured gap decomposes: they draft k=7 (max 8 tok/step, realize 6.43); we run D=5 (max 6, | ||
| realize ~5.9 β pinned at ceiling on this workload). D is workload-tunable; we have not re-swept | ||
| D for high-accept regimes. On the prose workload the SGLang stack is faster. Their genuine | ||
| edges, acknowledged: (1) weights quality β independent KLD panel puts EXL3 4bpw at ~official-FP8 | ||
| level while NVFP4 (which we serve) scores 2.5x worse; (2) KV pool β 982k tokens vs our 84k | ||
| (context expansion on our stack is config work, queued). Credit: MiaAI-Lab and brandonmusic. |