# GLM-5.3-Flash NVFP4 — RedHatAI quant (vLLM) — 2× DGX Spark, TP=2. # # RedHatAI/LLM-Compressor quant: MoE experts W4A4 NVFP4 (group-16, local # per-group FP8 scales, compressed-tensors nvfp4-pack-quantized). Vision / # embeddings / lm_head kept original precision. Quantizes via regex targets, # so no name-prefix matching bugs. # Model: https://huggingface.co/RedHatAI/GLM-5.3-Flash-NVFP4 # (~177 GB → ~88 GB/node on 2 Sparks) # KV: pinned --kv-cache-memory-bytes 10 GiB (same as -lab, identical MLA # geometry) → ~1.16 M-token pool @ fp8_ds_mla = 2.22× concurrency at the # 524288 ctx. GMU 0.90 matches the proven lab config; the pin overrides # GMU-based KV sizing. # # ⚠ NO MTP DRAFTER IN THIS CHECKPOINT — the index has 146,745 tensors and # zero layer-45/MTP weights. `--speculative-config mtp` WILL fail to load. # This recipe is baseline decode only (~15 tok/s class on this arch — # spec decode buys 1.3–2×; use glm53-flash-nvfp4[-lab] when MTP matters). # # Image: the -lab overlay (day-0 vLLM image + NoPE-MLA mod + FujitsuPolycom # arch patches). The sparse_attn_indexer CC-12.0 guards are REQUIRED at the # 512K ctx: at 262K the indexer topk fit 48 SMs, at 512K it wants 62 CTAs and # the fallback needs 128 KB smem (GB10 has 99 KB) → hard boot abort # (launch_persistent_topk oversubscribe, 2026-08-28). The patches are # arch-level, not quant-level: the modelopt quantprobe is a no-op for this # compressed-tensors checkpoint, the model.py naming shim anchors on # arch-internal names. # # GB10 gotchas handled (see glm53-flash-nvfp4 header for detail): # --moe-backend marlin → if vLLM rejects marlin for W4A4 at startup (marlin # is mainly W4A16), remove the flag — but then verify output is not # token-loop garbage (the silent FLASHINFER_CUTLASS corruption) before # trusting it; `--moe-backend triton` is the other candidate. # # GB10 gotcha (MEASURED): at 524288 ctx WITH flashinfer autotune on, rank 0 # dies mid-boot on a driver OOM (NVRM NV_ERR_NO_MEMORY _memdescAllocInternal, # 2026-08-28 05:01) — autotune/graph scratch at the 512K verify shapes doesn't # fit the unified-memory headroom. The 262144 ctx + autotune combo booted # fine. Fix = the lab-proven boot: autotune + cutedsl warmup off (a perf # micro-opt only; the sparse-MLA kernels have a non-autotuned fallback) and # expandable_segments to cut fragmentation. # # PREREQUISITES: weights cached on both nodes: # huggingface-cli download RedHatAI/GLM-5.3-Flash-NVFP4 # # REFERENCE: # https://huggingface.co/RedHatAI/GLM-5.3-Flash-NVFP4 (vendor vLLM cmd) # https://github.com/kingjones30/GLM-5.3-Flash-2x-DGX-Spark (mod) engine = "vllm" name = "GLM-5.3-Flash NVFP4-redhat (vLLM, 2x Spark, no MTP)" docker_image = "glm53-flash-nvfp4-lab:local" docker_image_dir = "glm53-flash-nvfp4-lab" model = "RedHatAI/GLM-5.3-Flash-NVFP4" required_nodes = 2 tensor_parallel_size = 2 pipeline_parallel_size = 1 distributed_backend = "mp" shm_size = "32gb" args = [ # Stable served name — quant-agnostic (shared across glm53 quants) "--served-model-name", "glm53", "--trust-remote-code", "--distributed-executor-backend", "mp", "--gpu-memory-utilization", "0.90", "--kv-cache-memory-bytes", "10737418240", "--max-model-len", "524288", # Scan/graph scratch scales with the prefill chunk: 8192 OOMs the driver # at 512K ctx (05:38 NVRM OOM), 4096 is the lab-proven ceiling here. "--max-num-batched-tokens", "4096", "--block-size", "256", "--max-num-seqs", "1", "--kv-cache-dtype", "fp8_ds_mla", "--language-model-only", "--moe-backend", "marlin", # NO --speculative-config: checkpoint ships no MTP weights (verified index) "--tool-call-parser", "glm47", "--enable-auto-tool-choice", "--reasoning-parser", "glm45", "--kernel-config", """ '{"enable_cutedsl_warmup":false,"enable_flashinfer_autotune":false}'""", ] [env] HF_HUB_OFFLINE = "1" VLLM_MLA_NOPE_PAD_ROPE = "1" VLLM_ENGINE_READY_TIMEOUT_S = "3600" TORCH_CUDA_ARCH_LIST = "12.1a" CUTE_DSL_ARCH = "sm_121a" OMP_NUM_THREADS = "4" PYTORCH_CUDA_ALLOC_CONF = "expandable_segments:True"