Views
No views yet
RedHatAI/Qwen3.6-35B-A3B-NVFP4 with two more tensor groups quantised to NVFP4: the
gated-delta-net (GDN/Mamba) backbone projections and the LM head. Weight-only (W4A16), via
compressed-tensors config groups. Nothing else is changed.mamba_in_proj alone is 1.52 GB) while the active NVFP4 experts are only ~0.56 GB. Decode at batch-1
is DRAM-bound, so tok/s tracks bytes-read-per-token almost exactly — and this checkpoint attacks the
term that actually dominates.| stock NVFP4 | this checkpoint | ||
|---|---|---|---|
| single-stream decode, no spec | 42.08 | 95.03 | 2.26× |
| aggregate @C=64 | 702.7 | 781.8 | 1.11× |
lm-eval n=200, 5-shot, apply_chat_template, greedy:| strict-match | flexible-extract | |
|---|---|---|
| stock NVFP4 | 0.945 | 0.955 |
| this checkpoint | 0.950 | 0.965 |
1vllm serve <this-repo> \
2 --kv-cache-dtype fp8 \
3 --reasoning-parser qwen3 --enable-prefix-caching--mamba-ssm-cache-dtype float16 — the config declares mamba_ssm_dtype: float32, and the GDN
recurrent state is the only per-step term that never amortises across concurrent rows. At high
concurrency it dominates: halving it measured +51% aggregate at C=512. Note the state is a
recurrent accumulator, so this is gated on short-generation GSM8K only — long-context behaviour
is unverified.--max-num-seqs — vLLM's default is 128; raising it is worth a lot on this model if you are
serving many streams.compressed-tensors config groups on the existing checkpoint — no vLLM patch, no retraining:group_0 — stock W4A4 (unchanged, targets: ["Linear"])group_1 — LM head, weight-only: re:.*lm_head$group_2 — GDN projections, weight-only:
re:.*linear_attn\.in_proj_qkv$, re:.*linear_attn\.in_proj_z$,
re:.*linear_attn\.out_proj$, re:.*linear_attn\.in_proj_qkvz$re:.*linear_attn\.in_proj_qkvz$ is mandatory. Scheme selection runs against the runtime
fused module name. Listing only the per-shard names (in_proj_qkv, in_proj_z) matches nothing,
and the module silently falls back to group_0's W4A4 — which has no calibrated
input_global_scale, so the model loads and serves fluent garbage. If you fork this recipe,
check for the absence of the global-scale warning in the serve log; that absence is the signal.in_proj_ba to group_2. Its shards stay BF16, and a quantised scheme would
demand packed tensors that do not exist.group_1 uses a regex: targets: ["Linear"] matches by module class, and
ParallelLMHead is not a LinearBase, so the head is not covered by group_0.