GLM-5.3-Flash SGLang SM120 qualification¶
- Date: 2026-09-02
- Decision: locally
verifiedchallenger at 245,760 tokens and C1;no-promotion - Measured hardware: 2× NVIDIA RTX PRO 6000 Blackwell Max-Q, exclusive TP=2 over PCIe without NVLink, Windows 11/Docker Desktop/WSL2
- Evidence: sanitized artifact bundle
Post-qualification update: After this point-in-time no-promotion decision, the operator waived the standing VRAM reserve for the model-only GPU pair and authorized the already-tested 393,216-token/C1 profile. The managed fix-forward promotion, routed gates, real-client acceptance, and exact rollback contract are recorded in the separate 393K promotion finding.
Result¶
The community SGLang SM120 recipe is reproducible and useful on this system,
but not with its maximum-context/high-concurrency envelope copied verbatim.
The locally qualified profile uses one running request, adaptive EAGLE MTP
[3,5], and 245,760 configured tokens. It passed the full text/tool/API,
thinking-control, coding-agent, image/OCR, capacity, and endurance gates while
retaining 3,487 MiB free on each card after the complete workload.
The 499,712-token/C4 profile and its C1 reduction are policy-infeasible on this WSL2 host. A 393,216-token/C1 fix-forward passed every functional and workload test, but fell from 3,351 MiB idle reserve to 2,101 MiB per card after lazy media/kernel allocations. Reducing the token pool to 245,760 was the first profile to preserve the required 3,072 MiB post-workload reserve.
No route was changed and no promotion was authorized. At campaign close, the
exact starting incumbent container, image, model identity, 524,288-token
context, 127.0.0.1:8001 binding, exclusive owner, router readiness, and empty
shared-memory state were restored.
Immutable candidate¶
- Model:
ormandj/GLM-5.3-Flash-W4A16-NVFP4-K32-Experts-FP8-WO@c3cbb9891b67c741bcbf6b176dd7af9265b069db - Model cache verification: 178,061,085,084 bytes, no incomplete or broken snapshot entries
- Runtime:
ghcr.io/ormandj/sglang-glm53-flash-sm120@sha256:0c0637959c3931829f05154087bbefd2c50003fb9b2010200ce0ec82f4d71a53 - Runtime tag/source:
v0.1.1-rc.14/a547c90c74f1363920287eb80adc88a16d1e7005 - Runtime-reported SGLang source:
4c2c169b53dbf362f0cd95111f4ae275cd0167c1 - Quantization: ModelOpt mixed W4A16 NVFP4 K32 routed experts, FP8 weight-only attention/shared experts, FP8 E4M3 KV, BF16 recurrent state
- Selected served identity:
glm53-flash-ormandj-sglang-sm120-tp2-240k-c1-adaptive-mtp - Selected recipe:
glm53-flash-ormandj-sglang-sm120-tp2-240k-c1-adaptive-mtp-recipe.toml
The model and runtime are community artifacts. The model repository declares MIT; downstream users must independently review the checkpoint, runtime, and their dependencies for their use case.
Source and claim boundary¶
The upstream stable release
reports native-Linux performance on the same GPU product class and two-card
PCIe topology. Those results, including its C1/C2/C4 throughput and roughly
8,100 tok/s prefill report, are external-prior evidence only. The tested
v0.1.1-rc.14 image contains later correctness, warmup, image-memory, and KDA
changes and was explicitly not upstream-qualified when observed.
The official SGLang GLM guide, current GLM-5.3 tracker, and NVIDIA CUDA on WSL guide were used to expand the local correctness and WSL2 compatibility gates. Exact URLs, dates, evidence types, and decision impact are retained in the source registry.
Local translation and fixes¶
The final recipe keeps TP=2, DSA attention, FlashInfer sparse MLA, Triton linear attention, 4,096-token chunked prefill, FP8 KV, multimodal support, and adaptive EAGLE MTP. It deliberately omits DCP, expert parallel, HiCache, and CPU KV offload.
Four runtime compatibility defects were fixed forward:
- NCCL 2.30.7 failed
ncclCuMemMapAndSetAccesswith CUDA 999. An exact two-rank probe passed with onlyNCCL_CUMEM_ENABLE=0. PYTORCH_CUDA_ALLOC_CONF=expandable_segments:Truereproduced the first distributedtorch.onesfailure. The same probe passed withexpandable_segments:False.- SGLang's Torch symmetric-memory logits gatherer raised SIGFPE during graph capture. A source-hash- and anchor-gated patch disables only that gatherer and selects its ordinary NCCL fallback.
- The checkpoint template ignored
enable_thinking=false, leaking reasoning into visible content. A source-hash-gated derived template defaults thinking on but emits an empty thinking block when disabled, allowing the runtime parser to keep visible output clean.
The upstream launcher's image-token cap was also added explicitly as
--mm-process-config {"image":{"max_image_tokens":3072}}. The complete
failure chain and exact workaround scope are in the
friction log.
Functional and quality gates¶
| Gate | Result | Evidence |
|---|---|---|
| Full thinking-disabled preflight | all 10 checks pass; tools 20/20; 200K nominal needle; 194,227-token long tool call; JSON, streaming, tool-result continuation, Responses, image, and OCR pass | artifact |
| Thinking enabled | smoke, JSON, tools 5/5, tool-result continuation, and Responses pass with a dedicated reasoning channel | artifact |
| Thinking disabled | the same protocol class returns zero reasoning content and clean visible output | control |
| Coding-agent suite | five deterministic checks × three repetitions = 15/15 at a 2,048-token visible-answer budget | artifact |
| Image/OCR corpus | six cases × two repetitions = 12/12, including two-image comparison | artifact |
| Endurance | 60/60 C1 requests, no crash or unexplained loss | artifact |
The initial 393K coding run's Windows move-plan response ended at a 768-token
visible cap. Its validators did not identify an incorrect answer. The unchanged
suite passed 15/15 at 2,048 visible tokens, so the first result is retained as
visible_answer_budget_exhausted, not a model-quality failure.
Performance¶
Matched adaptive-MTP control at 131K¶
| Nominal context | No speculation decode p50 | Adaptive decode p50 | Delta | No-spec prefill p50 | Adaptive prefill p50 |
|---|---|---|---|---|---|
| 4K | 74.10 tok/s | 103.52 tok/s | +39.7% | 12,923 tok/s | 16,728 tok/s |
| 120K | 73.56 tok/s | 95.06 tok/s | +29.2% | 5,926 tok/s | 5,759 tok/s |
The long-context prefill change is -2.8%, inside the predeclared 3% protected boundary. Functional behavior remained clean on both arms, so adaptive MTP is the selected decode path. These results do not generalize to a different checkpoint, SGLang build, GPU, or context envelope.
Selected 245,760-token/C1 profile¶
| Nominal context | Measured prompt p50 | TTFT p50 | Effective prefill p50 | Decode p50 | Completed |
|---|---|---|---|---|---|
| 4K | 2,969 | 0.179 s | 16,545 tok/s | 108.57 tok/s | 3/3 |
| 120K | 96,278 | 16.707 s | 5,763 tok/s | 93.35 tok/s | 3/3 |
| 230K | 189,627 | 33.815 s | 5,608 tok/s | 95.00 tok/s | 3/3 |
| 4K endurance | 2,969 | 0.175 s | 16,969 tok/s | 105.82 tok/s | 60/60 |
The context harness's repeated text does not tokenize one-for-one with its nominal target; measured prompt counts are reported rather than treating 230K as an actual-token claim.
Maximum-envelope evidence¶
| Profile | Short result | Long result | Reserve result | Decision |
|---|---|---|---|---|
| 499,712 tokens, C4 | 12/12; 147.54 aggregate output tok/s at 4K | four nominal-120K requests passed, but median TTFT was 148.86 s and aggregate output was 0.61 tok/s | 49 MiB/card after startup | policy-infeasible |
| 499,712 tokens, C1 | functional pass | not advanced to full workload | 2,347 MiB/card after startup | policy-infeasible |
| 393,216 tokens, C1 | 112.07 tok/s at 4K; 60/60 endurance at 102.19 tok/s | 304,491-token measured prompt p50 at 99.79 decode tok/s; all functional/quality/image gates pass | 3,351 MiB idle, 2,101 MiB after workload | policy-infeasible |
| 245,760 tokens, C1 | 108.57 tok/s at 4K; 60/60 endurance at 105.82 tok/s | 189,627-token measured prompt p50 at 95.00 decode tok/s | 4,733 MiB idle, 3,487 MiB after workload | verified challenger |
The external stable release's much higher aggregate decode results are not reproduced here. Differences include the runtime revision, WSL2 versus native Linux, context envelope, and locally required NCCL/allocator/symmetric-memory fallbacks.
Kernel and log review¶
The SM120 sparse-MLA glm53_nope CPB calibration rejected implausible fitted
constants on both ranks and used its C++ heuristic. The final endpoint remained
healthy and passed all end-to-end gates. Optional NCCL plugin-load notices and
Triton/Torch compiler deprecations were non-fatal; the bounded final log audit
found no traceback, restart, CUDA error, or OOM.
No kernel-tune artifact was adopted. A missing or rejected calibration is an optimization lead, not evidence of improvement. Any tune must stay pinned to this exact model geometry, image, SGLang/Triton/CUDA build, TP size, dtype, and GPU product and must beat the default in a matched end-to-end A/B.
Restoration¶
The candidate was unloaded through models recipes unload. The first restore
attempt was refused before mutation because the chosen split restore group did
not contain the manifest's declared rollback identity. A subsequent attempt
reached incumbent health but failed router readmission with HTTP 401; the
transaction preserved and stopped the retained incumbent as designed. Loading
only the configured router token from the user-local credential file into the
process allowed the managed transaction to complete.
The final snapshot matched the starting state:
- retained container ID
45a009b848afcbb8c6b979178f2b493c6f15327a964e93190affcd60811b2ac0; - incumbent image
sha256:4909e318ba1348a179824e210f90c268d6fc68e8b4e514af4782e26e6a1e5939; - exact model
glm53-flash-exl3-k3-dflash2-k5-fp8-tp2-524k-vision-xgfixat 524,288 tokens and127.0.0.1:8001; dual-gpu-exclusiveownertp2-glm53-k3-dflash2-k5-524k-xgrammaron both GPU roles;- router container running and
primary-localready with the exact incumbent identity; - zero shared-memory/offload files.
A fresh goal-closure recheck at 2026-09-02T12:15:45Z repeated those managed
state assertions, confirmed the retained container ID, passed one authenticated
llm.primary routed smoke, found both GPUs, and again found no candidate
container or shared-memory residue.
See the machine-readable restoration record.
Decision¶
Retain the 245,760-token/C1 adaptive-MTP recipe as a locally verified challenger and reproducible fallback/experiment. Do not promote it from this campaign. The current EXL3 K3 plus DFlash2 K5 524K text/image/OCR profile remains the published reference.
Future work is bounded to two independent questions: whether a pinned CPB tune beats the qualified heuristic path end-to-end, and whether a revised runtime can qualify C2+ at long context while preserving the 3 GiB post-workload reserve. Neither is implied by this result.