| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- # GLM-5.3-Flash NVFP4 (vLLM) — 2× DGX Spark / GB10 (sm_121), TP=2.
- #
- # 320B/18B-active, hybrid 34 KDA linear-attention + 11 sparse-MLA layers,
- # glm5_next arch (NoPE-MLA, qk_rope_head_dim=0), in-checkpoint MTP head.
- # Text-only here (--language-model-only — the multimodal processor balloons
- # the API front-end to ~15.7 GB and the GB10 kernel OOM-kills it).
- #
- # WHY NVFP4 on 2 nodes (not the official FP8 on 4): LibertAIDAI's weight-only
- # NVFP4-A16 quant halves the footprint (~155 GB) so it fits 2 Sparks; the
- # sparse+linear attention keeps KV nearly free (KV pool ~738K tok at GMU 0.85).
- # Model: https://huggingface.co/LibertAIDAI/GLM-5.3-Flash-NVFP4
- #
- # Engine: vLLM day-0 per-model image (glm5_next support baked in). The arch
- # fails every sm_121 attention backend out of the box; a 4-part build-time
- # mod (docker-images/glm53-flash-nvfp4/patches/patch_mla.py) dresses GLM's
- # NoPE-MLA in DeepSeek's fp8_ds_mla 512+64 layout and compacts the sm120
- # sparse-MLA topk table 2176->2048. Applied at image build; this recipe
- # activates it at runtime via VLLM_MLA_NOPE_PAD_ROPE=1.
- #
- # TWO SILENT GB10 GOTCHAS (from the reference — both already handled here):
- # 1. SILENT FP4 MoE CORRUPTION: the auto-selected FLASHINFER_CUTLASS NVFP4
- # MoE backend emits degenerate token loops with ZERO errors (model loads,
- # /health green, every completion garbage). --moe-backend marlin fixes it.
- # If a GB10 NVFP4 serve "works" but loops, check which MoE backend engaged
- # before blaming the quant.
- # 2. A 60+ MIN "No available shared memory broadcast block found" loop at
- # boot is NOT a hang — the worker is FlashInfer-autotuning a kernel flavor
- # (tune persists to ~/.cache/vllm, pays once). VLLM_ENGINE_READY_TIMEOUT_S
- # is raised to 3600 so the launcher doesn't give up first.
- #
- # Measured (median of 3, temp 0, single stream, 2x Spark, MTP-5 acceptance ~2.55):
- # 24.74 code / 30.30 structured / 19.58 prose tok/s; no-spec baseline 14.6 flat.
- # 256K needle-exact (30K/100K/200K deep); ~1150 tok/s prefill.
- #
- # Image: glm53-flash-nvfp4:local (built from vllm/vllm-openai:glm53-flash-arm64-cu130
- # + the patch). `sm121 serve` builds it on the build node if the checksum label
- # is stale (docker_image_dir below).
- #
- # PREREQUISITES:
- # Weights cached on both nodes (NAS ~/.cache/huggingface):
- # huggingface-cli download LibertAIDAI/GLM-5.3-Flash-NVFP4
- #
- # REFERENCE (provenance):
- # https://github.com/kingjones30/GLM-5.3-Flash-2x-DGX-Spark
- # https://forums.developer.nvidia.com/t/381433
- engine = "vllm"
- name = "GLM-5.3-Flash NVFP4 (vLLM, 2x Spark)"
- docker_image = "glm53-flash-nvfp4:local"
- docker_image_dir = "glm53-flash-nvfp4"
- model = "LibertAIDAI/GLM-5.3-Flash-NVFP4"
- parent_model = "zai-org/GLM-5.3-Flash"
- 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",
- # GLM tokenizer
- "--trust-remote-code",
- # Executor (mp, no ray)
- "--distributed-executor-backend", "mp",
- # Memory — weights ~77.5 GiB of 119.6 GiB/node; sparse+linear KV nearly free
- "--gpu-memory-utilization", "0.85",
- "--max-model-len", "262144",
- "--max-num-seqs", "1",
- # DeepSeek-MLA KV layout the NoPE-pad mod dresses the attention in
- "--kv-cache-dtype", "fp8_ds_mla",
- # Text-only (multimodal processor OOM-kills the GB10 front-end)
- "--language-model-only",
- # GOTCHA 1: marlin avoids the silent FP4 MoE corruption
- "--moe-backend", "marlin",
- # MTP=5 (in-checkpoint drafter; acceptance length ~2.55)
- "--speculative-config", """
- '{"method":"mtp","num_speculative_tokens":5}'""",
- # Tokenizer / reasoning / tool calling (GLM family)
- "--tool-call-parser", "glm47",
- "--enable-auto-tool-choice",
- "--reasoning-parser", "glm45",
- ]
- [env]
- # Offline — weights must be cached on each node
- HF_HUB_OFFLINE = "1"
- # Activates the build-time NoPE-MLA rope-pad mod (mathematically a no-op:
- # zeros are rotation-free and add exactly 0 to every logit)
- VLLM_MLA_NOPE_PAD_ROPE = "1"
- # GOTCHA 2: survive the 60+ min FlashInfer-autotune boot window
- VLLM_ENGINE_READY_TIMEOUT_S = "3600"
- # Architecture (aarch64 / sm_121a DGX Spark)
- TORCH_CUDA_ARCH_LIST = "12.1a"
- CUTE_DSL_ARCH = "sm_121a"
- OMP_NUM_THREADS = "4"
|