Literature review · Pluralis · Part V · August 2026 · refreshed 4 September 2026
Every worthwhile drafter for two frontier open-weight targets — GLM-5.2 (Z.ai, 744B-A40B) and DeepSeek-V4-Pro (1.6T-A49B) — from the speculators shipped inside the checkpoints to third-party heads, extracted GGUF drafters, classic small-model setups, and training-free options. Covers all speculative methods (not just the PP setting), with serving recipes and measured acceptance lengths from open repos, papers, and vendor blogs. The one-line verdict: both flagships ship their best drafter in the box — GLM-5.2's upgraded MTP layer and V4-Pro's DSpark module. The September refresh changes one clause: third-party heads now exist for GLM-5.2 (Red Hat's DSpark speculator for vLLM, two DFlash block drafters for SGLang, an independent DSpark head) and on code/math the DFlash heads out-accept the built-in MTP by 1.4–1.5× — while V4-Pro still has none; every EAGLE-3 / DFlash head in the wild targets V4-Flash.
Refreshed 4 Sep 2026 against vLLM v0.27.1 and SGLang v0.5.18. New since August: UCloud and SubconsciousDev DFlash heads for GLM-5.2; RedHatAI's final (epoch-1) DSpark head replaced the preview and the SGLang repack for it; siro1's DSpark head; extracted V4-Pro DSpark drafter GGUFs with Pro-specific numbers; SGLang shipped DSPARK (v0.5.16); vLLM added DSpark adaptive verification and AR fusion (0.26–0.27). Corrections: RedHat's head is 3 layers / block 8 / rank 256 (not 5 layers); arXiv 2602.15763 is the GLM-5 report, not GLM-5.2's; the unsloth 1.91× llama.cpp figure is V4-Flash, not Pro. A per-stat referenced companion page (70 fetched sources) is in the project artifacts.
Both models follow the 2026 pattern the Atlas predicted: the drafter ships with the weights, trained alongside the target. GLM-5.2 carries a DeepSeek-style nextn MTP layer, upgraded in this release (IndexShare/KVShare inside the MTP layer, rejection-sampling-aware training). V4-Pro goes further and ships two speculators: the classic 1-layer MTP and DSpark — a semi-autoregressive 5-token block drafter reusing target weights with a low-rank Markov head and confidence-scheduled variable-length verification (arXiv 2607.05147, official code in DeepSpec).
| GLM-5.2 | DeepSeek-V4-Pro (0813) | |
|---|---|---|
| Checkpoint | zai-org/GLM-5.2 (+FP8, NVFP4) · MIT | deepseek-ai/DeepSeek-V4-Pro-0813 (+-DSpark) · MIT |
| Size | 744B total / 40B active MoE (256+1 experts, 8/token) | 1.6T total / 49B active MoE (384+1 experts, 6/token) |
| Hidden / layers / vocab | 6144 / 78 / 154,880 | 7168 / 61 / 129,280 |
| Attention | DSA sparse + MLA-style compression, IndexShare (1 indexer per 4 layers) | MLA + hybrid sparse (CSA/HCA, indexer top-k 1024, SWA 128) |
| Shipped speculators | MTP ×1 (nextn, layer 78, ~11B incl. experts; accept 4.56→5.47) | MTP ×1 (accept ~2.5) + DSpark (5-token blocks, accept ~5, KV from layers 58–60, Markov rank 512, ~77.5B — Part VIII). The 0813 config.json declares both (num_nextn_predict_layers: 1 + dspark_*); the engine flag picks which runs. |
| Context | 1M | 1M (YaRN ×16) |
| Same-vocab siblings | GLM-5.3-Flash (320B-A18B), GLM-4.7-Flash (~30B-A3B) — vocab 154,880 shared | V4-Flash (284B-A13B) — no small sibling; R1-Distills use other tokenizers |
Naming checks: GLM-5.2 has no Air/Flash variant (the small siblings are GLM-5.3-Flash and GLM-4.7-Flash). "DeepSeek-V4-Pro-Max" is a reasoning mode, not separate weights; there is no V4-Lite, and R2 never shipped. Tech reports: GLM-5 (arXiv 2602.15763; GLM-5.2 has no separate report — the 4.56→5.47 MTP figure is Z.ai's release ablation) · DeepSeek-V4 (arXiv 2606.19348) · DSpark (arXiv 2607.05147; paper says Markov rank 256 "by default", shipped V4-Pro configs use 512).
First choice — the built-in MTP layer. Zero extra artifacts, production-proven in both engines (Z.ai ablation mean 5.47; LMSYS reports "frequently 5+" and >500 tok/s bs=1 on 8×B300; vLLM's 24×B300 P/D deployment measured ~60% acceptance, mean accept ~3→~4 and TPOT 40→22→17 ms). Code/math-heavy traffic is the exception: UCloud's DFlash block drafter accepts 6.4–8.0 tokens there and beats MTP by 1.42–1.54× end-to-end in SGLang, but falls to 0.93× of MTP on chat and Chinese — so it is a workload-specific upgrade, not a default.
# vLLM ≥ 0.23 — method "mtp" vllm serve zai-org/GLM-5.2-FP8 --kv-cache-dtype fp8 -tp 8 \ --speculative-config.method mtp --speculative-config.num_speculative_tokens 5 # SGLang — nextn weights ride the EAGLE algorithm path python3 -m sglang.launch_server --model-path nvidia/GLM-5.2-NVFP4 -tp 4 \ --speculative-algorithm EAGLE --speculative-num-steps 5 \ --speculative-eagle-topk 1 --speculative-num-draft-tokens 6 --kv-cache-dtype fp8_e4m3
| Drafter | Type · size | Target | Measured | Serving | License |
|---|---|---|---|---|---|
| Built-in MTP (nextn ×1) | shipped module · layer 78, ~11B incl. 256 experts (~19.9 GB BF16) | GLM-5.2 | accept 5.47 mean (Z.ai ablation); ~60% acceptance, mean ~3→~4 @k=3, TPOT 40→17 ms (vLLM 24×B300 P/D); >500 tok/s bs=1, "5+" (LMSYS 8×B300); 3.0–3.5 @0.65 rate (sant1an, 8×B200 NVFP4) | vLLM mtp k=5 (≥0.23; MTP+tool-calling needs main; MI300X hang #48568) · SGLang EAGLE/NEXTN (≥0.5.14; NVFP4+nextn IMA #30209 → --speculative-moe-runner-backend triton --speculative-moe-a2a-backend none; PD-disagg crash #30854) | MIT (in weights) |
| MTP repacks: CosmicRaisins INT4 · sant1an NVFP4-MTP · inferencerlabs MLX · dnhkng delta | same MTP weights re-quantized / grafted onto INT4, NVFP4, MLX targets | GLM-5.2 quants | INT4 sibling: 1.4–2.1× decode, accept 3.4–5.0 (no hardware stated); MLX Q4: 46–78% correct at 3 steps by domain (M3 Ultra) | vLLM mtp w/ "model" pointing at the head · SGLang NEXTN | MIT |
| RedHatAI/GLM-5.2-speculator.dspark | DSpark head · 3B (3 layers, block 8, Markov rank 256, aux target layers 2/20/39/58/75; full 154,880 vocab) | GLM-5.2-NVFP4 (verifier); trained on open-perfectblend-glm5.2-regen, 1 epoch | accept by task (7 positions, B200, "preliminary"): math 5.27 · RAG 4.01 · HumanEval 3.78 · summarization 3.61 · tool_call 3.39 · QA 3.14; 2.15× vs no-spec (102→219 tok/s, 4×B300 bs=1 — third-party Medium post); "70+ tok/s" single request on 8×H20 (vLLM recipe) | vLLM {"method":"dspark","model":"RedHatAI/GLM-5.2-speculator.dspark","num_speculative_tokens":7} (≥0.25, PR #47093) · SGLang only via jamesdborin repack (DSPARK --speculative-dspark-block-size 8 --speculative-num-draft-tokens 9, v0.5.17 B200); native loader PR #31047 open | Apache-2.0 |
| UCloud-org/GLM-5.2-FP8-DFlash | DFlash block-diffusion drafter · 3.7B (1.8B trained; 5 layers, block 16) | GLM-5.2-FP8; ~800K Nemotron-Post-Training-v2 + CodeAlpaca, SpecForge | τ / tok/s / vs vanilla / vs MTP (SGLang, conc. 1, greedy; hardware not stated): MBPP 8.04/478/4.29×/1.46× · MATH500 7.77/477/4.28×/1.54× · HumanEval 6.43/383/3.44×/1.42× · GSM8K 4.44/236/2.22×/1.51× · MT-Bench 3.56/220/1.99×/0.93× · C-Eval 2.98/177/1.62×/0.93× | SGLang DFLASH --speculative-num-draft-tokens 16 --tp-size 8 · vLLM "≥0.20.1 reads this checkpoint directly" (no command, no numbers — unverified) | MIT |
| SubconsciousDev/glm-5.2-fp8-dflash-v1 · -v2 | DFlash · 2B (v1 block 16; v2 block 12, fine-tuned from v1) | GLM-5.2-FP8 | v1 speedup / τ (conc. 1; hardware & baseline unstated): MBPP 4.9×/9.03 · MATH500 4.3×/7.44 · LiveCodeBench 3.1×/5.35 · GSM8K 2.3×/4.87 · MT-Bench 2.4×/3.96; v2 no numbers | SGLang DFLASH only (v2 adds --speculative-draft-kv-cache-dtype bfloat16) | not stated |
| siro1/glm-5.2-dspark-spec-v1 | DSpark · 4B (5 Qwen3-backed layers, rank 256, block 16) | GLM-5.2 base / NVFP4 verifier; speculators 0.6.0.dev0, epoch 2 | val τ 4.58 @44.7%; GB300 TP4, 15 spec tokens: math ~403 tok/s (accept 6–7), QA ~196, tool-call ~188 | vLLM fork only (neuralmagic/vllm@dspark-speculators) | MIT |
| RedHatAI …dspark-preview | DSpark · 3B (5 layers, online-trained from live vLLM) | GLM-5.2-FP8 | accept 2.75 @41%; 1.36× — superseded by the epoch-1 release above | vLLM nightly | Apache-2.0 |
| AQ-MedAI/GLM-5.1-eagle3 | EAGLE-3 head · 1B | GLM-5.1 (same arch/vocab as 5.2; cross-loading unverified) | accept 2.70–3.41; beats MTP throughput at bs=32 (1369 vs 1292 tok/s) | SGLang EAGLE3 | MIT |
| incoai/GLM-5.3-Flash-DFlash2 | DFlash-2 block-diffusion · 1B | GLM-5.3-Flash | accept 3.71–5.86; 1.73–2.79× (MATH-500 438.9 tok/s) | SGLang DFLASH | research-only |
| thoughtworks GLM-4.7 heads | EAGLE-3 · 0.1–0.6B | GLM-4.7(-Flash) | not benchmarked publicly | SGLang | — |
| GLM-4.7-Flash as classic draft model | standalone LM · ~30B-A3B | GLM-5.2 (vocab 154,880 shared; diff tokenizer.json before relying on it) | no published numbers; SGLang cookbook exposes the standalone-draft preset | SGLang STANDALONE · vLLM draft_model | MIT |
| Suffix decoding (training-free) | model-free | proven on GLM-4.7 | −22% TPOT on agentic coding (Novita/LMSYS); no 5.2 numbers yet | SGLang SUFFIX (novita branch) · vLLM suffix | — |
| n-gram lookup (training-free) | model-free | GLM-5.2 GGUF | llama.cpp ngram-simple n=12 on 10×MI100: +22% structured code, +27% verbatim repeat, 0% prose (accept ≈1.0 when it fires; n=6 causes 50%+ slowdown). DFlash GGUF port reaches ≤5% acceptance in ik_llama — broken | llama.cpp --spec-type ngram-simple · SGLang NGRAM · vLLM ngram (no 5.2 numbers in either engine) | — |
Mean accepted tokens per verification pass, as reported by each source — tasks, block sizes and quants differ (block drafters report their best task; MTP is a whole-traffic mean); hover for context
First choice — the shipped DSpark module. The only Pro-sized option with published wins: accepted length ~5 vs ~2.5 for MTP-1, +57–78% per-user speed over MTP-1 on Pro (+60–85% on Flash), +52% aggregate throughput at a 35 tok/s/user SLA and a nominal +406% at 50 tok/s/user where MTP-1 collapses (paper §5.4), 383.7 tok/s bs=1 TP=8 on B300 (SGLang v0.5.16 release notes), and 57.2% acceptance / τ 3.86 on a 2×H100 NVL field report (≈1.75× the per-step yield of MTP at 2.2). No third party has trained a head for Pro — the only community artifacts are GGUF extractions of this same module.
# SGLang ≥ 0.5.16 — DSPARK shipped (#30261, #31434); no separate --speculative-draft-model-path
python3 -m sglang.launch_server --model-path deepseek-ai/DeepSeek-V4-Pro-0813 -tp 8 \
--speculative-algorithm DSPARK # env SGLANG_RAGGED_VERIFY_MODE=compact|static|cap-accept
# MTP fallback: --speculative-algorithm EAGLE \
# --speculative-num-steps 3 --speculative-eagle-topk 1 --speculative-num-draft-tokens 4
# vLLM ≥ 0.25 (PR #46995) — note V4 uses "mtp", not V3's "deepseek_mtp"; fp8 KV + FLASH_ATTN/sparse-MLA backend required
vllm serve deepseek-ai/DeepSeek-V4-Pro-0813 -tp 8 --tokenizer-mode deepseek_v4 --kv-cache-dtype fp8 \
--speculative-config '{"method":"dspark","num_speculative_tokens":7,"draft_sample_method":"probabilistic"}'
# main (Aug 2026, PR #47808): add "enable_adaptive_verification":true — SM100-class backend only;
# no PP / LoRA / --enforce-eager / output logprobs in that mode. 0.27.0 adds DSpark AR fusion (#50242).
# llama.cpp / ik_llama.cpp — extracted Pro DSpark drafter GGUF (77B sparse, 26–42 GB quantized)
llama-server -m DeepSeek-V4-Pro-0813-.gguf --spec-type draft-dspark \
--spec-draft-n-max 5 -md dspark-DeepSeek-V4-Pro-0813.gguf # pokey2025: ~46% acceptance, 1.3–1.9× on 1×RTX Pro 6000 + CPU-MoE
# (the widely quoted unsloth 1.91× / 76.4% on B200 is the V4-Flash-0731 drafter, not Pro)
| Drafter | Type · size | Target | Measured | Serving | License |
|---|---|---|---|---|---|
| Built-in DSpark module (-0813, -DSpark; nvidia NVFP4 carries the heads unquantized, spec not validated) | shipped block drafter (5-token blocks, 3 MoE layers, KV from target layers 58–60, Markov rank 512; ~77.5B — Part VIII) | V4-Pro / V4-Flash | accept ~5; +57–78% per-user over MTP-1 (Pro); +52% / +406% throughput at 35 / 50 tok/s/user SLA; 383.7 tok/s bs=1 B300 TP8; 57.2% · τ 3.86 on 2×H100 (vLLM PR); +26–31% accepted length vs EAGLE-3-class (Qwen3 targets); our own measurement 4.9–5.3 math/code, 2.8–3.5 chat (Part VII) | SGLang DSPARK (shipped v0.5.16; open sm_121 topk bug #33134) · vLLM dspark (≥0.25; adaptive verification on main) · llama.cpp PR #25173 via extracted GGUF · TRT-LLM spec page has no DSpark/V4 entry · vllm-ascend RFC #11126 | MIT |
| Built-in MTP (nextn ×1) | shipped module (SWA-only attention); present in preview and 0813 configs | V4-Pro / V4-Flash | accept ~2.5 (LMSYS day-0, B200 TP8); vLLM recipe synthetic 2.49; config identical to V3's | SGLang EAGLE/NEXTN (adaptive spec treats DSV4 as a "weak draft" preset) · vLLM mtp (multi-layer MTP speculator #48892 in 0.27) · TRT-LLM ✓ · llama.cpp PR #25784 (draft; 65% acceptance, ~1.5× on DGX Spark — variant unstated) | MIT |
| canada-quant NVFP4-FP8-MTP | NVFP4 experts + FP8 attention requant keeping the MTP block byte-identical | V4-Pro | MTP k=1 draft acceptance 91.2% (probe) / 92.8% cumulative; 139.3 tok/s single stream; +25.7% (bs 1) to +36.9% (c=16) vs upstream MXFP4 — 8×B300 TP8+EP | vLLM {"method":"mtp","num_speculative_tokens":1} | MIT |
| RedHatAI V4-Flash DFlash | DFlash head · 2B (5 all-SWA layers) | V4-Flash only | mean accept ~3.9 (78.8%→19.3% by position); trained on live-vLLM hidden states (H200) | vLLM dflash — card: "requires a custom vLLM build" | — |
| AQ-MedAI V4-Flash eagle3 | EAGLE-3 head · 0.7B | V4-Flash only | accept 2.6–3.2 | SGLang EAGLE3 | MIT |
| Syzygy V4-Flash EAGLE3.1 | EAGLE-3.1 head · ~0.4B | V4-Flash only | τ≈2.47; 2.63× on 4×B200 | custom vLLM overlay | MIT |
| Extracted Pro DSpark drafter GGUFs: pokey2025 (0813) · dev7a · alessandrobologna | standalone extraction of the shipped module — 77B sparse; 26.6 GB (Q2_K/Q8_0) to 42.1 GB (MXFP4/Q8_0); pokey2025 29 GB IQ3_XXS | V4-Pro | pokey2025: ~46% acceptance (27–80% per request), 1.3–1.9× (~19 vs ~10 tok/s), ik_llama.cpp, 1M ctx, 1×RTX Pro 6000 + 2×EPYC 9355 --cpu-moe; dev7a: 38/120 drafted accepted in one quoted run. No B200-class Pro GGUF numbers exist | llama.cpp --spec-type draft-dspark --spec-draft-n-max 5 -md … (PR #25173); ik_llama --spec-type dspark:n_max=5 | MIT |
| Extracted Flash DSpark drafter GGUFs (unsloth recipe, GaelicThunder, others) | ~6.5–11 GB drafter | V4-Flash only | unsloth: 60→120 tok/s (1.91×), 76.4% acceptance on B200; GaelicThunder: 16.6→30.5 tok/s code, ~50% acceptance on GB10 | llama.cpp --spec-type draft-dspark --spec-draft-n-max 3 | MIT |
| MTP-MLX extraction | Apple-silicon MTP port · "4B", 8-bit, ~14 GB | V4-Pro | card: "Text inference with MTP: untested"; base runs ~31 tok/s across M3 Ultra 512GB + M4 Max | MLX | — |
Mean accepted tokens per verification pass, as reported — Pro vs Flash targets differ; hover for context
| Drafter path | vLLM (v0.27.1) | SGLang (v0.5.18) | TensorRT-LLM | llama.cpp |
|---|---|---|---|---|
| GLM-5.2 MTP | ● mtp (≥0.23) (MI300X hang #48568) | ● EAGLE (≥0.5.14) (NVFP4 bug #30209 → triton draft MoE; PD-disagg #30854) | — unverified | — PR #22673 draft-mtp tested on Qwen3.6 only |
| GLM-5.2 DSpark head (RedHat) | ● dspark (≥0.25, PR #47093) | ◐ DSPARK via jamesdborin repack; native loader PR #31047 open, ROCm #31260 draft | — | — |
| GLM-5.2 DFlash heads (UCloud / SubconsciousDev) | ◐ dflash "≥0.20.1 native" per UCloud card — no command or numbers | ● DFLASH (no DP-attention; overlap scheduler off) | — | — GGUF port ≤5% acceptance |
| V4-Pro MTP | ● mtp | ● EAGLE | ● | ◐ PR #25784 (draft) |
| V4-Pro DSpark | ● dspark (≥0.25; adaptive verification on main) (fp8 KV + FLASH_ATTN/sparse-MLA; no PP) | ● DSPARK (≥0.5.16) (PP/DP-attention limits of #29538 — unverified whether lifted) | — no DSpark/V4 entry on spec-decoding page | ● extracted GGUF drafters (PR #25173) |
| V4-Flash third-party heads (DFlash / EAGLE-3 / 3.1) | ◐ dflash (custom build) · eagle3 (vendor overlay) | ● EAGLE3 (AQ-MedAI) · EAGLE3.1 unsupported | — | ● Flash DSpark GGUFs |
| Training-free (ngram / suffix) | ● (no numbers on either flagship) | ● (GLM suffix via novita branch; NGRAM: no DP-attention) | ● NGram | ● ngram-simple +22–27% on GLM-5.2 code/repeat |
| Scenario | GLM-5.2 | DeepSeek-V4-Pro |
|---|---|---|
| Latency-sensitive serving (default) | Built-in MTP, k=5 (accept 5.47 ablation; ~4 in production) | Shipped DSpark, k=7 (accept ~5; 4.9–5.3 math/code, 2.8–3.5 chat — Part VII) |
| Code / math-dominated traffic, low concurrency | UCloud DFlash on SGLang: τ 6.4–8.0, 1.42–1.54× over MTP — but 0.93× on chat, so gate by workload | DSpark already covers it (τ ≈5 on math/code) |
| Max-throughput, high batch | Consider speculation OFF — MTP is 28% costlier at throughput-optimal points (SemiAnalysis) | DSpark still won LMSYS's concurrency sweep, but re-benchmark at your batch; k shrinks with load (Part IV) |
| TensorRT-LLM stack | no verified spec path yet | MTP only — DSpark not listed |
| Local / llama.cpp | training-free ngram-simple only (+22–27% on code/repeat); MTP path untested on GLM; DFlash GGUF port broken | extracted Pro DSpark drafter GGUF: ~46% acceptance, 1.3–1.9× on 1×RTX Pro 6000 + CPU-MoE (pokey2025); the 1.91× unsloth figure is Flash |
| Agentic / RAG / repetitive traffic | stack suffix decoding (−22% TPOT proven on GLM-4.7) with MTP | DSpark already covers it; suffix numbers unpublished |
| WAN-PP deployment (Parts II–IV) | Both ship exactly the last-stage self-drafter the playbook calls for — MTP/DSpark inputs live where sampling happens; block drafts (DSpark, 5 tokens/pass) are the better per-lap payload; engine PP-composability caveats from Part II still apply | |
Three toolchains, all open: DeepSpec (DeepSeek official, MIT) trains and evaluates DSpark / DFlash / EAGLE-3 end-to-end — the reference for V4 targets. Speculators (Red Hat / vLLM; DSpark since v0.7.0) is proven on both of this page's flagships — it produced the GLM-5.2 DSpark heads (RedHat's and siro1's) and the V4-Flash DFlash head, with online hidden-state extraction from a live vLLM server as the documented recipe. SpecForge (LMSYS/SGLang) trained the AQ-MedAI EAGLE-3 heads and, via its offline hidden-state pipeline, UCloud's GLM-5.2 DFlash drafter — so a GLM-5.2 target path exists in practice even though the repo README lists no GLM-5.2 config; DeepSeek-arch target support is tracked in issue #257. z-lab/dflash (the DFlash authors) still lists GLM-5.1 as "coming soon". Rule of thumb from every card surveyed: match the training data to your serving distribution (RedHat's task-spread — 5.27 on math vs 3.14 on QA from one head — and UCloud's 8.04 on MBPP vs 2.98 on C-Eval show how much it matters), and re-benchmark against the shipped MTP/DSpark before adopting any third-party head. Two of the three GLM-5.2 DFlash/DSpark cards state no hardware for their numbers.