File size: 8,864 Bytes
f6bc13b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e44e9c3
 
 
d72ca7c
e44e9c3
 
 
 
 
 
 
 
 
92e6eae
 
 
 
 
 
 
 
 
 
c56a4a1
 
 
 
 
 
 
 
 
 
 
1605678
 
 
 
 
 
 
 
 
c56a4a1
 
 
55e12c2
 
6b90aa1
55e12c2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79122b8
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# 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.90` on 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 β€” CORRECTED 2026-08-28 pm (analyst pass caught our counting error):
SGLang's --speculative-num-draft-tokens INCLUDES the bonus token, so our D=5 ceiling is 5
tok/step (measured accept length 3.4-4.4, never "~5.9" β€” that figure was inferred, wrong, and
is retracted), and their "k=7" is D=8 in our units. Modeling from our measured D-sweep
(verify costs ~19.9 ms per extra draft token on a ~40 ms floor): D=7 predicts 43.9 tok/s
structured (+1.4%) with a hard ceiling of 46.7 even at perfect acceptance, and costs ~9%
prose β€” so we are NOT raising D. Step rates are within 3% of the EXL3 stack (9.9 vs 9.6
steps/s); their advantage is ~56% cheaper verify per token (quant/backend), which is the
real lever (decoupled drafter / verify cost), not drafter depth. 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.

## THE SHOOTOUT (2026-08-28): both stacks, one rig, one protocol
We ran MiaAI-Lab's EXL3+vLLM lane (their repo @ bd7f55e, their :exl3 GHCR image, their k=7 default, our fabric pins; benchmarked 2026-08-28 ~15:00 PT β€” their repo is moving fast and has since announced concurrency-focused fixes, so re-run before citing)
and our SGLang fp8 lane on the SAME 2x DGX Spark pair, SAME prompts, temp 0, thinking off,
400 max_tokens, warmed, n=5 medians; c-sweep with per-stream walls printed. First such
comparison published anywhere, to our knowledge.
| workload | EXL3+vLLM | SGLang fp8 (FP8T8X) |
|---|---:|---:|
| structured count-to-200 | 51.3 (n=5 spread 30.2-59.1) | 43.3 |
| code (merge-sorted-lists) | **51.9** | 29.3 |
| prose (hash map) | 23.7 | **29.2** |
| c1 | 53.8 | 36.5 |
| c2 | 54.5 | 48.7 |
| c4 | 72.8 | 43.3 (straggler-tainted, see analyst note) |
| c8 | 63.8 | **78.1** |
| c12 | 53.3 | **83.5** |
Read: EXL3+vLLM wins single-stream high-accept work decisively (code +77% β€” larger than we
expected; cheap verify + deeper draft). SGLang fp8 wins prose at every point and wins fleet
concurrency by +57% at c12 β€” the EXL3 lane's aggregate DEGRADES past c4 (72.8 -> 53.3), which
is consistent with their repo publishing only to c4. Their published 62.9 structured did not
reproduce on this rig (51.3 median, wide spread). Caveats: their lane ran their defaults, one
boot, no per-lane tuning by us; our c4 carries the known harness straggler. Credit: MiaAI-Lab
and brandonmusic for the lane. Posture unchanged: SGLang fp8 serves production (fleet shape
matches our workload); EXL3 lane retained on-disk for interactive use cases.

## Concurrency correctness matrix (2026-08-28, FP8T8X production config)
Motivated by sglang #36548 (36.5% wrong answers at c8 with DFLASH on GB10, another rig/config)
and #36880/#36885 (mamba sentinel-slot corruption): fixed deterministic arithmetic prompts with
objective ground truths, temp 0, thinking off, serial baseline then 3 rounds each at c4 and c8.
Result: **44/44 correct (c1 8/8, c4 12/12, c8 24/24)** β€” no concurrency-dependent wrongness
detected on this config (bf16 mamba ssm states, D=5, fp8 target KV, 40 mamba slots).
Scope caveat: a 44-request short-form matrix rules out gross corruption, not rare load-dependent
corruption; the #36885 sentinel bug is claimed load-dependent. Methodology note: our first run
"failed" 7/44 β€” every failure was reasoning-narration truncated by an 80-token cap, zero wrong
values; budget raised to 400 and the checker's false accusations vanished. Check your checker.