Qwen3.8-27B — GPTQ INT4 (sym, G128) with preserved BF16 MTP head
license
quant
engine
hardware
mtp
vision
Self-quantized on the target GPU (gptqmodel 7.3.2) for vLLM XPU serving on
Intel Arc (Xe2). The single MTP draft layer is deliberately excluded from
quantization and kept in BF16, so native speculative decoding (MTP) works
out of the box — and an optional runtime INT4 draft overlay (below) takes
single-stream decode from 83.7 → 112.7 tok/s on the same checkpoint.
All numbers are real measurements taken on a single Intel Arc Pro B70
32 GB — client-side timing, n=5 medians, 230 W cap, context 131072, fp8 KV,
served at the Qwen3.8-27B model card's recommended sampling —
non-thinking: temperature 0.7, top_p 0.80, top_k 20, presence_penalty 1.5
(thinking: 1.0 / 0.95 / 20). Greedy rows are marked greedy.
Commands, methodology and raw logs are public: 📖
Intel Arc Pro B70 Inference Cookbook (see the link section below).
TL;DR
What
Number
Notes
Best single-stream decode (MTP4 + INT4 draft overlay, cache off)
Optional: INT4 draft overlay (+39% decode, same checkpoint)
Two runtime patches quantize only the draft side (draft LM head + 5 MTP
linears) to INT4-G128 at server start; the target body and verify head stay
GPTQ-INT4/BF16. Off by default — the checkpoint on this hub is unchanged.
-e B70_DRAFT_LMHEAD_INT4=1 -e B70_DRAFT_MTP_INT4=1 # + the two draft patches
Cell (n=5)
BF16 draft (as-is)
INT4 draft overlay
Δ
p512/g128, cache off
81.2 (matched arm)
112.65
+38.7%
p8192/g128, cache off
77.5
103.6
+33.7%
p512/g128, prefix on
—
106.7
—
MTP acceptance
95.9%
94.4%
−1.5 pp
This is a speed option, not a parity claim: draft logits differ. On a
15-task temperature-0 suite both arms score 12/15 with zero regressions
unique to the overlay. Details, patches and hashes:
DRAFT-INT4-S-M1.md.
Concurrent serving (requires the v5 mixed-split patch)
Unpatched gdn_attention on this XPU stack dies on mixed speculative +
non-speculative batches at C≥2; the cookbook's patch_gdn_mixed_split_v5.py
fixes it (0 crashes across all cells below, including mixed long-prefill +
decode).
Two honest caveats (measured, open issues on this build): MTP acceptance
drops to 43–56% under concurrency, and prefix-cache reuse across
concurrent sessions mostly fails (0–38% hit rate vs 91% single-stream), so
warm multi-user turns re-prefill and TTFT stays 20+ s.
Quick start
Full copy-paste recipe (image digest, patch hashes, launch lines for every
configuration): FULL-SETUP-COMMANDS.md.
The checkpoint ships the full F16 vision tower (333 model.visual.* /
model.merger.* tensors). To serve vision: keep preprocessor_config.json
and video_preprocessor_config.json (both in this repo) next to the
safetensors and drop --language-model-only. Measured on B70: 3,219 MiB
free after load with full 131K context retained; an image+text request
(~1,070 prompt + 200 output tokens) completes in 7.3 s.
Converted locally from the official Qwen/Qwen3.8-27B release with
gptqmodel 7.3.2. Apache-2.0, following the base model's license. The MTP
draft tensors are bit-identical to the source release.