The fleet's default primary from 0.10.0 until 2026-05-31, when it was
superseded by the MTP build
sakamakismile/Qwen3.6-27B-Text-NVFP4-MTP
(~2.4× single-stream decode via speculative decoding). It is retained as a
candidate, not removed, for two reasons: (1) it is the tokenizer source the
MTP primary serves with (--tokenizer=mmangkad/Qwen3.6-27B-NVFP4 — the MTP
checkpoint's tokenizer_config declares a class absent from the nv26.04 image),
and (2) it is the only vision-capable 27B in the catalog (the MTP primary is
text-only), so it is the fallback when an image path is needed.
Load-tested live on DGX Spark (GB10), first 2026-05-27 and re-confirmed 2026-05-30 — it loads and serves cleanly under the vLLM image lobes already runs. Tracked by issue #6.
Warm-up (solo, 2026-05-30): ~423 s (~7 min) from container start to /health
— weight load 160 s (28.25 GiB), profiling/warmup 55 s, then CUDA-graph capture +
KV allocation. Plan for a multi-minute cold start. Decode re-confirmed at
8.0 tok/s (batch=1, 512 tokens); prefill 2,015 tokens in 3.29 s.
Source: https://huggingface.co/mmangkad/Qwen3.6-27B-NVFP4 — public, Apache-2.0.
One entry in lobes's supported catalog (
lobes overview --list). For the catalog-vs-warm distinction — what you can load vs. what's loaded now — seegateway-fleet.md.
- NVFP4 (NVIDIA ModelOpt) quantization of
Qwen/Qwen3.6-27B. config.json:architectures: ["Qwen3_5ForConditionalGeneration"],model_type: qwen3_5, 64 layers,hidden_size 5120,max_position_embeddings 262144(256K context), multimodal RoPE (mrope_interleaved,mrope_section).- Hybrid attention: vLLM loads it with linear-attention / Gated-DeltaNet
(
gdn_linear_attn) Mamba layers plus periodic full attention — not a plain dense transformer like the 32B. It also carries a ViT multimodal encoder (it is a vision-language model), though text-only chat serves without an image path. - ~20B effective params; ~29 GB on disk (BF16 / F8_E4M3 / U8 tensors).
ModelOpt producer
0.42.0rc1.dev107(a dev/rc build).
The pre-flight check (query the running engine's registry):
$ docker exec model-gear-vllm python3 -c \
"from vllm.model_executor.models.registry import ModelRegistry; \
print('Qwen3_5ForConditionalGeneration' in ModelRegistry.get_supported_archs())"
True
The nvcr.io/nvidia/vllm:26.04-py3 image (engine 0.19.0+...nv26.04) registers
Qwen3_5ForConditionalGeneration (plus the MoE and MTP variants) — the exact
architecture this checkpoint declares. The live load (below) confirms it
instantiates, loads weights, and serves with the same compose flags as the 32B
(--quantization=modelopt_fp4, --reasoning-parser=qwen3).
lobes switch mmangkad/Qwen3.6-27B-NVFP4 --port 8001 --max-model-len 32768 --apply
# (switch is dry-run without --apply; it rewrites VLLM_MODEL / VLLM_SERVED_NAME /
# VLLM_PORT in .env, auto-selects VLLM_TOOL_CALL_PARSER=qwen3_coder for this
# model (override with --tool-call-parser), recreates the container, waits for
# /health, then probes tool_choice:auto to confirm tool calling. qwen3_coder is
# required for tool calling on this model; see caveat 1.)VLLM_SERVED_NAME must match the part after vllm-local/ in culture.yaml
(lobes doctor checks this). Memory note: native context is 256K; the KV cache
at that length is large, so
keep VLLM_MAX_MODEL_LEN=32768 for a first load and raise only with headroom.
- SGLang is the card's blessed runtime (recommends
sglang serve --tool-call-parser qwen3_coder). → Resolved: it nonetheless loads and serves under our vLLM image with no special flags (trust_remote_code=False). For OpenAI tool/function calling this model emits the Qwen3-Coder XML format (<function=finish><parameter=summary>…</parameter></function>), which the defaulthermesparser cannot parse (HTTP 200 but emptytool_calls). It must be served with--tool-call-parser=qwen3_coder— whichlobes switchnow auto-selects for this model (lobes switch mmangkad/Qwen3.6-27B-NVFP4 --applysetsVLLM_TOOL_CALL_PARSER=qwen3_coder; override with--tool-call-parser). Verified live on:8001, 2026-05-27 — the probe returns afinishtool call (see issue #9). ForConditionalGeneration+ multimodal RoPE / ViT encoder. → Resolved for text: vLLM initializes the ViT encoder but does not demand an image/processor path for text chat; both correctness probes passed.- ModelOpt dev/rc producer (
0.42.0rc1.dev107). → Resolved: vLLM logsDetected ModelOpt NVFP4 checkpointand the quant config parses (flagged "experimental format" by vLLM, but functional). - New — experimental Mamba prefix caching. With
--enable-prefix-caching, vLLM setsMamba cache mode 'align'and warns that prefix caching for Mamba layers is experimental. Functional here; worth watching for correctness drift.
Image nvcr.io/nvidia/vllm:26.04-py3, engine 0.19.0+...nv26.04. Served on
:8001 via lobes assess / lobes benchmark. Engine init (download cached)
~159 s; KV cache 38.55 GiB allocated.
| Property | Value |
|---|---|
Health / max_model_len |
/health 200; 32768 (capped; 256K native) |
| Correctness | 17 × 23 = 391 ✅ (finish=stop, 389 tok); train 14:45→17:10 = 145 min ✅ (finish=stop, 1517 tok) |
| Reasoning trace field | reasoning (4,356-char trace) |
| Decode throughput | 7.9–8.0 tok/s (batch=1, greedy, 512 tokens forced) |
| Prefill | 2,015 prompt tokens + 16 gen in 3.19 s |
| GPU memory reserved | ~70 GB (71,723 MiB) at gpu-memory-utilization=0.6 |
| Weights on disk | ~29 GB |
| 27B (this model) | 32B (nvidia/Qwen3-32B-NVFP4) |
|
|---|---|---|
| Decode (batch=1) | 7.9–8.0 tok/s | 9.7 tok/s |
| Prefill (~2K tokens) | ~3.2 s incl. 16 gen | ~2.4 s incl. 16 gen |
| GPU reserved (util 0.6) | ~70 GB | ~72 GB |
| Weights | ~29 GB | ~20 GB |
| Native context | 256K | 32K (→131K YaRN) |
| Shape | hybrid Mamba/linear-attn + ViT (multimodal) | dense |
The 27B is the default primary (since 0.10.0) — it is the model the consumer agent (convertible) runs as its parent, and it brings a much larger native context (256K vs the 32B's 32K/131K-YaRN) plus a multimodal/vision path. The trade-off is decode speed: on this GB10 the 27B is slower (~8 vs ~9.7 tok/s) despite being smaller, and it is a heavier, more-experimental path (hybrid Mamba layers with experimental prefix caching, plus a ViT encoder unused for text).
nvidia/Qwen3-32B-NVFP4 remains the speed-optimised candidate — swap it in via
PRIMARY_MODEL / lobes switch when raw text decode throughput matters more than
context length or vision. Re-run lobes assess / lobes benchmark after any vLLM
image bump — the Mamba/NVFP4 paths are young and likely to get faster.
For MTP (speculative decoding) on the 27B, the baseline NVFP4 export here drops
the MTP draft head (~0 % acceptance). The MTP-grafted, text-only re-export
sakamakismile/Qwen3.6-27B-Text-NVFP4-MTP
(qwen3.6-27b-text-nvfp4-mtp.md) restores it for
vLLM speculative decoding — a candidate to benchmark against this baseline
(issue #26).