A mixed-precision EXL3 serving checkpoint of GLM-5.2 for 4× RTX PRO 6000 Blackwell (sm_120a): rank-sliced TR3 3.0 bpw routed experts plus EXL3 6.0 bpw dense path (375 tensors), MTP speculative-decode head retained. 279.68 GiB on disk (15 GiB smaller than the 3.0 bpw + BF16-dense parent), +43.7 % KV-cache capacity, quality at the parent's noise floor.
Serving configs, patches and full measurement record:
https://github.com/brandonmmusic-max/GLM-5.2-EXL3-DENSE6-MTP78 — mirrored here under
serving/. That repo carries the serving configs, the two
required patches, and every measurement (JSON + logs) behind the numbers
below.
malaiwah/GLM-5.2-EXL3-TR3-MTP78/3bpw-keep0.hybrid_tr3_tail.moe_layers=[3,78]),
byte-copied from the parent checkpoint.o_proj, q_b_proj, shared_experts.{gate,up,down}_proj (layers 3–77).
Per-tensor encode NMSE 3.8–5.1e-04.lm_head, embed_tokens, router mlp.gate,
DSA indexer, kv_b_proj, q_a_proj+kv_a_proj_with_mqa (packed
fused_qkv_a_proj, n=576 fails Hadamard-128), all 15 dense tensors of
layers 0–2, and the non-routed components of MTP layer 78. Layer-78 routed
experts remain inherited EXL3 weights; the whole MTP layer is not BF16.Reference image (recommended): voipmonitor/vllm:gilded-gnosis-v20-vllm69ba80b-sia2ea608-fi801d57a-cu132-20260730-r13
(registry digest sha256:02796036c96a52fda0919aa260c45c70bc97d8e662a6ae5e614b5f987c20851b).
Also validated on the 20260729 r11 image (…-vllm9502cc7-side7739a-…-r11).
Stock images do NOT serve this model as-is — two small patches are
required (see patches/, applied via Dockerfile.r13pf):
patch_exl3_num_active.py — required or every TP worker dies at load
with TypeError: exl3_moe(): incompatible function arguments. The vendored
exllamav3 extension takes 30 args (num_active appended); vLLM's call site
passes 29. Appends -1 (0 would silently zero the routed-expert output).
Present in r11, r12 and r13 unchanged; until it lands upstream, this needs
either the patch or a ~1-line vLLM PR. The checkpoint format itself
(mixed 3.0/6.0 bpw, rank-sliced hybrid tail) loads natively — the loader
resolves codebooks per layer and Exl3LinearMethod never references a
global bit width — so no "new model type" PR is needed; only this call-site
arity fix.patch_exl3_prefetch.py — restores exllamav3's >144-row reconstruct
dispatch for the dense path (materialize once + one cuBLAS HGEMM instead of
re-decoding the trellis per 16-row m-tile). Without it, dense-quantized
prefill loses ~25–37 %. Measured 4.76× on o_proj at M=2048; numerically
verified vs the fused path (≤3.5e-03 worst rel. deviation). The file also
contains an env-gated (default-off, falsified-on-measurement) aux-stream
prefetch experiment — leave VLLM_EXL3_PREFETCH=0.Build: cd patches && docker build -f Dockerfile.r13pf -t glm52-r13-pf:v1 .
Then ./serve.sh (edit volume paths in the compose first).
/proc/<pid>/environ)KV_CACHE_DTYPE=nvfp4_ds_mla KV_FP8_ROPE=1 VLLM_NVFP4_MLA_DYNAMIC_SCALE=1
VLLM_NVFP4_MLA_SCALES_FILE= (explicitly empty → dynamic scale selection)
MOE_BACKEND=b12x MOE_MODE=a16 DCP=4 DCP_KV_CACHE_INTERLEAVE_SIZE=1
VLLM_EXL3_RECONSTRUCT_M=144 VLLM_EXL3_PREFETCH=0
--attention-backend B12X_MLA_SPARSE --quantization exl3
--max-num-seqs 8 --max-num-batched-tokens 3072
cudagraph_capture_sizes=[4..32] MTP-3 speculative decoding
GPU_MEMORY_UTILIZATION=0.95 (launcher default)
Traps written in blood:
nvfp4_ds_mla survives only under B12X_MLA_SPARSE; anything else
silently coerces to fp8_ds_mla. Dynamic NVFP4 scaling requires
KV_FP8_ROPE=1.KV_CACHE_DTYPE to fp8 — pin it as a
literal in the compose and verify from /proc/<pid>/environ, never from
docker inspect (the launcher hard-exports values that don't appear there).4× NVIDIA RTX PRO 6000 Blackwell Workstation (2× Max-Q at a 300 W hard cap), sm_120a, 188 SMs, 96 GB GDDR7 each, PCIe Gen5, no NVLink. TP4 + DCP4.
| tokens | note | |
|---|---|---|
| nvfp4_ds_mla KV (this config) | 1,619,968 (r13) / 1,618,432 (r11) | 3.09× concurrency at 524,288-token max-len |
nvfp4 + capacity patches (Dockerfile.r13cap) |
1,758,720 (+8.6%) | 3.35× — shares the 1054 MiB/rank draft prefill arena; speed-neutral (paired A/B), KLD unchanged, estonia 5/5 |
| fp8 KV baseline (same weights) | ~1,126,400 | nvfp4 = +43.7 % |
| gate | target | measured |
|---|---|---|
| MTP accept α | ≥ 2.828 | 3.245 (n=3: 3.31/3.24/3.19) |
| KLD vs BF16-dense parent (nvfp4-dyn KV) | ≤ 0.112645 + noise | 0.114391 ± 0.00192 (n=5, r11) / 0.113777 ± 0.00212 (n=5, r13) — 1.3σ |
| KLD with fp8 KV (same weights) | — | 0.105479 ± 0.00139 (n=5) — lower-KLD / lower-capacity operating point |
| estonia (×20, concurrency 5, temp 0) | — | 20/20 |
| lavd ledger (×20, concurrency 5, temp 0) | — | 19/20 (12 exact, 7 near, 1 fail) |
| hotel-lights (×20, c5, temp 0, rp 1.15, 64k cap) | — | 12/20 exact |
| hotel-lights (×20, c5, temp 0, no rp, uncapped) | — | 7/20 — flag-confounded: greedy with no repetition penalty loops; one run generated ~3 h before abort. Use a rep penalty with this profile. |
| hotel-lights (×15, c5, reduced thinking, rp 1.15, 20k cap) | — | 2/15 — reduced reasoning effort collapses this suite (and/or 20k truncation); serve reasoning-heavy workloads at default (Max) effort |
| needle-in-haystack, 32k→350k × depths 10/25/50/75/90 | — | 35/35 recovered, zero garbled — perfect retrieval at every context (32k, 64k, 128k, 192k, 256k, 320k, 350k) and every depth |
| fused-GEMM numerics r11 vs r12 vs r13 | — | bit-identical (probe on real 6 bpw weight, 1.687e-03 vs fp32-accumulate reference) |
KLD harness: 2048-token teacher-forced eval vs BF16 reference logits, n=5 runs, TP4 eager. Reference arms on the parent TR3 checkpoint: uncalibrated 0.151127 / static scales 0.116195 / dynamic 0.112645 / fp8-KV 0.100246.
Prefill = standalone, server-side tok/s. Decode = C1 per-request (1/ITL), MTP-3, temp 0.
| arm | prefill 8k | prefill 32k | decode C1 |
|---|---|---|---|
| r13 + patches, DENSE6 (this repo) | 2224 ± 16 | 2090 ± 5 | 101.2 ± 0.8 |
| r11 + patches, DENSE6 | 2234 ± 26 | 2095 ± 28 | 93.2 ± 3.7 |
| r11 + patches, parent TR3 (BF16 dense) | 2330 ± 1 | 2185 ± 2 | 97.9 ± 1.0 |
Full sweep on r13 (single round, results/battery/):
| context | prefill tok/s | concurrency | decode aggregate (ctx0 / 32k) | |
|---|---|---|---|---|
| 8k | 2261 | c1 | 100 / 100 | |
| 16k | 1403 † | c2 | 153 / 149 | |
| 32k | 2108 | c4 | 225 / 219 | |
| 64k | 1993 | c8 | 309 / 284 | |
| 128k | 1813 |
† n=1 anomaly, off-trend TTFT; consistent with a one-time JIT compile on a context-length kernel bucket (see traps above), re-measure pending.
Prefill on this rig is thermally ordered, not noisy — arms alternate cold-started (<40 °C gate) in Latin-square position rotation. n=1 is never evidence; three separate campaign conclusions were reversed at n=3, and a fourth (a phantom "r13 regression") was a first-boot compile artifact caught by position rotation. Full campaign narrative and negative results (fp8/MXFP8 dense, k58 GEMV, fp16 MMA accumulation, aux-stream reconstruct prefetch — falsified at 0.3 % of end-to-end) are in the source project's REPORT.
launcher/ the ACTUAL serving entrypoint chain from the
image (serve-gilded-gnosis.sh -> v19 -> v16):
every env var above is consumed here
compose/dense6-r13pf/compose.yml serving compose (r13, recommended)
compose/dense6-r11pf/compose.yml serving compose (r11, also validated)
patches/ the two required patches + Dockerfiles
serve.sh bring-up + /proc env verification
results/battery/ full bench + estonia/lavd/hotel/needle (JSON+logs)
results/tri-campaign/ the 10 position-matched speed arms
results/kld/ KLD runs: r13 nvfp4-dyn, fp8-KV frontier, r11 canonical
results/sharegate/ in-situ reconstruct share measurement (0.3 %)
Canonical project attribution is also recorded in the TR3 quantization provenance.
Inherits the license of the base GLM-5.2 model — see the base model's terms before use. The patches and scripts in this repo are provided as-is.
model-layer-078.safetensors 4.2 GBmodel-layer-010.safetensors 3.9 GBmodel-layer-014.safetensors 3.9 GBmodel-layer-018.safetensors 3.9 GBmodel-layer-022.safetensors 3.9 GBmodel-layer-026.safetensors 3.9 GBmodel-layer-030.safetensors 3.9 GBmodel-layer-034.safetensors 3.9 GBmodel-layer-038.safetensors 3.9 GBmodel-layer-042.safetensors 3.9 GBmodel-layer-046.safetensors 3.9 GBmodel-layer-050.safetensors 3.9 GBmodel-layer-054.safetensors 3.9 GBmodel-layer-058.safetensors 3.9 GBmodel-layer-062.safetensors 3.9 GBmodel-layer-066.safetensors 3.9 GBmodel-layer-070.safetensors 3.9 GBmodel-layer-074.safetensors 3.9 GBmodel-layer-006.safetensors 3.9 GBmodel-layer-011.safetensors 3.9 GBmodel-layer-012.safetensors 3.9 GBmodel-layer-013.safetensors 3.9 GBmodel-layer-015.safetensors 3.9 GBmodel-layer-016.safetensors 3.9 GBmodel-layer-017.safetensors 3.9 GBmodel-layer-019.safetensors 3.9 GBmodel-layer-020.safetensors 3.9 GBmodel-layer-021.safetensors 3.9 GBmodel-layer-023.safetensors 3.9 GBmodel-layer-024.safetensors 3.9 GBmodel-layer-025.safetensors 3.9 GBmodel-layer-027.safetensors 3.9 GBmodel-layer-028.safetensors 3.9 GBmodel-layer-029.safetensors 3.9 GBmodel-layer-031.safetensors 3.9 GBmodel-layer-032.safetensors 3.9 GBmodel-layer-033.safetensors 3.9 GBmodel-layer-035.safetensors 3.9 GBmodel-layer-036.safetensors 3.9 GBmodel-layer-037.safetensors 3.9 GBmodel-layer-039.safetensors 3.9 GBmodel-layer-040.safetensors 3.9 GBmodel-layer-041.safetensors 3.9 GBmodel-layer-043.safetensors 3.9 GBmodel-layer-044.safetensors 3.9 GBmodel-layer-045.safetensors 3.9 GBmodel-layer-047.safetensors 3.9 GBmodel-layer-048.safetensors 3.9 GBmodel-layer-049.safetensors 3.9 GBmodel-layer-051.safetensors 3.9 GBmodel-layer-052.safetensors 3.9 GBmodel-layer-053.safetensors 3.9 GBmodel-layer-055.safetensors 3.9 GBmodel-layer-056.safetensors 3.9 GBmodel-layer-057.safetensors 3.9 GBmodel-layer-059.safetensors 3.9 GBmodel-layer-060.safetensors 3.9 GBmodel-layer-061.safetensors 3.9 GBmodel-layer-063.safetensors 3.9 GBmodel-layer-064.safetensors 3.9 GBmodel-layer-065.safetensors 3.9 GBmodel-layer-067.safetensors 3.9 GBmodel-layer-068.safetensors 3.9 GBmodel-layer-069.safetensors 3.9 GBmodel-layer-071.safetensors 3.9 GBmodel-layer-072.safetensors 3.9 GBmodel-layer-073.safetensors 3.9 GBmodel-layer-075.safetensors 3.9 GBmodel-layer-076.safetensors 3.9 GBmodel-layer-077.safetensors 3.9 GBmodel-layer-003.safetensors 3.9 GBmodel-layer-004.safetensors 3.9 GBmodel-layer-005.safetensors 3.9 GBmodel-layer-007.safetensors 3.9 GBmodel-layer-008.safetensors 3.9 GBmodel-layer-009.safetensors 3.9 GBmodel-head.safetensors 1.9 GBmodel-embed.safetensors 1.9 GBmodel-layer-000.safetensors 802 MBmodel-layer-001.safetensors 802 MBmodel-layer-002.safetensors 802 MBHave the files? Submit a torrent.
Submit a torrentHave the complete files and permission to share them? Replace the example folder path. The script checks the files, makes a torrent and submits its magnet and checksums. Keep your torrent client seeding. Get your community key from your settings, and read the script before running it.
curl -fsSL https://pirateface.co/package.sh | bash -s -- --repo brandonmusic/GLM-5.2-EXL3-DENSE6-MTP78 ./model-folderbrandonmusic/GLM-5.2-EXL3-TR3-3.0bpw