license: apache-2.0
base_model: huihui-ai/Huihui-Qwen3.8-27B-Coder390-EfficientThink-abliterated
tags:
- qwen3_5
- coder
- gptq
- int4
- w4a16
- vllm
- xpu
- intel-arc
- mtp
- gdn
- text-generation
- conversational
- en
- zh
library_name: vllm
Huihui-Qwen3.8-27B-Coder390-EfficientThink-abliterated-GPTQ-Int4-sym-G128-MTP-BF16
GPTQ Int4 W4A16 (symmetric, group-128, desc_act=False, lm_head=False)
quantization of
huihui-ai/Huihui-Qwen3.8-27B-Coder390-EfficientThink-abliterated
(dense Qwen3.8-27B coder, 64 layers of hybrid linear/full attention), built for the
vLLM XPU backend on Intel Arc — validated on an Arc Pro B60.
The recipe mirrorsSergiioB/Qwen3.8-27B-GPTQ-Int4-sym-G128-MTP-BF16
field-for-field, so this is a drop-in swap of that checkpoint onto the Coder390 base
rather than a new quantizer configuration. As of 2026-10-18 it is the only GPTQ
quantization of Coder390 on the Hub — the family has GGUF, MLX, EXL3, NVFP4,
compressed-tensors W4A16 and MXFP4 builds, but no GPTQ until this one.
Contents
- Quantized (400 modules →
qweightint32 +scales/qzeros): all 64 densemlp.{gate,up,down}_proj, all 16 full-attentionself_attn.{q,k,v,o}_proj, and all
48linear_attn.{in_proj_qkv,in_proj_z,out_proj}.in_proj_a/in_proj_bare
skipped, as in the reference recipe. - BF16: embeddings,
lm_head, every norm,A_log/conv1d/dt_bias, the full
27-block visual tower, and the MTP draft block (mtp.*, 15 tensors) — held out of
quantization withdynamic={"-:.*mtp.*": {}}and stored unquantized inside shard 5,
so speculative decoding needs no separate draft file. text_config.mtp_num_hidden_layersis 1 (as shipped upstream).
2,399 tensors / 5 shards / 18.24 GiB · SHA256SUMS included.
Structurally identical to the reference checkpoint (same 2,399 tensors, same per-dtype
element counts: F16 3,219,819,760 · I32 3,067,527,168 · BF16 424,699,392), which is
what makes the two directly comparable below.
Recipe
| field | value |
|---|---|
| method / format | gptq |
| bits / group_size / sym | 4 / 128 / True |
desc_act |
False |
lm_head |
False |
true_sequential / act_group_aware |
True / True |
pack_dtype / pack_impl |
int32 / cpu |
damp_percent / damp_auto_increment |
0.05 / 0.01 |
fallback |
Fallback(rtn, "0.5%") |
hessian.staging_dtype |
float32 |
dynamic |
{"-:.*mtp.*": {}} — keeps the MTP draft in BF16 |
| calibration | mit-han-lab/pile-val-backup, split=validation, streaming (10,000-row shuffle buffer), 64 chunks × 1024 tokens = 65,536 tokens |
The calibration is the one deliberate deviation from the classic GPTQ budget
(128 × 2048 = 262,144): on the 45 GB-RAM host used here the larger pile terminated the
job every time (GPU engine reset, or a host OOM-kill), and 64 × 1024 completed cleanly.
The reference checkpoint does not record how it was calibrated, so token-set parity was
never possible anyway. If you re-quantize, note that a different calibration changes the
Hessians and therefore the weights — it is a different artifact, not a re-run.
Measured serving
Measured on Intel Arc Pro B60 (24 GB, Battlemage), i5-12400F host, GPU power capped
at 180 W, vLLM 0.30.0+xpu, --dtype float16 --kv-cache-dtype fp8 --language-model-only,
MTP speculative decoding k=4, prompt 512 / generation 128 tokens:
| metric | value |
|---|---|
| decode | 40.183 tok/s |
| TTFT | 0.460 s |
| mean accepted tokens / step | 3.00 |
| vs. reference checkpoint, same session | −0.14 % (40.183 vs 40.239) |
MTP is worth having: with the draft disabled the same build measured 7.987 tok/s
against 16.620 tok/s at k=4 — 2.08× — on an MXFP4 leg of the same experiment.
Note the acceptance ratio is an upper bound on the gain, never the gain itself: the
speculative step costs 1.361× more per step here (125.2 → 170.5 ms).
Long context (single stream, 12,288-token ceiling): prefill stays linear at
~1,372 tok/s through 4,096 tokens (marginal 1,268 tok/s against the fitted line,
R² = 0.9986), while decode degrades gently — 40.200 tok/s @512 → 37.315 tok/s @12,000
(−7.2 %), TTFT 0.463 → 9.539 s. With --kv-cache-dtype fp8 the KV cache is 1.82 GiB,
i.e. ~17,630 tokens of capacity at these settings.
Measured quality
15/16 (93.8 %) on a 16-prompt task suite spanning math, code (executed), instruction
constraints and fact/trap questions. Treat that as ±1 item: one item
(format_no_letter_e) converges on some server instances and loops to the token cap on
others at temperature=0, deterministically within an instance but not across them, so a
single-item delta between builds is not signal.
Two harness traps this checkpoint sets, both worth knowing before you benchmark it:
- Always pass
--reasoning-parser qwen3. The engine emits</think>(added token- but the detokenizer suppresses it from
contentand leavesreasoning
null, so without the parser the whole reasoning trace arrives concatenated in front of
the answer with no delimiter. vLLM's own 16-prompt quality harness scores 8/16
that way versus 15/16 with the flag — a plausible-looking 50 % scored on the
model's private musings.
- but the detokenizer suppresses it from
- Quality items can flip between server instances even at greedy decoding (see above).
Re-run a lone failure before believing it.
Serving
vllm serve Huihui-Qwen3.8-27B-Coder390-EfficientThink-abliterated-GPTQ-Int4-sym-G128-MTP-BF16 \
--served-model-name coder390-gptq \
--quantization gptq --dtype float16 --kv-cache-dtype fp8 \
--max-model-len 12288 --max-num-seqs 1 --max-num-batched-tokens 8192 \
--gpu-memory-utilization 0.93 --language-model-only \
--reasoning-parser qwen3 \
--enable-auto-tool-choice --tool-call-parser qwen3_xml \
--speculative-config '{"method":"mtp","num_speculative_tokens":4}'
Notes:
--language-model-onlyskips the visual tower, which is what the benchmarks above
used. The tower is intact and BF16 (333 tensors) if you need vision.- MTP resolves automatically: the draft is the BF16
mtp.*block in shard 5, activated
byB70_MTP_BF16_DRAFT=1on this stack and by the compressed-tensors ignore list. - On a cold container the first engine init can fail with
ValueError: ... KV cache is needed, which is larger than the available KV cache memory (0.18 GiB)becausetorch.compile's transient pool eats the KV budget; the
retry succeeds against a warm compile cache. Run the server under--restart unless-stopped(or restart the same container once) and expect ~220 s to
healthy rather than treating the first failure as fatal. - Decode throughput on this host is bimodal (~40.2 vs ~48.5 tok/s, ~20 %), with the
mechanism unidentified and step time — not acceptance — responsible. Compare rates
only within a single session, and report a median and a spread rather than one number.
Relation to the MXFP4 sibling
alpha2beta/Huihui-Qwen3.8-27B-Coder390-EfficientThink-abliterated-MXFP4
is the same base model quantized to MXFP4 (compressed-tensors mxfp4-pack-quantized,
W4A4). Same tensors held in BF16, same folder layout, same 5-shard/16-shard family
naming. On the same host MXFP4 is markedly slower than GPTQ at batch 1 — W4A4 dynamic
activation quantization and a non-fused FP4 GEMM, multiplied by eager execution — which
is why this GPTQ build exists as the throughput option.
Provenance
Built with gptqmodel 7.6.0 on
vLLM 0.30.0+xpu / torch 2.13.0+xpu / transformers 5.16.1, driving the Arc Pro B60 as the
quantization accelerator, with offload_to_disk=True (meta-device shell + module-by-
module streaming) because the 52 GB BF16 source does not fit in the 45 GB host RAM.
Base weights: huihui-ai/Huihui-Qwen3.8-27B-Coder390-EfficientThink-abliterated
(BF16, Apache-2.0). Reference schema: SergiioB/Qwen3.8-27B-GPTQ-Int4-sym-G128-MTP-BF16.
Full build record, attempt log, benchmarks and the operating guide:alpha2beta/vllm.xpu @ b60 —
see REPRODUCIBILITY.md (§6, §7 deviation 8, §8 known issues 1/11/12/13) andGPTQ_quantization.md.