Qwen3.5-4B ยท AWQ INT4 (W4A16)

4-bit quantization of Qwen/Qwen3.5-4B, produced for efficient vLLM serving. Quantized by axteam.

Revision 2026-11-01: un-smoothed RMSNorm weights restored bit-exactly from the original. llm-compressor's offset-norm handling had left BF16 rounding noise (at most 0.4% in the effective gain) in the norms that AWQ does not smooth. Quantized weights and the AWQ-smoothed norms are unchanged. The measurements on this card were taken before this change.

Base model Qwen/Qwen3.5-4B
Method AWQ INT4 (W4A16)
Format compressed-tensors pack-quantized
Weights / activations W4A16 โ€” INT4 asymmetric weights, group size 32 (BF16 scale + INT4 zero-point), BF16 activations
Architecture Hybrid (linear-attention + full-attention) ยท Dense ยท multimodal (vision) ยท MTP head
Size on disk ~4.2 GB
Calibration 256 samples (Korean-heavy mixed corpus)
License Apache-2.0

Quantization details

  • Scheme โ€” W4A16 โ€” INT4 asymmetric weights, group size 32 (BF16 scale + INT4 zero-point), BF16 activations, stored as compressed-tensors pack-quantized.
  • Kept in BF16 โ€” the vision tower & projector (model.visual.*), the multi-token-prediction head (mtp.*), all RMSNorms, token embeddings, the LM head, the SSM non-linear parts (linear_attn.conv1d/A_log/dt_bias). Left unquantized to preserve quality (about 21% of all parameters in this build).
  • Tokenizer / chat_template / generation_config are identical to the original. config.json is the original plus a quantization_config block.

This is post-training quantization (PTQ) โ€” no retraining. AWQ uses a small calibration set (no gradient) to protect salient weight channels before rounding.

Benchmarks (measured)

Every column was measured with the same harness and settings โ€” lm-evaluation-harness on vLLM, greedy, few-shot completion (no chat template). Percentages are recovery vs. the BF16 original.

Benchmark BF16 (original) FP8-dynamic AWQ-8bit NVFP4A16 NVFP4 AWQ-4bit (this repo)
MMLU (5-shot) 55.18 57.99 (105.1%) 54.79 (99.3%) 60.58 (109.8%) 58.61 (106.2%) 60.89 (110.3%)
GSM8K (5-shot, strict) 74.07 73.92 (99.8%) 73.84 (99.7%) 76.72 (103.6%) 73.31 (99.0%) 76.42 (103.2%)
ARC-Challenge (0-shot) 54.61 53.92 (98.8%) 54.52 (99.8%) 54.86 (100.5%) 53.92 (98.8%) 54.35 (99.5%)
Winogrande (5-shot) 68.75 67.96 (98.9%) 69.14 (100.6%) 68.90 (100.2%) 69.38 (100.9%) 68.90 (100.2%)
KMMLU (5-shot, direct) 50.47 50.13 (99.3%) 50.48 (100.0%) 51.49 (102.0%) 50.26 (99.6%) 49.02 (97.1%)
HAE-RAE (0-shot) 62.42 61.50 (98.5%) 62.05 (99.4%) 61.69 (98.8%) 59.76 (95.7%) 58.48 (93.7%)
Average 60.92 60.90 (100.0%) 60.81 (99.8%) 62.37 (102.4%) 60.87 (99.9%) 61.34 (100.7%)

Evaluation (measured)

Fidelity to the BF16 original on an internal mixed English/Korean set (100 prompts, BF16 greedy answers scored under each build โ€” same harness for every row).

Metric This model BF16 original
Perplexity (lower = closer) 1.6672 1.5703 (+6.2%)
Top-1 next-token agreement 89.0% 99.2%

These measure fidelity to the base model, not absolute task scores.

Requirements

Runtime vLLM โ€” the architecture is in vLLM โ‰ฅ 0.17.0; tested here with vLLM 0.32.0.
vLLM install vLLM 0.32 itself needs Python 3.11โ€“3.14, torch 2.13 (CUDA 13.0 build, so an NVIDIA driver with CUDA 13 support), transformers โ‰ฅ5.16.1,<5.20 and compressed-tensors 0.17.0 (both pinned by vLLM; 0.17.0 reads this checkpoint, which was saved with 0.19.0 โ€” do not upgrade it separately).
GPU NVIDIA Turing (sm75) or newer โ€” weight-only INT, no special tensor cores needed. V100 (sm70) is not supported. (Kernel choice per GPU from vLLM 0.32's selection code; only B200 was run here.)
Memory Weights: 4.2 GB. Add KV cache (grows with context length ร— concurrent requests) and a few GB for activations / CUDA graphs; use --tensor-parallel-size N when the weights do not fit one GPU.
Transformers (without vLLM) transformers>=5.2.0 + compressed-tensors>=0.15.0 (checked on CPU with Qwen3.5-0.8B FP8 / AWQ-4bit / NVFP4A16 / NVFP4).
trust_remote_code not needed

Usage (vLLM)

Start an OpenAI-compatible server:

vllm serve axteam/Qwen3.5-4B-AWQ-4bit --max-model-len 32768

Query it:

curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
  "model": "axteam/Qwen3.5-4B-AWQ-4bit",
  "messages": [{"role": "user", "content": "๋Œ€ํ•œ๋ฏผ๊ตญ์˜ ์ˆ˜๋„๋Š” ์–ด๋””์ธ๊ฐ€์š”?"}],
  "max_tokens": 512
}'

Offline inference in Python:

from vllm import LLM, SamplingParams

llm = LLM(model="axteam/Qwen3.5-4B-AWQ-4bit", max_model_len=32768)
params = SamplingParams(max_tokens=1024)
out = llm.chat([{"role": "user", "content": "Explain model quantization in two sentences."}], params)
print(out[0].outputs[0].text)

# image input (URL or data: URI)
messages = [{"role": "user", "content": [
    {"type": "image_url", "image_url": {"url": "https://example.com/your-image.png"}},
    {"type": "text", "text": "Describe this image."},
]}]
out = llm.chat(messages, params)
print(out[0].outputs[0].text)

Thinking mode is on by default in the chat template; to turn it off pass chat_template_kwargs={"enable_thinking": False} (Python llm.chat(..., chat_template_kwargs=...), or "chat_template_kwargs": {"enable_thinking": false} in the request body). Text-only serving: add --limit-mm-per-prompt '{"image": 0, "video": 0}' to skip loading the vision encoder's memory budget.

Reducing KV-cache memory (optional, serve-time)

The KV cache is kept in BF16 by default. KV-cache precision is a runtime choice, independent of the weight quantization above; for long contexts or large batches FP8 roughly halves KV-cache memory:

vllm serve axteam/Qwen3.5-4B-AWQ-4bit --kv-cache-dtype fp8

License

Quantized derivative of Qwen/Qwen3.5-4B (Apache-2.0). All original weights, tokenizer and chat template belong to the Qwen team.


ํ•œ๊ตญ์–ด ์š”์•ฝ

Qwen/Qwen3.5-4B์˜ AWQ INT4 (W4A16) ์–‘์žํ™” ๋นŒ๋“œ ยท ์ œ์ž‘ axteam

๊ฐœ์š”

ํ•ญ๋ชฉ ๋‚ด์šฉ
์›๋ณธ ๋ชจ๋ธ Qwen/Qwen3.5-4B
์–‘์žํ™” ๋ฐฉ์‹ AWQ INT4 (W4A16)
์ €์žฅ ํ˜•์‹ compressed-tensors pack-quantized
๋ชจ๋ธ ๊ตฌ์กฐ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์–ดํ…์…˜(์„ ํ˜• ์–ดํ…์…˜ + ํ’€ ์–ดํ…์…˜) ยท Dense ยท ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ(๋น„์ „) ยท MTP ํ—ค๋“œ
์šฉ๋Ÿ‰ ์•ฝ 4.2 GB
๋ณด์ • ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ 256๊ฐœ (ํ•œ๊ตญ์–ด ์œ„์ฃผ ํ˜ผํ•ฉ ์ฝ”ํผ์Šค)

์–‘์žํ™” ์ƒ์„ธ

  • ๊ฐ€์ค‘์น˜: INT4 ๋น„๋Œ€์นญ, ๊ทธ๋ฃน ํฌ๊ธฐ 32 (BF16 ์Šค์ผ€์ผ + INT4 ์˜์ )
  • ํ™œ์„ฑํ™”: BF16 (์–‘์žํ™”ํ•˜์ง€ ์•Š์Œ)
  • ์–‘์žํ™” ์ ˆ์ฐจ: PTQ(ํ•™์Šต ํ›„ ์–‘์žํ™”, ์žฌํ•™์Šต ์—†์Œ), AWQ ๋ฐฉ์‹ โ€” ๋ณด์ • ๋ฐ์ดํ„ฐ๋กœ ํ™œ์„ฑํ™”๊ฐ€ ํฐ ๊ฐ€์ค‘์น˜ ์ฑ„๋„์„ ์ฐพ์•„ ์ฑ„๋„๋ณ„ ์Šค์ผ€์ผ๋กœ ๋ณดํ˜ธํ•œ ๋’ค INT4๋กœ ๋ฐ˜์˜ฌ๋ฆผ
  • BF16 ์œ ์ง€: ๋น„์ „ ํƒ€์›Œยทํˆฌ์˜์ธต(model.visual.*), MTP ํ—ค๋“œ(mtp.*), ๋ชจ๋“  RMSNorm, ํ† ํฐ ์ž„๋ฒ ๋”ฉ, LM ํ—ค๋“œ, SSM์˜ ์„ ํ˜•์ธต ์™ธ ํŒŒ๋ผ๋ฏธํ„ฐ(linear_attn.conv1dยทA_logยทdt_bias) โ€” ์ „์ฒด ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์•ฝ 21%
  • ์›๋ณธ ํŒŒ์ผ: ํ† ํฌ๋‚˜์ด์ €ยทchat templateยทgeneration config๋Š” ์›๋ณธ๊ณผ ๋™์ผ, config.json์€ ์›๋ณธ์— quantization_config ๋ธ”๋ก๋งŒ ์ถ”๊ฐ€

ํ’ˆ์งˆ (์‹ค์ธก)

  • ์›๋ณธ ๋Œ€๋น„ ์ถฉ์‹ค๋„: PPL 1.6672 (์›๋ณธ 1.5703, +6.2%, ๋‚ฎ์„์ˆ˜๋ก ์›๋ณธ์— ๊ฐ€๊นŒ์›€), ๋‹ค์Œ ํ† ํฐ top-1 ์ผ์น˜์œจ 89.0% (์›๋ณธ ์ž์ฒด ๊ธฐ์ค€๊ฐ’ 99.2%) โ€” ๋‚ด๋ถ€ ์˜์–ดยทํ•œ๊ตญ์–ด ํ˜ผํ•ฉ ํ”„๋กฌํ”„ํŠธ 100๊ฐœ, ์›๋ณธ(BF16)์˜ greedy ๋‹ต๋ณ€์„ ๊ธฐ์ค€ ํ…์ŠคํŠธ๋กœ ์ธก์ •
  • ๋ฒค์น˜๋งˆํฌ ํ‰๊ท : 61.34 (์›๋ณธ 60.92, 100.7%) โ€” MMLUยทGSM8KยทARC-ChallengeยทWinograndeยทKMMLUยทHAE-RAE 6์ข… ํ‰๊ท , lm-evaluation-harness + vLLM, chat template ์—†๋Š” few-shotยทgreedy, ๋ชจ๋“  ๋นŒ๋“œ๋ฅผ ๊ฐ™์€ ์„ค์ •์œผ๋กœ ์ธก์ •
  • ํ•œ๊ตญ์–ด ๋ฒค์น˜๋งˆํฌ: KMMLU 49.02 (์›๋ณธ 50.47, 97.1%) ยท HAE-RAE 58.48 (์›๋ณธ 62.42, 93.7%)

์š”๊ตฌ์‚ฌํ•ญ

  • ์‹คํ–‰ ์—”์ง„: vLLM 0.17.0 ์ด์ƒ(์ด ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•˜๋Š” ์ฒซ ๋ฒ„์ „), ์ด ๋นŒ๋“œ๋Š” vLLM 0.32.0์—์„œ ์‹คํ–‰ ํ™•์ธ
  • vLLM 0.32 ์„ค์น˜ ์กฐ๊ฑด: Python 3.11~3.14, torch 2.13(CUDA 13.0 ๋นŒ๋“œ, CUDA 13 ์ง€์› ๋“œ๋ผ์ด๋ฒ„ ํ•„์š”), transformers 5.16.1 ์ด์ƒ 5.20 ๋ฏธ๋งŒ, compressed-tensors 0.17.0 โ€” transformersยทcompressed-tensors๋Š” vLLM์ด ๋ฒ„์ „์„ ๊ณ ์ •ํ•˜๋ฏ€๋กœ compressed-tensors๋ฅผ ๋”ฐ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์ง€ ๋ง ๊ฒƒ (์ด ์ฒดํฌํฌ์ธํŠธ๋Š” 0.19.0์œผ๋กœ ์ €์žฅ๋์ง€๋งŒ 0.17.0์—์„œ๋„ ๋กœ๋“œ๋จ)
  • GPU: NVIDIA Turing(sm75) ์ด์ƒ, V100(sm70) ๋ฏธ์ง€์› โ€” ๊ฐ€์ค‘์น˜ ์ „์šฉ ์ •์ˆ˜ ํ˜•์‹์ด๋ผ FP8ยทFP4 ์ „์šฉ ํ…์„œ์ฝ”์–ด ๋ถˆํ•„์š” (GPU๋ณ„ ์ง€์› ์—ฌ๋ถ€๋Š” vLLM 0.32 ์ปค๋„ ์„ ํƒ ์ฝ”๋“œ ๊ธฐ์ค€, ์‹ค์ œ ์‹คํ–‰์€ B200์—์„œ๋งŒ ํ™•์ธ)
  • ๋ฉ”๋ชจ๋ฆฌ: ๊ฐ€์ค‘์น˜ 4.2 GB + KV ์บ์‹œ(์ปจํ…์ŠคํŠธ ๊ธธ์ด ร— ๋™์‹œ ์š”์ฒญ ์ˆ˜์— ๋น„๋ก€) + ํ™œ์„ฑํ™”ยทCUDA graph์šฉ ์ˆ˜ GB โ€” GPU ํ•œ ์žฅ์— ๋‹ค ๋“ค์–ด๊ฐ€์ง€ ์•Š์œผ๋ฉด --tensor-parallel-size N์œผ๋กœ ๋ถ„์‚ฐ
  • Transformers๋กœ ์ง์ ‘ ์‚ฌ์šฉ: transformers 5.2.0 ์ด์ƒ + compressed-tensors 0.15.0 ์ด์ƒ (Qwen3.5-0.8B์˜ FP8ยทAWQ-4bitยทNVFP4A16ยทNVFP4 ๋นŒ๋“œ๋กœ CPU์—์„œ ํ™•์ธ)
  • trust_remote_code: ๋ถˆํ•„์š”

์‚ฌ์šฉ๋ฒ•

  • ์„œ๋ฒ„ ์‹คํ–‰: vllm serve axteam/Qwen3.5-4B-AWQ-4bit --max-model-len 32768 โ€” OpenAI ํ˜ธํ™˜ API
  • Python: LLM(model="axteam/Qwen3.5-4B-AWQ-4bit", max_model_len=32768).chat(...) โ€” ์ „์ฒด ์˜ˆ์‹œ๋Š” ์œ„ ์˜์–ด ๋ณธ๋ฌธ 'Usage (vLLM)' ์ ˆ ์ฐธ๊ณ 
  • thinking ๋ชจ๋“œ: ๊ธฐ๋ณธ ์ผœ์ง โ€” ๋„๋ ค๋ฉด chat_template_kwargs={"enable_thinking": False} ์ „๋‹ฌ(Python์€ llm.chat() ์ธ์ž, HTTP๋Š” ์š”์ฒญ ๋ณธ๋ฌธ์˜ "chat_template_kwargs": {"enable_thinking": false})
  • ์ด๋ฏธ์ง€ ์ž…๋ ฅ: ๋ฉ”์‹œ์ง€์— image_url ํ•ญ๋ชฉ ์‚ฌ์šฉ
  • ํ…์ŠคํŠธ๋งŒ ์‚ฌ์šฉํ•  ๋•Œ: --limit-mm-per-prompt '{"image": 0, "video": 0}' โ€” ๋น„์ „ ํƒ€์›Œ์šฉ ๋ฉ”๋ชจ๋ฆฌ ์˜ˆ์•ฝ์„ ์ƒ๋žตํ•ด ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ
  • KV ์บ์‹œ ์ ˆ๊ฐ(์„ ํƒ): vllm serve์— --kv-cache-dtype fp8 ์ถ”๊ฐ€ โ€” ๊ธฐ๋ณธ BF16์ธ KV ์บ์‹œ๋ฅผ FP8๋กœ ์ €์žฅํ•ด KV ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•ฝ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์ž„ (๊ธด ์ปจํ…์ŠคํŠธยท๋™์‹œ ์š”์ฒญ์ด ๋งŽ์„ ๋•Œ ์œ ๋ฆฌ, ๊ฐ€์ค‘์น˜ ์–‘์žํ™”์™€ ๋ณ„๊ฐœ์ธ ์‹คํ–‰ ์˜ต์…˜)

์ฐธ๊ณ 

  • ์ˆ˜์ • ์ด๋ ฅ (2026-11-01): AWQ๊ฐ€ ์Šค๋ฌด๋”ฉํ•˜์ง€ ์•Š๋Š” RMSNorm ๊ฐ€์ค‘์น˜๋ฅผ ์›๋ณธ๊ณผ ๋น„ํŠธ ๋‹จ์œ„๋กœ ๊ฐ™๊ฒŒ ๋ณต์› โ€” llm-compressor๊ฐ€ ๋‚จ๊ธด BF16 ๋ฐ˜์˜ฌ๋ฆผ ์˜ค์ฐจ(์‹คํšจ ๊ฐ€์ค‘์น˜ ๊ธฐ์ค€ ์ตœ๋Œ€ 0.4%) ์ œ๊ฑฐ, ์–‘์žํ™” ๊ฐ€์ค‘์น˜์™€ AWQ๋กœ ์Šค๋ฌด๋”ฉ๋œ RMSNorm์€ ๋ณ€๊ฒฝ ์—†์Œ, ํ’ˆ์งˆ ํ•ญ๋ชฉ์˜ ์ธก์ •๊ฐ’์€ ๋ณต์› ์ „ ๊ธฐ์ค€

๋ผ์ด์„ ์Šค

  • ๋ผ์ด์„ ์Šค: Apache-2.0 โ€” ์›๋ณธ ๋ชจ๋ธ์˜ ๋ผ์ด์„ ์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฆ„
  • ๊ถŒ๋ฆฌ: ์›๋ณธ ๊ฐ€์ค‘์น˜ยทํ† ํฌ๋‚˜์ด์ €ยทchat template์€ Qwen ํŒ€(Alibaba) ์†Œ์œ , ์ด ๋ฆฌํฌ๋Š” ์–‘์žํ™” ํŒŒ์ƒ๋ฌผ
Downloads last month
168
Safetensors
Model size
5B params
Tensor type
I32
ยท
BF16
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for axteam/Qwen3.5-4B-AWQ-4bit

Finetuned
Qwen/Qwen3.5-4B
Quantized
(604)
this model

Collection including axteam/Qwen3.5-4B-AWQ-4bit