| 123456789101112131415161718192021222324252627282930 |
- # syntax=docker/dockerfile:1.7
- # GLM-5.3-Flash NVFP4 (LibertAIDAI weight-only NVFP4-A16) on DGX Spark
- # (SM121 / GB10), TP=2.
- #
- # Base: vllm/vllm-openai:glm53-flash-arm64-cu130 — vLLM's day-0 per-model
- # image (arm64/cu130, glm5_next arch support baked in). It CANNOT serve this
- # model on GB10 stock: glm5_next's NoPE-MLA (qk_rope_head_dim=0) + KDA linear
- # attention + the sparse kpool indexer fail every attention backend the sm_121
- # selector offers, and the auto-selected NVFP4 MoE backend silently corrupts
- # output (degenerate token loops, zero errors).
- # * --moe-backend marlin (runtime, in the recipe) fixes the MoE corruption.
- # * The 4-part patch below fixes the MLA.
- #
- # The patch (patches/patch_mla.py) dresses GLM's NoPE-MLA (kv_lora 512, rope 0)
- # in DeepSeek's fp8_ds_mla 512+64 layout and compacts the sm120 sparse-MLA
- # topk table from 2176 to the compiled 2048. It is applied at build time;
- # runtime activates the NoPE-pad path via VLLM_MLA_NOPE_PAD_ROPE=1 (recipe env).
- #
- # Provenance + measured numbers (24.74 code / 30.30 structured / 19.58 prose
- # tok/s at MTP-5, 2x Spark, 256K needle-exact):
- # https://github.com/kingjones30/GLM-5.3-Flash-2x-DGX-Spark
- # https://forums.developer.nvidia.com/t/381433
- ARG BASE_IMAGE
- FROM ${BASE_IMAGE}
- COPY patches/patch_mla.py /tmp/patch_mla.py
- RUN set -eux; \
- python3 /tmp/patch_mla.py; \
- rm -f /tmp/patch_mla.py
|