GLM-5.3 — EXL3 3.2 bpw, Pollard method, SmoothQuant-folded, for four DGX Sparks

zai-org/GLM-5.3 (744B total / ~40B active MoE, glm_moe_dsa: 78 layers, 256 routed experts + 1 shared, top-8, MLA attention with a DeepSeek-style sparse indexer, one MTP layer) quantized from the bf16 release to an EXL3 trellis at 3.21 bits per weight, with SmoothQuant folded in first and the allocation chosen by exllamav3's budgeted allocator on in-domain calibration data. Sized to serve on four 128 GB DGX Spark (GB10) nodes at tensor parallelism 4 with the model's own MTP layer as the speculative draft.

What is in the box

part precision note
routed experts (256 × 75 MoE layers) EXL3 trellis, ~3 bpw (allocator-chosen per tensor) the bulk of the 292 GB
attention (q_a, q_b, kv_a, o_proj), indexer wq_b, shared experts, dense MLP (layers 0–2) EXL3, 5 bpw attention is quantized, unlike the public expert-only builds
lm_head EXL3, 6 bpw
MTP layer 78 (block + shared head norm) EXL3, 8 bpw the speculative draft
eh_proj (MTP), embeddings, norms, routers, indexer wk / weights_proj, kv_b_proj bf16 / fp16 passthrough; eh_proj restored to bf16 because vLLM builds it unquantized
SmoothQuant folded (α = 0.5) into the two norm seams of every layer exactly invertible

292 GB in 46 safetensors shards plus one 144 MB eh_proj shard; quantization_config.json (exl3, version 1.4.8, target_bits_per_weight 3.2, average_bits_per_weight 3.21, head_bits 6, mtp_bits 8 — bits is kept as the integer 3 because the Hub's config validator requires an integer there); GLM-5.3 tokenizer and the updated upstream chat template (commit aca966e).

Measured quality (same fleet, same probes, same day; "int4 TP8" = our production int4/int8 GPTQ build of the same model)

measurement this model, 4 nodes int4 TP8, 8 nodes
live perplexity, 6 fixed held-out texts, 4,079 tokens 4.831 4.82 – 4.84
HumanEval / HumanEval+ pass@1 (greedy, EvalPlus) 0.957 / 0.927 0.963 / 0.945
MBPP / MBPP+ pass@1 0.979 / 0.841 0.971 / 0.828
correctness probe (counting, factual, prose, 4- and 8-way concurrent) all passed all passed

Probes are teacher-forced or greedy through the served API. The perplexity texts were excluded from calibration by content hash.

Speed and memory (vLLM 0.28, TP4, fp8 KV, MTP k=3, --gpu-memory-utilization 0.84)

this model, 4 nodes int4 TP8, 8 nodes
single-stream decode, mixed workload 24.0 tok/s 40.0
4-stream aggregate, mixed workload 58.2 tok/s 85.2
speculative draft (in-checkpoint MTP), replay of real traffic 2.23 accepted/step at k=3, 74 % draft-accept, 3.23 tok/step 1.58 – 1.84 at k=5
KV cache 396K tokens (fp8, ~57 KB/token incl. indexer cache) 900K (nvfp4)
weights per node 81 GiB ~50 GiB

Serving

Built and measured with vLLM 0.28 plus an EXL3 runtime plugin that provides the sparse-MLA attention backend for GB10 and the EXL3 GEMM/MoE kernels (--attention-backend CUSTOM --block-size 256 --kv-cache-dtype fp8, speculative config method: mtp, num_speculative_tokens: 3, --max-model-len 180000).

Runtime requirement. This artifact quantizes attention and the head, which public expert-only EXL3 builds do not. The EXL3 runtime therefore has to (1) decode every fused shard at its stored width — exllamav3 pads output widths to multiples of 128 and applies a 128-column output Hadamard, so kv_a_proj_with_mqa is stored 640 wide for 576 declared — and trim afterwards, and (2) shard a quantized lm_head on 128-row boundaries of the global vocabulary under tensor parallelism. A runtime that narrows the trellis to the declared width, or starts a vocab shard mid-block, loads this model without error and emits gibberish. Check with a teacher-forced perplexity read before trusting it: the numbers above were taken on a runtime that satisfies both. NVFP4 KV is not available on the sparse-MLA path we used.

GLM-5.3's chat template has no enable_thinking switch. Control thinking with chat_template_kwargs {"reasoning_effort": "low" | "high", "clear_thinking": false}; passing chat_template_kwargs replaces the server defaults.

Recipe (short)

  1. Streaming bf16 forward over 384 × 2048 in-domain rows with hooks on the two norm seams of each layer → per-channel max|x|; SmoothQuant fold at α = 0.5 (norm weight ÷ s, consumer columns × s). Exactly invertible.
  2. exllamav3 1.4.8 (aarch64 build) budgeted allocator, -b 3.2 -hb 6 -mb 8 -hq, same calibration rows (-cd). No hand-tiered recipe: the allocator's choices beat ported per-layer recipes on this model (Pollard Weights' measurement, reproduced).
  3. Band-parallel conversion on ten nodes (8 layers each, --resume from the previous band's hidden state, static strategy), merge, compile.
  4. Restore bf16 eh_proj; resolve MTP-side tensors by shard headers, not the index.

The full recipe and receipts follow in a companion repository.

Files

model-00001…00046-of-00046.safetensors, model-mtp-eh_proj.safetensors, model.safetensors.index.json, config.json, quantization_config.json, generation_config.json, tokenizer.json, tokenizer_config.json, chat_template.jinja.

Prior work this build stands on

License / provenance

Derivative of zai-org/GLM-5.3 (GLM-5.3 License, © 2026 Z.AI). Quantization and measurement by bot-lab-21. Quantizer method: Pollard Weights (Apache-2.0); converter: exllamav3 (MIT); serving: vLLM (Apache-2.0) with the cuda-exl3 plugin. Produced with the help of an AI assistant operating the cluster.

Downloads last month
-
Safetensors
Model size
157B params
Tensor type
BF16
·
F16
·
I16
·
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for bot-lab-21/GLM-5.3-EXL3-3.2bpw-Pollard-Smooth

Base model

zai-org/GLM-5.3
Quantized
(47)
this model

Papers for bot-lab-21/GLM-5.3-EXL3-3.2bpw-Pollard-Smooth