This is probably a pretty rare setup, so I’m not sure how useful this will be for everyone, but here’s an example of running inference with the original zai-org/GLM-5.3 model (756 GiB) as-is, without additional quantization.
Model: zai-org/GLM5.3
vLLM: Eugr’s spark-vllm-docker + mod
DGX Spark: x8 (TP=8)
tool-eval-bench: v2.7.1
Even with 8× DGX Sparks, I can only get about 11.0 GiB of KV cache per node, so the practical context size is limited:
GPU KV cache size: 218,112 tokens
Maximum concurrency for 65,536 tokens per request: 3.33x
But the most important point for me is this:
zai-org/GLM-5.3 can actually run in a private home setup.
That alone is pretty amazing.
Huge thanks to NVIDIA for making the DGX Spark possible, to @eugr_nv for making spark-vllm-docker available, and to everyone in this forum who shares information and contributes to the discussions.
This community has made setups like this possible. 🔥
Thank you!
sjug
October 9, 2026, 3:57pm
2
It’s not quite zai-org/GLM-5.3 , it’s the NVFP4 quant of it.
I doubt it’s as rare as you may think.
Keep on optimizing and get those prefill numbers up!
sjug
October 9, 2026, 4:03pm
4
Ah I see, that’s why the KV cache is so low, got it.
Post up your recipe.
this!
# Recipe: zai-org/GLM-5.3
# GLM 5.3 using the B12X-optimized serving stack
recipe_version: "1"
name: zai-org/GLM-5.3
description: vLLM serving zai-org/GLM-5.3
model: zai-org/GLM-5.3
#container: vllm-node-b12x
container: vllm-node-b12x:n128fix2
build_args:
- --exp-b12x
cluster_only: true
mods:
- mods/glm53-fix-chat-template
defaults:
port: 8000
host: 0.0.0.0
tensor_parallel: 8
pipeline_parallel: 1
decode_context_parallel: 1
block_size: 256
max_model_len: 65536
max_num_seqs: 4
max_num_batched_tokens: 4096
num_speculative_tokens: 3
max_cudagraph_capture_size: 16
gpu_memory_utilization: 0.88
env:
CUTE_DSL_ARCH: "sm_121a"
VLLM_ENABLE_ROCE_ALLREDUCE: "1"
VLLM_ENABLE_PCIE_ALLREDUCE: "0"
VLLM_ROCE_ALLREDUCE_MAX_SIZE: "2MB"
VLLM_WORKER_MULTIPROC_METHOD: "spawn"
VLLM_USE_BREAKABLE_CUDAGRAPH: "1"
B12X_POLICY_MODE: "auto"
command: |
vllm serve zai-org/GLM-5.3 \
--host {host} \
--port {port} \
--pipeline-parallel-size {pipeline_parallel} \
--decode-context-parallel-size {decode_context_parallel} \
--mamba-cache-mode align \
--max-model-len {max_model_len} \
--max-num-seqs {max_num_seqs} \
--max-num-batched-tokens {max_num_batched_tokens} \
--block-size {block_size} \
--gpu-memory-utilization {gpu_memory_utilization} \
--tensor-parallel-size {tensor_parallel} \
--enable-chunked-prefill \
--enable-prefix-caching \
--enable-auto-tool-choice \
--async-scheduling \
--reasoning-parser glm45 \
--tool-call-parser glm47 \
--load-format b12x \
--attention-backend B12X \
--trust-remote-code \
--dtype auto \
--kv-cache-dtype fp8 \
--max-cudagraph-capture-size {max_cudagraph_capture_size} \
--compilation-config '{{"cudagraph_mode":"FULL_AND_PIECEWISE","custom_ops":["all"]}}' \
--override-generation-config '{{"temperature": 1.0, "top_p": 0.95, "top_k": 20, "presence_penalty" : 0.0, "repetition_penalty" : 1.0, "min_p": 0.0}}' \
--default-chat-template-kwargs '{{"thinking":true,"reasoning_effort":"max"}}'
This one is the nvidia/GLM-5.3-NVFP4 weights version.
Model: nvidia/GLM-5.3-NVFP4
vLLM: Eugr’s spark-vllm-docker + mod
DGX Spark: x8 (TP=8)
tool-eval-bench: v2.7.1
GPU KV cache size: 446,208 tokens,
Maximum concurrency for 262,144 tokens per request: 1.70x
I’m waiting for GLM-5.5 to see the TC-68 finally PASS