Qwen 3.8 27B
A dense 27B that thinks about twice as hard as anything its size. Quantized to four bits it fits in 23 GB and ties DeepSeek V4 Flash on the coding benchmark - and the four-bit build turned out to be the one to serve.
Run the four-bit (NVFP4) build at medium reasoning effort. It matches the eight-bit build on quality and beats it on every serving axis - smaller, faster, more concurrent.
It thinks about twice as much, and it pays
The gap over the previous generation is almost entirely on the two hardest tasks, and the new model gets there by generating a lot more. On the hardest one - an atomicity bug in an experience-point ledger - it produces tens of thousands of tokens of reasoning and edits against the old model's shorter, more confident, more wrong attempt. The over-thinking is not waste; it is how it arrives at the answer. The one real cost is that thinking is tokens and tokens are wall-clock.
Reasoning effort is a real dial - set server-side
More effort buys correctness on the hardest task, entirely by lowering the failure rate; the ceiling is the same either way, and medium is the balance worth running. The trap: the agent does not forward a reasoning-effort field to the server at all. The level is set by which chat template the serve mounts - "run this at medium" is a decision you bake into the serve, not a client flag. Once you know it, it is obvious; until you know it, you can lose an afternoon wondering why a flag does nothing.
Quality does not decide the quant - serving does
Four-bit and eight-bit are the same model; benched at medium effort they land on top of each other within noise. So the choice is a serving one, and there it is not close: four-bit decodes a quarter to a third faster, runs in 23 GB against 31, and sustains roughly twice the aggregate throughput under load. There is no axis where eight-bit wins. Run four-bit; keep eight-bit around only to point at and say it bought you nothing.
By the numbers
Everything below is read live from the benchmark, the same source as the data page. It reflects the current measurement, not a snapshot pasted in when this page was written.
Serving gotchas
- The reasoning-effort flag is on the server, not the clientThe agent never forwards it. Effort is whatever the mounted chat template defaults to - mount the medium template to serve medium.
- Do not taper it on fillerIt is a hybrid (48 of 64 layers linear-attention, 16 full), so decode is nearly flat by architecture. Repetitive filler + spec-decode made it read both steep and flat, wrongly. Measure on a real corpus.
- A wall-clock tail on the hardest taskA handful of runs ran to the three-hour cap with a correct fix already in hand - the agent kept working past useful. A shorter timeout or a notch less effort caps it.
How it's served
hf download Qwen/Qwen3.8-27B-NVFP4 --local-dir ~/models/Qwen3.8-27B-NVFP4Serving compose - ~/vllm/compose-Qwen3.8-27B-NVFP4-medium.yml
# Qwen 3.8 27B - NVFP4 (~23G, native Blackwell FP4), MEDIUM-EFFORT variant for the QUALITY bench.
# Quant-matched sibling to compose-Qwen3.6-27B-NVFP4-medium.yml -> the fair generational A/B is
# 3.8-NVFP4 vs 3.6-NVFP4 (both 4-bit). Also gives the within-3.8 FP8-vs-NVFP4 quality+speed A/B.
# Mounts qwen-fixed-v22-medium.jinja (reasoning_effort default = medium; opencode does NOT forward it).
# Same qwen3_5 hybrid + native MTP head (model_mtp.safetensors). bf16 KV (fp8 KV corrupts DeltaNet).
# ⚠ VALIDATE at bring-up: NVFP4 serves NATIVELY on SM120 (FlashInfer, not Marlin fallback / TP garbage).
services:
vllm:
image: vllm/vllm-openai:nightly # nightly proven to load qwen3_5; validate NVFP4 native FP4 path on SM120
restart: "no"
ipc: host
shm_size: "32gb"
ulimits:
memlock:
soft: -1
hard: -1
stack: 67108864
ports:
- "8080:8000"
environment:
- CUDA_VISIBLE_DEVICES=0,1
- CUDA_DEVICE_ORDER=PCI_BUS_ID
- PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
- HF_HUB_OFFLINE=1
- TRANSFORMERS_OFFLINE=1
volumes:
- ~/models/Qwen3.8-27B-NVFP4:/models:ro
- ~/vllm/chat-templates/qwen-fixed-v22-medium.jinja:/chat_template.jinja:ro
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ['0', '1']
capabilities: [gpu]
command: >
--model /models
--served-model-name Qwen3.8-27B latest /latest
--host 0.0.0.0 --port 8000
--tensor-parallel-size 2
--disable-custom-all-reduce
--gpu-memory-utilization 0.85
--max-model-len 262144
--max-num-seqs 32
--max-num-batched-tokens 8192
--reasoning-parser qwen3
--tool-call-parser qwen3_coder
--enable-auto-tool-choice
--speculative-config '{"method":"mtp","num_speculative_tokens":3}'
--chat-template /chat_template.jinja
--enable-prefix-caching
--enable-chunked-prefill
--trust-remote-code