Views
No views yet
qwen3_5_moe)| Component | Precision | Notes |
|---|---|---|
mlp.{gate_proj, up_proj, down_proj} | INT8 (GPTQ) | All 64 layers |
self_attn.{q,k,v,o}_proj | INT8 (GPTQ) | 16 full-attention layers |
linear_attn.{in_proj_qkv, in_proj_z, out_proj} | INT8 (GPTQ) | 48 linear-attention layers (GatedDeltaNet) |
linear_attn.{in_proj_a, in_proj_b} | FP16 | Tiny projections, kept at full precision |
Vision encoder (model.visual.*) | BF16 | 333 tensors, full precision |
MTP module (mtp.*) | BF16 | 15 tensors, full precision |
| Embeddings, LM head, norms | FP16/BF16 | Full precision |
| Version | Size | Compression |
|---|---|---|
| BF16 (original) | ~50 GB | — |
| GPTQ 8-bit | 32 GB | 1.6× |
| GPTQ 4-bit (FOEM) | 21 GB | 2.4× |
| Model | Perplexity | Degradation |
|---|---|---|
| BF16 (original) | 7.0652 | — |
| GPTQ 8-bit (this model) | 7.0697 | +0.07% (effectively lossless) |
| GPTQ 4-bit (FOEM) | 7.2032 | +1.95% |
1vllm serve btbtyler09/Qwen3.6-27B-GPTQ-8bit \
2 --tensor-parallel-size 4 \
3 --gpu-memory-utilization 0.95 \
4 --max-model-len 262144 \
5 --dtype float16 \
6 --skip-mm-profiling \
7 --limit-mm-per-prompt '{"image": 2}'| Parameter | Description |
|---|---|
--tensor-parallel-size 4 | Shard across 4 GPUs (adjust to your setup) |
--gpu-memory-utilization 0.95 | Use 95% of GPU VRAM for KV cache + weights |
--max-model-len 262144 | Full 256K context window support |
--dtype float16 | Run in FP16 (required for ROCm GPTQ kernels) |
--skip-mm-profiling | Skip multimodal memory profiling at startup |
--limit-mm-per-prompt '{"image": 2}' | Allow up to 2 images per request |
vLLM bug workaround (may apply): Up through at least vLLM 0.19.x,Qwen3_5TextConfigdefinesignore_keys_at_rope_validationas alistinstead of aset, causing aTypeErrorduring config parsing. Apply this patch before serving if you hit the error:python1python3 -c " 2for f in [ 3 '/usr/local/lib/python3.12/dist-packages/vllm/transformers_utils/configs/qwen3_5.py', 4 '/usr/local/lib/python3.12/dist-packages/vllm/transformers_utils/configs/qwen3_5_moe.py', 5]: 6 t = open(f).read() 7 t = t.replace( 8 'ignore_keys_at_rope_validation\"] = [\n \"mrope_section\",\n \"mrope_interleaved\",\n ]', 9 'ignore_keys_at_rope_validation\"] = {\n \"mrope_section\",\n \"mrope_interleaved\",\n }') 10 open(f,'w').write(t) 11 print('Patched', f) 12"
1import base64, requests
2
3with open("image.png", "rb") as f:
4 b64 = base64.b64encode(f.read()).decode()
5
6response = requests.post("http://localhost:8000/v1/chat/completions", json={
7 "model": "btbtyler09/Qwen3.6-27B-GPTQ-8bit",
8 "messages": [{"role": "user", "content": [
9 {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{b64}"}},
10 {"type": "text", "text": "Describe what you see in this image."},
11 ]}],
12 "max_tokens": 1024,
13})
14print(response.json()["choices"][0]["message"]["content"])Note: Neither GPTQModel nor transformers can currently load this model directly. GPTQModel's text-only loader expects themodel.layers.*weight prefix; this checkpoint uses the multimodal layout withmodel.language_model.layers.*so vision and MTP weights round-trip cleanly. Use vLLM for inference.
Qwen3_5ForConditionalGeneration wrapper with the MoE-based Qwen3.6-35B-A3B but uses a standard dense MLP in every decoder layer instead of an expert mixture. The text decoder alternates 3 linear-attention (GatedDeltaNet) layers with 1 full-attention layer, repeated 16 times for 64 total layers.Qwen3_5GPTQ, mirror of Qwen3_5MoeGPTQ with the MoE block replaced by a dense MLP) registered under model_type=qwen3_5.