Load path (important)
These weights are compressed-tensors (pack-quantized / int-quantized).
| Runtime | Supported |
|---|
| vLLM ≥ 0.21 | Yes — preferred (auto-detect CT; no --quantization flag) |
transformers + compressed-tensors | Yes for many text models; multimodal may need custom code |
| Text Generation Inference (TGI) | Not supported for these CT packs |
| Hugging Face Inference Widget | Often fails — use vLLM locally instead |
1# Preferred
2vllm serve 88plug/<ModelName> --trust-remote-code
Do not deploy via TGI “text-generation-inference” paths — that backend does not load our CT format and produces opaque worker/load errors.
Qwen3.6-27B-W8A16
INT8 post-training quantization of
Qwen/Qwen3.6-27B — a
vision-language model (images + text → text) with a hybrid Gated-DeltaNet + dense-MLP architecture.
~27 GB on disk. Runs 262k token context on one A6000 or RTX 4090.
| Release tier | Gold (AutoRound iters=200) |
| Quant method | AutoRound W8A16 iters=200 |
| FLAC status | Not measured (T+7d milestone) |
The official FP8 release requires Blackwell or H100 hardware. This quant fills the gap: near-lossless W8A16 that runs on any FP16-capable GPU — A6000, RTX 4090, L40S, A100-40.
What Makes This Different
The Gap This Fills
The official Qwen3.6-27B release ships in BF16 (~54 GB) and FP8 (~28 GB). The FP8 checkpoint is great — but FP8 inference kernels require Blackwell (RTX 50xx) or Hopper (H100/H200) GPU generation. On Ampere or Ada hardware (RTX 3090/4090, A6000, A100), FP8 activations are not natively supported.
This W8A16 checkpoint lands at the same ~27–28 GB footprint as the official FP8 model, but uses INT8 weights and BF16 activations — a format that Marlin kernels in vLLM serve natively on any Ampere+ GPU. No hardware generation restriction.
The Solutions Applied Here
AutoRound W8A16 — INT8 weights, BF16 activations. Activations are left in BF16. This eliminates the dominant source of quality loss in W8A8 methods. AutoRound's sign-gradient rounding optimization produces significantly better per-weight calibration than GPTQ or AWQ at the same bit width, reducing worst-case outlier distortion.
Group size G32 — fine-grained scale resolution. A group size of 32 weights per scale factor provides 4× finer quantization resolution than the common G128, at the cost of a modest overhead in scale storage. For a 27B dense model this is the right tradeoff: scale storage is negligible, and the quality improvement on long-context tasks is measurable.
Mixed calibration corpus. 75% UltraChat-200k (instruction-following fidelity) + 25% WikiText-103 (long-context fidelity). 1,024 samples at 2,048 tokens each. Text-only calibration data.
What Stays at BF16
| Layer | Reason |
|---|
linear_attn.* | Gated DeltaNet — must stay BF16 per vLLM #40252 |
embed_tokens | Embedding table — standard practice; disproportionate perplexity impact |
lm_head | Output projection — standard practice |
norm | Layer norms — negligible size, high sensitivity |
Vision calibration note: Calibration corpus is text-only. The vision encoder (ViT) receives RTN-style INT8 quantization with no calibration signal, which is near-lossless at 8-bit. Text quality is fully calibrated; vision quality is RTN INT8.
Architecture Notes
Qwen3.6-27B is a vision-language model built on a hybrid Gated-DeltaNet + dense-MLP backbone. Key characteristics relevant to serving:
- Modalities: Image + Text → Text (pipeline tag:
image-text-to-text)
- Model type:
qwen3_5 (dense, no MoE)
- 41 LLM layers: interleaved full-attention and Gated DeltaNet linear-attention layers in a dense stack
- No MoE: no shared experts, no router gate — standard dense MLP blocks throughout
- Native context: 262,144 tokens
- KV cache: only full-attention layers maintain a KV cache; Gated DeltaNet layers use fixed recurrent state independent of sequence length
Because there is no MoE, there is no tail-expert calibration problem. Every parameter in the dense MLP blocks is calibrated with full coverage. The only special-case exclusions are the Gated DeltaNet layers (BF16 by requirement) and the standard embedding/head layers.
Memory Requirements
| Configuration | BF16 | This Quant (W8A16) | Official FP8 |
|---|
| Weights (disk/VRAM) | ~54 GB | ~27 GB | ~28 GB |
| KV cache @ 32k ctx (fp8) | ~0.3 GB | ~0.3 GB | ~0.3 GB |
| KV cache @ 128k ctx (fp8) | ~1.2 GB | ~1.2 GB | ~1.2 GB |
| KV cache @ 262k ctx (fp8) | ~2.4 GB | ~2.4 GB | ~2.4 GB |
| Total VRAM @ 32k ctx | ~55 GB | ~28 GB | ~29 GB |
| Total VRAM @ 262k ctx | ~57 GB | ~30 GB | ~31 GB |
| Minimum GPU | 1× A100 80GB | 1× RTX 4090 / A6000 / A100-40 | H100 / Blackwell only |
KV cache figures are for the full-attention layers only. Linear-attention layers carry state in a fixed recurrent buffer independent of sequence length — this is why 262k context fits on a 24 GB RTX 4090 with room to spare.
Quick Start
Tested with vLLM v0.21.0 (vllm/vllm-openai:v0.21.0-cu129-ubuntu2404). Weights are in compressed-tensors format — vLLM detects and loads quantization automatically. No --quantization flag needed.
Footguns to avoid: Do NOT use
--quantization turboquant (
vLLM #41560). Do NOT use
--tensor-parallel-size > 1 on a single GPU.
262k Context — Full Native Context (Recommended)
Native context window, no rope scaling, maximum quality.
1docker run --gpus device=0 -p 8080:8080 \
2 vllm/vllm-openai:v0.21.0-cu129-ubuntu2404 vllm serve \
3 88plug/Qwen3.6-27B-W8A16 \
4 --kv-cache-dtype fp8 \
5 --max-model-len 262144 \
6 --max-num-seqs 32 \
7 --gpu-memory-utilization 0.92 \
8 --enable-prefix-caching \
9 --reasoning-parser qwen3
Python Client
1from openai import OpenAI
2
3client = OpenAI(base_url="http://localhost:8080/v1", api_key="none")
4
5response = client.chat.completions.create(
6 model="88plug/Qwen3.6-27B-W8A16",
7 messages=[{"role": "user", "content": "Your prompt here"}],
8 max_tokens=512,
9 extra_body={"chat_template_kwargs": {"enable_thinking": False}},
10)
11print(response.choices[0].message.content)
Recommended Sampling Parameters
| Mode | Temperature | Top-P | Top-K | Min-P | Use When |
|---|
| Thinking (default) | 0.6 | 0.95 | 20 | 0.0 | Reasoning, math, code |
| Non-thinking | 0.7 | 0.8 | 20 | 0.0 | Chat, creative, fast response |
Enable/disable thinking via chat_template_kwargs={"enable_thinking": True/False}. Default is thinking-enabled.
Quality
Targets
| Metric | Target |
|---|
| KL divergence KL(quant‖BF16) | < 0.005 |
| MMLU recovery vs BF16 | ≥ 99.7% |
| RULER@128k recovery vs BF16 | ≥ 99% |
These targets drove the recipe design — W8A16 instead of W8A8 to eliminate activation quantization error, G32 group size for fine-grained scale resolution, and mixed calibration corpus to preserve both instruction-following and long-context fidelity.
Full benchmark results will be added after publication. If you run evals, please open an issue or PR.
vs. Other Qwen3.6-27B Quants
This is the first compressed-tensors W8A16 checkpoint for Qwen3.6-27B. It fills the gap between the 54 GB BF16 base and the hardware-restricted official FP8.
| Quant | Method | Size | GPU Compatibility | Notes |
|---|
| 88plug W8A16 (this) | compressed-tensors AutoRound | ~27 GB | Any Ampere+ (A6000, RTX 4090, A100) | First W8A16 for this model |
| Qwen/Qwen3.6-27B-FP8 (6.7M DL) | FP8 | ~28 GB | Blackwell / H100 only | Official; hardware restricted |
| unsloth/Qwen3.6-27B-GGUF (2M DL) | GGUF Q4–Q8 | 14–28 GB | CPU, Apple Silicon, any GPU | llama.cpp, no vLLM |
| cyankiwi/Qwen3.6-27B-AWQ-INT4 (1.5M DL) | AWQ INT4 | ~14 GB | Any GPU | 4-bit only |
| QuantTrio/Qwen3.6-27B-AWQ (893K DL) | AWQ INT4 | ~14 GB | Any GPU | 4-bit only |
| Lorbus/Qwen3.6-27B-int4-AutoRound (870K DL) | compressed-tensors W4G128 | ~14 GB | Any GPU | W4 only, G128 |
Why W8A16 over FP8: FP8 activation quantization on Ampere hardware falls back to BF16 dispatch silently, negating the memory savings. W8A16 is the correct format for Ampere/Ada inference: INT8 weights (Marlin kernel), BF16 activations — no hardware generation requirement, predictable behavior.
Why compressed-tensors over GGUF at this size: Marlin INT8 kernel throughput at batch > 1 significantly exceeds llama.cpp GGUF on GPU. Weights stay on GPU; no CPU↔GPU transfer overhead. vLLM OpenAI-compatible API, prefix caching, chunked prefill — all work natively.
SGLang
SGLang v0.5.8 offers RadixAttention for prefix-heavy workloads. Run against the BF16 base model — compressed-tensors is vLLM-native only.
Note: Gated-DeltaNet hybrid architecture support in SGLang v0.5.8 is unverified. Confirm before production use.
1docker run --gpus device=0 -p 30000:30000 \
2 lmsysorg/sglang:v0.5.8-cu129 python -m sglang.launch_server \
3 --model-path Qwen/Qwen3.6-27B \
4 --tp 1 \
5 --mem-fraction-static 0.85 \
6 --port 30000
llama.cpp (GGUF)
For consumer GPUs, CPU, and Apple Silicon. Convert from the BF16 base checkpoint — not from compressed-tensors weights. Vision requires a separate mmproj GGUF (libmtmd).
1# Build with CUDA
2cmake -B build -DGGML_CUDA=ON && cmake --build build --config Release -j$(nproc)
3
4# Convert base model (text trunk)
5python convert_hf_to_gguf.py Qwen/Qwen3.6-27B \
6 --outfile Qwen3.6-27B-BF16.gguf
7
8# Vision projector (required for image input)
9python convert_hf_to_gguf.py Qwen/Qwen3.6-27B \
10 --mmproj --outfile Qwen3.6-27B-mmproj.gguf
11
12# Quantize text trunk
13llama-quantize Qwen3.6-27B-BF16.gguf Qwen3.6-27B-Q8_0.gguf Q8_0
14llama-quantize --imatrix calibration_datav3.txt \
15 Qwen3.6-27B-BF16.gguf Qwen3.6-27B-IQ4_XS.gguf IQ4_XS
16
17# Serve (text + vision)
18llama-server \
19 --model Qwen3.6-27B-Q8_0.gguf \
20 --mmproj Qwen3.6-27B-mmproj.gguf \
21 --n-gpu-layers 999 \
22 --ctx-size 131072 \
23 --port 8081
Benchmarks
Results pending. Will be published before first HuggingFace release.
| Engine | Format | Batch | ctx | tok/s | TTFT p50 | TTFT p99 | VRAM |
|---|
| vLLM v0.21.0 | W8A16 | 1 | 32k | — | — | — | — |
| vLLM v0.21.0 | W8A16 | 8 | 32k | — | — | — | — |
| vLLM v0.21.0 | W8A16 | 1 | 128k | — | — | — | — |
| SGLang v0.5.8 | BF16 (baseline) | 1 | 32k | — | — | — | — |
| llama.cpp b9297 | Q8_0 GGUF | 1 | 32k | — | — | — | — |
Hardware: A6000 48 GB, CUDA 12.9, driver 570.
Limitations
Dense model — no MoE savings on KV. Unlike the 35B-A3B sparse MoE variant, every one of the 41 layers is active on every token. KV cache memory scales with all full-attention layers in the stack, not a reduced subset. The 262k context window is still achievable on a single A6000, but the headroom is tighter than with the MoE variant.
No activation quantization. W8A16 means activations run in BF16. Memory bandwidth savings are on the weight side only; activation memory is unchanged versus BF16. This is a deliberate quality-vs-compression tradeoff.
Linear attention state reset. The Gated-DeltaNet layers maintain recurrent state, not a KV cache. This state is reset between requests. Stateful multi-turn inference within a session works correctly; cross-request state continuity is not supported by the current vLLM serving path.
Calibration distribution. Calibration used UltraChat-200k and WikiText-103. Tasks with significantly different token distributions (e.g., code-heavy, mathematical, or non-English) may see slightly higher KL divergence than the headline targets. Recalibration with domain-specific data is straightforward using the recipe below.
Quantization Recipe (Reproducibility)
1# Core configuration
2quantization_method = "autoround"
3w_bits = 8
4w_dtype = "int8"
5a_dtype = "bf16" # activations NOT quantized
6group_size = 32
7iters = 200
8scale_method = "neural_max"
9
10calibration_dataset = {
11 "ultrachat_200k": 0.75,
12 "wikitext_103_raw": 0.25,
13}
14calibration_samples = 1024
15calibration_seqlen = 2048
16
17# BF16-preserved layers
18skip_layers = [
19 "linear_attn.*", # Gated DeltaNet — required by vLLM
20 "lm_head", # output projection
21 "embed_tokens", # embedding table
22 "norm", # layer norms
23]
Related Work
- Qwen/Qwen3.6-27B — base model
- AutoRound — sign gradient-based weight rounding optimization
- vLLM compressed-tensors — inference backend
- vLLM #40252 — Gated DeltaNet BF16 requirement
Citation
If you use this model, please cite the base model:
1@misc{qwen3technicalreport,
2 title = {Qwen3 Technical Report},
3 author = {Qwen Team},
4 year = {2025},
5 url = {https://huggingface.co/Qwen/Qwen3.6-27B}
6}
About
88plug AI Lab ships FLAC-target compressed-tensors quantizations — AutoRound iters=200, native vLLM v0.21.0+, no extra flags.
This release: Gold tier — full AutoRound calibration (1024 samples, UltraChat + WikiText-103). Targets ≥99% MMLU recovery.
All weights use compressed-tensors format. vLLM reads quantization_config automatically.
Browse all releases →
huggingface.co/88plug