Views
No views yet
| Setting | Value |
|---|---|
| Method | GPTQ, W4A16 |
| Bits | 4 |
| Group size | 128 |
| Symmetric | yes |
desc_act | false |
| Quantizer | GPTQModel 7.3.4 |
| Calibration data | allenai/c4 (zh/en/ja) + codeparrot/codeparrot-clean-valid, 256 samples total (64 per source), seq_len 4096 |
mtp.* tensors (the model's Multi-Token-Prediction / speculative-decoding draft head, 15 tensors) are kept in bf16, not quantized — GPTQModel's qwen3_5.py model definition preserves them via its out_of_model_tensors mechanism rather than passing them through the quantization loop at all (upstream transformers doesn't load MTP weights into the normal inference graph in the first place, so there is nothing to quantize there). This means the MTP speculative-decoding path below works out of the box.language_model.* weights are quantized (this checkpoint is intended for text-only serving).1vllm serve <this-repo> \
2 --served-model-name qwen3.8-27b-gptq \
3 --reasoning-parser qwen3 \
4 --tool-call-parser qwen3_xml \
5 --enable-auto-tool-choice \
6 --tensor-parallel-size 2 \
7 --gpu-memory-utilization 0.95 \
8 --max-model-len 200000 \
9 --speculative-config '{"method": "mtp", "num_speculative_tokens": 1}'--tool-call-parser qwen3_xml and qwen3_coder are aliases for the identical parser class in vLLM — either works.--max-model-len 200000 (vs. the model's native 262144) is needed to leave enough KV-cache headroom for the MTP draft path's own verification buffers on 2x24GB. If you have more VRAM (e.g. 4x24GB via --tensor-parallel-size 4, or 2x48GB+ cards) you likely won't need this cut.--max-model-len reduced well below native (a single 24GB card OOMs on the CUDA-graph-capture step at native length regardless of KV-cache tuning).vllm bench serve, random dataset, input-len 128 / output-len 64, TP=2, 2x RTX 3090, MTP speculative decoding enabled)| concurrency | mean TTFT | mean TPOT | output tok/s | MTP acceptance rate |
|---|---|---|---|---|
| 1 | 198.5ms | 12.6ms | 64.6 | 74.8% |
| 8 | 488.0ms | 43.9ms | 154.3 | 74.7% |
1export ANTHROPIC_BASE_URL="http://<your-vllm-host>:8000"
2export ANTHROPIC_API_KEY="dummy"
3export ANTHROPIC_AUTH_TOKEN="dummy"
4export ANTHROPIC_DEFAULT_OPUS_MODEL="qwen3.8-27b-gptq"
5export ANTHROPIC_DEFAULT_SONNET_MODEL="qwen3.8-27b-gptq"
6export ANTHROPIC_DEFAULT_HAIKU_MODEL="qwen3.8-27b-gptq"
7# vLLM's prefix caching is broken by Claude Code's per-request attribution header:
8export CLAUDE_CODE_ATTRIBUTION_HEADER=0
9# This model's vLLM server only accepts reasoning_effort in {xhigh, medium, low}
10# (not Claude Code's default "high") — override explicitly:
11claude --effort xhigh1codex \
2 -c preferred_auth_method="apikey" \
3 -c model="qwen3.8-27b-gptq" \
4 -c model_provider="local-vllm" \
5 -c model_providers.local-vllm.name="local-vllm" \
6 -c model_providers.local-vllm.base_url="http://<your-vllm-host>:8000/v1" \
7 -c model_providers.local-vllm.wire_api="responses" \
8 -c model_providers.local-vllm.env_key="DUMMY_KEY" \
9 -c model_reasoning_effort="xhigh"xhigh reasoning effort above — unlike our Qwen3.6-27B checkpoint (which accepts high), this model's chat template/server only accepts {xhigh, medium, low}; passing high returns a 400 error.