GLM-5.3-Flash
Serve GLM-5.3-Flash with Dynamo and SGLang on B200 and GB200, or vLLM on GB200 and H200.
This recipe references an upstream third-party vLLM container image. NVIDIA does not publish or distribute this image. Users should review the upstream image’s open-source license and codec terms before use or redistribution.
Deploy Z.AI’s GLM-5.3-Flash with NVIDIA Dynamo using SGLang or vLLM. The SGLang B200 and GB200 recipes use a pinned NVFP4 checkpoint, FP8 KV cache, EAGLE ReplaySSM speculative decoding, and HiCache CPU offload. Choose single-node B200 or GB200 TP4 aggregated serving, or GB200 disaggregated serving with two TP4/EP4 prefill workers plus one TP4 decode worker, KV events, and Mooncake NVLink transfer. The vLLM targets use an FP8 checkpoint with BF16 KV cache on GB200 or H200. Pick your framework, GPU architecture, and serving topology.
Choose your deployment target
Prerequisites
- A Kubernetes cluster with the Dynamo platform installed and GB200 GPUs available: 4x on one ARM64 node for aggregated, or 8x across two ARM64 nodes for disaggregated. See the Kubernetes Deployment Guide.
- The NVIDIA DRA driver with ComputeDomain support installed. Both GB200 targets require a ComputeDomain spanning the full NVL72 rack.
- Access to
zai-org/GLM-5.3-Flashand thevllm/vllm-openai:glm53-flashimage. - A ReadWriteMany PVC named
model-cache, populated with the checkpoint in the standard Hugging Face cache layout.
- A Kubernetes cluster with the Dynamo platform installed and H200 GPUs available: 8x on one node for aggregated, or 16x across two nodes for disaggregated. See the Kubernetes Deployment Guide.
- Eight RDMA resource claims on each GPU node for disaggregated serving. Update
rdma/ibif your device plugin advertises a different resource name. - Access to
zai-org/GLM-5.3-Flashand thevllm/vllm-openai:glm53-flashimage. - A ReadWriteMany PVC named
model-cache, populated with the checkpoint in the standard Hugging Face cache layout.
- A Kubernetes cluster with the Dynamo operator supporting
nvidia.com/v1beta1. See the Kubernetes Deployment Guide. - GB200 arm64 nodes with four available GPUs per worker Pod: 4 GPUs for aggregated serving or 12 GPUs for 2P1D disaggregated serving.
- The NVIDIA DRA driver and
resource.nvidia.com/v1beta1ComputeDomain CRD. Disaggregated workers must fit in one NVLink clique; the overlay uses Pod affinity on thenvidia.com/gpu.cliquenode label. - Standalone Kustomize v5.8.1 and a checkout of this repository.
- Access to
RadixArk/GLM-5.3-Flash-NVFP4at revisionf46cf340d35a22d0d83d0c1dac8957cf2b1bcd35. - A ReadWriteMany PVC named
shared-model-cache, accessible from all worker nodes.
The scheduling component selects arm64 nodes and nvidia.com/gpu.product=NVIDIA-GB200 for workers. It tolerates kubernetes.io/arch=arm64:NoSchedule and, on workers, nvidia.com/gpu=present:NoSchedule. Keep site-specific namespace, storage class, pull Secrets, priority class, and scheduling overrides in a private cluster overlay.
- A Kubernetes cluster with the Dynamo operator supporting
nvidia.com/v1beta1and four available B200 GPUs on one amd64 node. See the Kubernetes Deployment Guide. - Standalone Kustomize v5.8.1 and a checkout of this repository.
- A populated ReadWriteMany PVC named
shared-model-cache, accessible from the worker Pod, containingRadixArk/GLM-5.3-Flash-NVFP4at revisionf46cf340d35a22d0d83d0c1dac8957cf2b1bcd35. - The
inferencepriority class, or a private overlay selecting your cluster’s priority class.
The nscale overlay selects amd64 nodes and nvidia.com/gpu.product=NVIDIA-B200 for the worker. Both Pods tolerate nvidia.com/gpu=true:NoSchedule. Adapt placement and registry access to your cluster. This single-node recipe uses NVLink/NVLS with MNNVL disabled and creates no ComputeDomain or DRA channel claims.
Create the namespace and token secret:
Match storage, scheduling, registry access, and resource claims to your cluster. For SGLang, edit the Kustomize sources or use a private cluster overlay; regenerate manifests instead of editing the generated copies.
Deploy
All four vLLM targets read the checkpoint from the model-cache PVC with HF_HUB_OFFLINE=1. Create and populate the PVC with the recipe’s storage manifest and model-download job:
Apply the manifest or Kustomize overlay for your target. Run these commands from the repository root.
Reuse shared-model-cache if it exists. For a new cache, set the storage class in the SGLang storage manifest before applying it. The download Job downloads the pinned NVFP4 revision, which differs from the vLLM checkpoint:
All SGLang workers resolve --model-path RadixArk/GLM-5.3-Flash-NVFP4 and the pinned --revision from the shared cache with offline mode enabled. All SGLang frontends obtain model metadata from workers without mounting the cache.
The base deployment runs two prefill workers and one decode worker (2P1D), using 12 GB200 GPUs in one NVLink clique.
Render and apply the selected GB200 overlay:
The overlay creates a ComputeDomain and connects its channel to the worker claims. Alternatively, apply the generated "$RECIPE/deploy-gb200.yaml" manifest. The SGLang README documents the base/component layout and regeneration commands.
Render and apply the B200 nscale overlay:
Alternatively, apply the generated "$RECIPE/deploy-nscale.yaml" manifest. See the SGLang README for overlay settings and regeneration commands.
First worker launch loads the model and captures CUDA graphs and can take tens of minutes.
Smoke Test
Send a test request to verify the deployment serves traffic. First forward the frontend port for your target:
All vLLM targets serve under the same model name, zai-org/GLM-5.3-Flash:
GLM-5.3-Flash reasons before answering. The deployments support streaming chat, completions, tool calls, one image per prompt, and schema-constrained output through the glm45 reasoning and glm47 tool-call parsers.
Wait for the frontend and all workers to become ready, then forward the frontend Service for the selected topology:
Wait for both Pods to become ready, then forward the B200 frontend:
In another terminal, verify registration and send a request using the SGLang served model name:
The SGLang workers use the glm45 reasoning parser and glm47 tool-call parser. All three recipes enable --enable-multimodal and --mm-enable-dp-encoder. Aggregated workers enable --frontend-decoding, so the Dynamo frontend decodes images and videos before passing them to the backend. Disaggregated workers omit --frontend-decoding on both prefill and decode workers and support text and image input only.
Video input is unavailable in the SGLang disaggregated recipe because frontend decoding is unsupported on this path and the runtime image omits SGLang’s video decoder dependencies.
Benchmark
Use the AIPerf benchmark guide and benchmark manifest for agentic text trace replay.
Synthetic Acceptance Results
These measurements describe the source configurations with simulated acceptance length 2.5657, method match-expected, and token mode real-draft-token. The default deployment overlays use real speculative verification. To configure synthetic acceptance, follow the compose, dry-run, and apply procedure with the optional component for B200 aggregated, GB200 aggregated, or GB200 disaggregated. Wait for replacement workers to become ready before measurement.
Set the CONCURRENCY environment variable in the benchmark Job to 56 for either aggregated target or 128 for GB200 disaggregated, as listed below. The Job’s default is 64 and does not match these rows. Select the matching endpoint and frontend pod affinity using the benchmark guide.
Compare All Targets
vLLM
All four vLLM targets serve the same FP8-quantized GLM-5.3-Flash checkpoint on vLLM with BF16 KV cache. The GB200 aggregated target and both H200 targets enable prefix caching. The H200 targets add MTP7 speculative decoding, DeepGEMM, and FLASHMLA_SPARSE attention. The GB200 targets use MNNVL for TP4 collectives.
SGLang
All three SGLang targets use the pinned NVFP4 checkpoint and FP8 E4M3 KV cache. Worker Pods request 16 CPUs and four GPUs, with a 64 GiB shared-memory volume. Aggregated workers and disaggregated prefill workers have a host-memory request and limit of 448 GiB.
Related Feature Benchmarks
No controlled feature benchmark is linked to this recipe. Browse the Feature Benchmarks for comparable KV-routing, disaggregation, and speculative-decoding studies.
Notes
vLLM
- The H200 targets enable prefix caching with a match unit of 128 and use MTP with seven speculative tokens.
- The H200 disaggregated target sets the same MTP configuration,
VLLM_SSM_CONV_STATE_LAYOUT=DS, andVLLM_KV_CACHE_LAYOUT=HNDon prefill and decode. These values must match for the NIXL compatibility handshake and KV layout. - The GB200 targets use MNNVL for TP4 collectives. The disaggregated target excludes
cuda_ipcfrom UCX and transfers KV data overcuda_copyand TCP because the GLM image’s UCX build lacks MNNVL IPC support. - To enable MNNVL IPC for GB200 KV transfer, rebuild on the vLLM runtime base and set
UCX_TLS=cuda_copy,cuda_ipc,tcpwithUCX_CUDA_IPC_ENABLE_MNNVL=y. - A
sitecustomize.pyoverlay disables cuDNN to avoid a convolution crash during multimodal initialization with the GLM-specific vLLM image. n>1requests are not supported by the disaggregated targets.
SGLang
- The pinned SGLang runtime image includes the cuDNN workaround for the vision encoder downsampling operation.
- All worker bases set
DYN_HEALTH_CHECK_REQUEST_TIMEOUT=300and an explicit/liveliveness probe on portsystem, with period 5 seconds, timeout 4 seconds, and failure threshold 60. GB200 components provide placement and ComputeDomain wiring; startup and readiness probes use operator defaults. - GB200 disaggregated routing uses worker KV events. Both prefill and decode workers set
--kv-events-configto a ZMQ publisher ontcp://*:5557with topickv-events. The router block size and SGLang page size are both 64. - All three SGLang default overlays omit the source configurations’
SGLANG_SIMULATE_ACC_*variables. Add the optional component only when reproducing synthetic acceptance measurements.
Source
- Source README: recipes/glm-5.3-flash/README.md
- vLLM aggregated GB200: deploy.yaml
- vLLM disaggregated GB200: deploy.yaml
- vLLM aggregated H200: deploy.yaml
- vLLM disaggregated H200: deploy.yaml
- SGLang guide: README
- SGLang aggregated GB200: Kustomize overlay, generated manifest
- SGLang disaggregated GB200: Kustomize overlay, generated manifest
- SGLang aggregated B200: Kustomize overlay, generated manifest