GLM-5.3 ยท NVFP4

753B total ยท 256 routed experts ยท DeepSeek-sparse attention ยท 1M context

1403 GiB โ†’ 433 GiB  ยท  โˆ’69%  ยท  round-trip cosine 0.9961

Base Format Fits

NVFP4 quantization of Z.ai's GLM-5.3, following NVIDIA's own GLM-5.2 recipe tensor-for-tensor.

Quantized by LibertAI ยท not affiliated with Z.ai / Zhipu / NVIDIA


โœจ What this is

An NVFP4 checkpoint of GLM-5.3. The routed-expert FFN tensors โ€” 57,600 of them, the overwhelming majority of the model's weight โ€” are quantized to NVFP4 (E2M1, FP8-E4M3 per-16-block scales, FP32 per-tensor global scale). Everything outlier-sensitive stays in BF16:

all DeepSeek-sparse attention including the sparse indexer ยท all shared experts ยท the MoE routers ยท the three dense layers (0โ€“2) ยท the entire MTP layer 78, its experts included ยท token embeddings ยท lm_head ยท all norms

Activations are not calibrated โ€” see the input_scale note below, which is the one genuinely interesting thing we found while making this.


๐ŸŽฏ The recipe is not ours โ€” and that is the point

Z.ai state it plainly in the GLM-5.3 model card:

"GLM-5.3 uses the same base model as GLM-5.2 โ€” every gain comes from post-training."

The checkpoints bear that out exactly: GLM-5.3 and GLM-5.2 are both glm_moe_dsa, both 753,329,940,480 parameters, with identical config.json geometry. So rather than invent a partition, we reproduce the one NVIDIA ships in nvidia/GLM-5.2-NVFP4 โ€” a checkpoint that has been serving production traffic on our 4ร—B200 box since June 2026.

We verified the reproduction two ways before quantizing a single weight:

check result
emitted tensor-name set vs nvidia/GLM-5.2-NVFP4 232,385 / 232,385 identical
quantization_config.ignore vs NVIDIA's 156 / 156 identical
rest of quantization_config identical except producer.version (we report the ModelOpt we actually ran)

And once the weights were built, the finished checkpoint closed the loop: its summed total_size is 464,795,267,072 bytes โ€” byte-identical to NVIDIA's. Same names, same shapes, same dtypes, same byte count.

Concretely, what gets quantized is:

model.layers.{3..77}.mlp.experts.{0..255}.{gate,up,down}_proj     # 75 ร— 256 ร— 3 = 57,600

โ€ฆand nothing else. Layers 0โ€“2 are dense (first_k_dense_replace: 3) and layer 78 is the MTP head; NVIDIA keeps both entirely in BF16, so we do too.


๐Ÿ”ฌ About input_scale

Each quantized tensor here ships four entries โ€” .weight, .weight_scale, .weight_scale_2, and .input_scale. That last one is exactly 1.0 for all 57,600 tensors, and that is deliberate.

We sampled 24 .input_scale values out of nvidia/GLM-5.2-NVFP4 by HTTP range-read. Every one is 1.0. NVIDIA โ€” who wrote ModelOpt โ€” performed no activation calibration for that checkpoint; the tensors are unit placeholders. So in substance this is a weight-only NVFP4 quantization, and we did not fabricate a calibration we did not run.

But the tensors must still be present. vLLM's ModelOptNvFp4FusedMoE folds input_scale into the dequantization alpha:

alpha = weight_scale_2 * input_scale

When the tensor is absent, vLLM folds an uninitialised PerTensorScaleParameter โ€” observed as 0.0 โ€” which zeroes every expert and makes the model emit garbage. We hit exactly this on our own earlier weight-only GLM-5.3-Flash checkpoint and filed it as vllm#54189. Emitting 1.0 makes the fold a no-op and is precisely what the production-proven NVIDIA checkpoint does.

If you are quantizing an NVFP4 MoE yourself: emit input_scale, even if you did not calibrate. That is the takeaway.


๐Ÿ–ฅ Hardware

GPUs VRAM Verdict
4ร— B200 (183 GB) 732 GB โœ… fits, with room for a large KV pool
8ร— H200 / H100 640โ€“1128 GB โœ… fits
8ร— RTX PRO 6000 (96 GB) 765 GB โœ… fits
4ร— RTX PRO 6000 384 GB โŒ weights alone are 433 GiB

The FP8 release (~700 GiB) needs 8ร— B200; this NVFP4 build is what makes GLM-5.3 a 4-GPU model.


๐Ÿš€ Serving

Unlike GLM-5.3-Flash โ€” a genuinely new glm5_next architecture that needed per-model engine images โ€” GLM-5.3 is glm_moe_dsa, which vLLM and SGLang already support. No custom build, no patches.

vllm serve LibertAIDAI/GLM-5.3-NVFP4 \
  --tensor-parallel-size 4 \
  --max-model-len 262144 \
  --kv-cache-dtype fp8 \
  --enable-auto-tool-choice --tool-call-parser glm47 \
  --reasoning-parser qwen3 \
  --served-model-name glm-5.3

Notes carried over from running its GLM-5.2 sibling in production:

  • --tool-call-parser glm47 and --reasoning-parser qwen3 are the right pair for this family.
  • 64 attention heads divide cleanly by TP 2 / 4 / 8.
  • reasoning_effort accepts low, high, max โ€” and defaults to max, so budget max_tokens generously.
  • The chat template's clear_thinking defaults to false; pass clear_thinking=true for chat-style use.

๐Ÿ”ง How it was made

CPU-only shard-streaming pass with NVIDIA ModelOpt โ€” each of the 282 source shards is fetched, quantized, written, and dropped, so the job never holds more than a few shards at once and needs nowhere near 1.37 TiB of scratch.

Source is zai-org/GLM-5.3-BF16, not the FP8 release: the FP8 repo carries a modules_to_not_convert list, the signature of a converted checkpoint, so BF16 is the original and quantizing from it avoids stacking two lossy conversions.

Round-trip fidelity, measured by dequantizing back to BF16 and taking cosine similarity against the source weights: mean 0.9961 across sampled expert tensors.

The quantizer, the config builder, and the validation harness are published in full: server-admin/servers/glm53-nvfp4-files.


๐Ÿ™ Credits

Z.ai for GLM-5.3 and for releasing a BF16 checkpoint alongside the FP8 ยท NVIDIA for ModelOpt and for the GLM-5.2 recipe this follows ยท quantized and published by LibertAI.

Quantization only โ€” no weights were retrained, distilled, or otherwise modified beyond the numeric format described above.

Downloads last month
188
Safetensors
Model size
391B params
Tensor type
BF16
ยท
U8
ยท
F32
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for LibertAIDAI/GLM-5.3-NVFP4

Base model

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