Qwen3.5-0.8B ยท NVFP4A16 (W4A16, FP4 weights)

4-bit quantization of Qwen/Qwen3.5-0.8B, 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-0.8B
Method NVFP4A16 (W4A16, FP4 weights)
Format compressed-tensors nvfp4-pack-quantized
Weights / activations W4A16 โ€” FP4 (E2M1) weights group 16 (FP8 E4M3 scale + per-tensor FP32 global scale), BF16 activations
Architecture Hybrid (linear-attention + full-attention) ยท Dense ยท multimodal (vision) ยท MTP head
Size on disk ~1.3 GB
Calibration 256 samples (Korean-heavy mixed corpus)
License Apache-2.0

Quantization details

  • Scheme โ€” W4A16 โ€” FP4 (E2M1) weights group 16 (FP8 E4M3 scale + per-tensor FP32 global scale), BF16 activations, stored as compressed-tensors nvfp4-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 entire linear-attention (GatedDeltaNet/SSM) path โ€” FP4 is too coarse for the SSM weights, so the full linear_attn.* stays BF16. linear_attn.A_log and the gated linear_attn.norm, FP32 in the original, are stored in BF16 โ€” losslessly for A_log (every original value is exactly representable in BF16), and for the norm the same values vLLM and Transformers (default dtype) load at runtime. Left unquantized to preserve quality (about 65% of all parameters in this build).
  • Tokenizer / chat_template / preprocessor configs are identical to the original (the original ships no generation_config.json, so none is included here). 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, completion-style prompts without a chat template (0- or 5-shot, as listed in each row). MMLU here is lm-eval's generative variant (mmlu_generative: the model writes the answer letter and only an exact match on the first line counts), so it is not directly comparable with MMLU scores measured another way (e.g. log-likelihood scoring). Percentages are recovery vs. the BF16 original.

Benchmark BF16 (original) FP8-dynamic AWQ-8bit NVFP4A16 (this repo) NVFP4 AWQ-4bit
MMLU (5-shot, generative) 50.56 50.50 (99.9%) 50.31 (99.5%) 48.39 (95.7%) 46.36 (91.7%) 48.55 (96.0%)
GSM8K (5-shot, strict) 32.68 29.80 (91.2%) 32.30 (98.8%) 29.49 (90.3%) 22.82 (69.8%) 28.20 (86.3%)
ARC-Challenge (0-shot) 37.54 36.52 (97.3%) 37.46 (99.8%) 35.07 (93.4%) 33.11 (88.2%) 35.15 (93.6%)
Winogrande (5-shot) 56.27 55.49 (98.6%) 56.67 (100.7%) 55.80 (99.2%) 55.64 (98.9%) 55.88 (99.3%)
KMMLU (5-shot, direct) 34.54 34.22 (99.1%) 34.20 (99.0%) 35.02 (101.4%) 33.51 (97.0%) 35.74 (103.5%)
HAE-RAE (0-shot) 37.03 35.29 (95.3%) 36.30 (98.0%) 34.10 (92.1%) 27.31 (73.8%) 34.28 (92.6%)
Average 41.44 40.30 (97.3%) 41.21 (99.4%) 39.65 (95.7%) 36.46 (88.0%) 39.63 (95.6%)

โš ๏ธ Note: average recovery is 95.7% โ€” noticeable degradation at this precision; prefer an 8-bit build if quality matters most.

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) 2.1669 2.0174 (+7.4%)
Top-1 next-token agreement 87.8% 98.7%

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 FP4, no FP4 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: 1.3 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-0.8B-NVFP4A16 --max-model-len 32768

Query it:

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

Offline inference in Python:

from vllm import LLM, SamplingParams

llm = LLM(model="axteam/Qwen3.5-0.8B-NVFP4A16", 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 off by default in this model's chat template; to turn it on pass chat_template_kwargs={"enable_thinking": True} (Python llm.chat(..., chat_template_kwargs=...), or "chat_template_kwargs": {"enable_thinking": true} 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. This is a hybrid model: only its 6 full-attention layers keep a KV cache, while its 18 linear-attention (Gated DeltaNet) layers keep a fixed-size state per request, which --kv-cache-dtype does not change. FP8 halves the full-attention KV cache, so the saving grows with context length and is small for many short requests:

vllm serve axteam/Qwen3.5-0.8B-NVFP4A16 --kv-cache-dtype fp8

License

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


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

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

๊ฐœ์š”

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

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

  • ๊ฐ€์ค‘์น˜: FP4(E2M1), ๊ทธ๋ฃน ํฌ๊ธฐ 16 (๊ทธ๋ฃน๋ณ„ FP8(E4M3) ์Šค์ผ€์ผ + ํ…์„œ๋ณ„ FP32 ์ „์—ญ ์Šค์ผ€์ผ)
  • ํ™œ์„ฑํ™”: BF16 (์–‘์žํ™”ํ•˜์ง€ ์•Š์Œ)
  • ์–‘์žํ™” ์ ˆ์ฐจ: PTQ(ํ•™์Šต ํ›„ ์–‘์žํ™”, ์žฌํ•™์Šต ์—†์Œ), AWQ ๋ฐฉ์‹ โ€” ๋ณด์ • ๋ฐ์ดํ„ฐ๋กœ ํ™œ์„ฑํ™”๊ฐ€ ํฐ ๊ฐ€์ค‘์น˜ ์ฑ„๋„์„ ์ฐพ์•„ ์ฑ„๋„๋ณ„ ์Šค์ผ€์ผ๋กœ ๋ณดํ˜ธํ•œ ๋’ค FP4๋กœ ๋ฐ˜์˜ฌ๋ฆผ
  • BF16 ์œ ์ง€: ๋น„์ „ ํƒ€์›Œยทํˆฌ์˜์ธต(model.visual.*), MTP ํ—ค๋“œ(mtp.*), ๋ชจ๋“  RMSNorm, ํ† ํฐ ์ž„๋ฒ ๋”ฉ, LM ํ—ค๋“œ, ์„ ํ˜• ์–ดํ…์…˜(GatedDeltaNet/SSM) ๊ฒฝ๋กœ ์ „์ฒด(linear_attn.*, FP4๋กœ๋Š” ์ •๋ฐ€๋„ ๋ถ€์กฑ) โ€” ์›๋ณธ์—์„œ FP32์ธ linear_attn.A_logยท๊ฒŒ์ดํŠธ linear_attn.norm์€ BF16์œผ๋กœ ์ €์žฅ(A_log๋Š” ์›๋ณธ ๊ฐ’์ด ๋ชจ๋‘ BF16์œผ๋กœ ์ •ํ™•ํžˆ ํ‘œํ˜„๋ผ ์†์‹ค ์—†์Œ, norm์€ vLLMยทTransformers(๊ธฐ๋ณธ dtype)๊ฐ€ ์‹คํ–‰ ๋•Œ ์“ฐ๋Š” BF16 ๊ฐ’๊ณผ ๊ฐ™์Œ) โ€” ์ „์ฒด ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์•ฝ 65%
  • ์›๋ณธ ํŒŒ์ผ: ํ† ํฌ๋‚˜์ด์ €ยทchat templateยท์ „์ฒ˜๋ฆฌ ์„ค์ •์€ ์›๋ณธ๊ณผ ๋™์ผ(์›๋ณธ์— generation_config.json์ด ์—†์–ด ์ด ๋ฆฌํฌ์—๋„ ์—†์Œ), config.json์€ ์›๋ณธ์— quantization_config ๋ธ”๋ก๋งŒ ์ถ”๊ฐ€

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

  • ์›๋ณธ ๋Œ€๋น„ ์ถฉ์‹ค๋„: PPL 2.1669 (์›๋ณธ 2.0174, +7.4%, ๋‚ฎ์„์ˆ˜๋ก ์›๋ณธ์— ๊ฐ€๊นŒ์›€), ๋‹ค์Œ ํ† ํฐ top-1 ์ผ์น˜์œจ 87.8% (์›๋ณธ ์ž์ฒด ๊ธฐ์ค€๊ฐ’ 98.7%) โ€” ๋‚ด๋ถ€ ์˜์–ดยทํ•œ๊ตญ์–ด ํ˜ผํ•ฉ ํ”„๋กฌํ”„ํŠธ 100๊ฐœ, ์›๋ณธ(BF16)์˜ greedy ๋‹ต๋ณ€์„ ๊ธฐ์ค€ ํ…์ŠคํŠธ๋กœ ์ธก์ •
  • ๋ฒค์น˜๋งˆํฌ ํ‰๊ท : 39.65 (์›๋ณธ 41.44, 95.7%) โ€” MMLU(์ƒ์„ฑํ˜•)ยทGSM8KยทARC-ChallengeยทWinograndeยทKMMLUยทHAE-RAE 6์ข… ํ‰๊ท , lm-evaluation-harness + vLLM, chat template ์—†๋Š” ์™„์„ฑํ˜• ํ”„๋กฌํ”„ํŠธ(๊ณผ์ œ๋ณ„ 0ยท5-shot, ํ‘œ ์ฐธ๊ณ )ยทgreedy, ๋ชจ๋“  ๋นŒ๋“œ๋ฅผ ๊ฐ™์€ ์„ค์ •์œผ๋กœ ์ธก์ •
  • ํ•œ๊ตญ์–ด ๋ฒค์น˜๋งˆํฌ: KMMLU 35.02 (์›๋ณธ 34.54, 101.4%) ยท HAE-RAE 34.10 (์›๋ณธ 37.03, 92.1%)
  • MMLU ๋ฐฉ์‹: lm-eval ์ƒ์„ฑํ˜• ๋ณ€ํ˜•(mmlu_generative) โ€” ๋ชจ๋ธ์ด ๋‹ต ๊ธ€์ž๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ฒซ ์ค„์ด ์ •ํ™•ํžˆ ์ผ์น˜ํ•ด์•ผ ์ •๋‹ต์œผ๋กœ ์ฑ„์ ํ•˜๋ฏ€๋กœ, ๋‹ค๋ฅธ ๋ฐฉ์‹(์˜ˆ: log-likelihood ์ฑ„์ )์œผ๋กœ ์žฐ MMLU ์ ์ˆ˜์™€ ์ง์ ‘ ๋น„๊ต ๋ถˆ๊ฐ€
  • ์ฃผ์˜: โš ๏ธ ์ด ์ •๋ฐ€๋„์—์„œ ํ’ˆ์งˆ ์ €ํ•˜๊ฐ€ ๋šœ๋ ทํ•จ (๋ฒค์น˜๋งˆํฌ ํ‰๊ท  ์›๋ณธ ๋Œ€๋น„ 95.7%) โ€” ํ’ˆ์งˆ์ด ์ค‘์š”ํ•˜๋ฉด 8๋น„ํŠธ(FP8ยทAWQ-8bit) ๋นŒ๋“œ ๊ถŒ์žฅ

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

  • ์‹คํ–‰ ์—”์ง„: 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) ๋ฏธ์ง€์› โ€” ๊ฐ€์ค‘์น˜ ์ „์šฉ FP4๋ผ FP4 ์ „์šฉ ํ…์„œ์ฝ”์–ด ๋ถˆํ•„์š” (GPU๋ณ„ ์ง€์› ์—ฌ๋ถ€๋Š” vLLM 0.32 ์ปค๋„ ์„ ํƒ ์ฝ”๋“œ ๊ธฐ์ค€, ์‹ค์ œ ์‹คํ–‰์€ B200์—์„œ๋งŒ ํ™•์ธ)
  • ๋ฉ”๋ชจ๋ฆฌ: ๊ฐ€์ค‘์น˜ 1.3 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-0.8B-NVFP4A16 --max-model-len 32768 โ€” OpenAI ํ˜ธํ™˜ API
  • Python: LLM(model="axteam/Qwen3.5-0.8B-NVFP4A16", max_model_len=32768).chat(...) โ€” ์ „์ฒด ์˜ˆ์‹œ๋Š” ์œ„ ์˜์–ด ๋ณธ๋ฌธ 'Usage (vLLM)' ์ ˆ ์ฐธ๊ณ 
  • thinking ๋ชจ๋“œ: ๊ธฐ๋ณธ ๊บผ์ง โ€” ์ผœ๋ ค๋ฉด chat_template_kwargs={"enable_thinking": True} ์ „๋‹ฌ(Python์€ llm.chat() ์ธ์ž, HTTP๋Š” ์š”์ฒญ ๋ณธ๋ฌธ์˜ "chat_template_kwargs": {"enable_thinking": true})
  • ์ด๋ฏธ์ง€ ์ž…๋ ฅ: ๋ฉ”์‹œ์ง€์— image_url ํ•ญ๋ชฉ ์‚ฌ์šฉ
  • ํ…์ŠคํŠธ๋งŒ ์‚ฌ์šฉํ•  ๋•Œ: --limit-mm-per-prompt '{"image": 0, "video": 0}' โ€” ๋น„์ „ ํƒ€์›Œ์šฉ ๋ฉ”๋ชจ๋ฆฌ ์˜ˆ์•ฝ์„ ์ƒ๋žตํ•ด ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ
  • KV ์บ์‹œ ์ ˆ๊ฐ(์„ ํƒ): vllm serve์— --kv-cache-dtype fp8 ์ถ”๊ฐ€ โ€” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ตฌ์กฐ๋ผ KV ์บ์‹œ๋Š” ํ’€ ์–ดํ…์…˜ 6๊ฐœ ์ธต์—๋งŒ ์žˆ๊ณ , ์„ ํ˜• ์–ดํ…์…˜(Gated DeltaNet) 18๊ฐœ ์ธต์˜ ์š”์ฒญ๋ณ„ ๊ณ ์ • ํฌ๊ธฐ ์ƒํƒœ๋Š” ์ด ์˜ต์…˜์œผ๋กœ ๋ฐ”๋€Œ์ง€ ์•Š์Œ โ†’ ํ’€ ์–ดํ…์…˜ KV ์บ์‹œ๋งŒ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์–ด ๊ธด ์ปจํ…์ŠคํŠธ์—์„œ ํšจ๊ณผ๊ฐ€ ํฌ๊ณ  ์งง์€ ์š”์ฒญ์ด ๋งŽ์„ ๋•Œ๋Š” ์ž‘์Œ (๊ฐ€์ค‘์น˜ ์–‘์žํ™”์™€ ๋ณ„๊ฐœ์ธ ์‹คํ–‰ ์˜ต์…˜)

์ฐธ๊ณ 

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

๋ผ์ด์„ ์Šค

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

Model tree for axteam/Qwen3.5-0.8B-NVFP4A16

Quantized
(403)
this model

Collection including axteam/Qwen3.5-0.8B-NVFP4A16