localweights/Qwen3.6-27B-MTP-IQ4_XS-GGUF
Qwen3.6-27B-MTP-IQ4_XS-GGUF
Qwen3.6-27B with NextN/MTP (Multi-Token Prediction) speculative-decoding head, quantized to IQ4_XS for single-GPU 24GB inference.
What this is
The published Qwen3.6 family ships with native NextN MTP heads embedded in the safetensors. Most public GGUFs strip these. This conversion preserves them, producing a single GGUF that:
- Loads as
qwen35moe_mtparch in a patched llama.cpp - Serves at ~2× decode speed vs. the same trunk without MTP
- Fits in ~15 GB VRAM at IQ4_XS + q4/q4 KV
- Native 262K context
Build pipeline
Source: Qwen/Qwen3.6-27B (HF safetensors, with NextN tensors).
- Clone llama.cpp at the
crucible-mtpbranch onllama.cpp (patched)(Aman Gupta's MTP fork) — addsLLM_ARCH_QWEN35MOE_MTP+ the NextN draft path. - Run
convert_hf_to_gguf.pyagainst the HF repo. Produces a BF16 GGUF with archqwen35moe_mtpand the NextN tensors fused in. - Quantize to IQ4_XS via
llama-quantize.
python convert_hf_to_gguf.py /path/to/Qwen3.6-27B \
--outfile Qwen3.6-27B-MTP-bf16.gguf
llama-quantize Qwen3.6-27B-MTP-bf16.gguf \
Qwen3.6-27B-MTP-IQ4_XS.gguf IQ4_XSOptimal serving config (RTX 3090 Ti, 24 GB)
Cherry-pick PRs #20819 + #20822 for cross-process KV-slot save/restore (we use these for sub-second resume on long contexts).
llama-server \
-m Qwen3.6-27B-MTP-IQ4_XS.gguf \
-ngl 999 -fa on \
--spec-type mtp --spec-draft-n-max 4 \
--no-mmap \
--ctx-size 262144 \
--batch-size 1024 --ubatch-size 512 \
-ctk q4_0 -ctv q4_0 \
--parallel 1 --kv-unified \
--ctx-checkpoints 8 --checkpoint-every-n-tokens 2048 \
--cache-ram -1 --cache-idle-slots \
--metrics --jinjaWhy these flags:
--spec-type mtp: enables NextN-head draft path (this is the whole point of the MTP variant).--spec-draft-n-max 4: empirically the sweet spot — beyond that, accept rate drops faster than draft count grows.--no-mmap: required for KV-slot persistence + measured ~no perf hit on this rig.-ctk q4_0 -ctv q4_0: dense KV cache fits 262K context inside 24 GB without spilling.--parallel 1: MTP path currently only supportsn_parallel=1upstream.
What NOT to set:
-ot(expert offload) — defeats the GPU-resident speedup.-ctk q8_0at full 262K ctx — overflows VRAM during warmup.
Performance (RTX 3090 Ti, 350 W power limit)
Measured 2026-05-06 at short-context inference, persistence + MTP on:
Memory footprint at 262 K ctx: ~17 GB (model) + ~5 GB (KV q4/q4) + scratch = ~22.5 GB used, ~1.5 GB headroom on a 24 GB card.
Tokenizer
Inherits Qwen3.6 tokenizer (248,320 vocab, qwen35 pre-tokenizer). Same chat template as upstream Qwen3.6-Instruct. If your runtime errors on Jinja Exception: System message must be at the beginning, use the loosened template at: https://huggingface.co/localweights/qwen36-loose-jinja (single line edit removing the strict-position assertion).
License
Apache 2.0 (inherited from Qwen3.6).
Provenance
Built on Crucible: 9950X / 96 GB DDR5 / RTX 3090 Ti. Same pipeline used for the sibling Qwen3.6-35B-A3B-MTP-IQ4_XS-GGUF repo.
