Views
No views yet
| Base Model | Qwen3-VL-30B-A3B-Thinking (MoE: 31B total, ~3B active) |
| Quantization | NVFP4 (W4A4) — weights and activations |
| VRAM | ~16GB (vs ~62GB BF16, ~31GB FP8) |
| What's quantized | Text/language backbone only |
| What's NOT quantized | Vision encoder, multi-modal projector, LM head, MoE gates (all remain BF16) |
1vllm serve OptimizeLLM/Qwen3-VL-30B-A3B-Thinking-NVFP4 \
2 --tensor-parallel-size 1 \
3 --max-model-len 8192 \
4 --reasoning-parser-plugin qwen3_vl_reasoning_parser.py \
5 --reasoning-parser qwen3_vl \
6 --kv-cache-dtype fp8qwen3_vl_reasoning_parser.py is a custom vLLM reasoning parser plugin for this model. It extends vLLM's DeepSeekR1ReasoningParser and fixes an edge case where the model's answer can end up in reasoning_content instead of content when thinking is disabled.--reasoning-parser-plugin. Without it, you may see intermittent responses where content is null and the answer is in reasoning_content.1from openai import OpenAI
2import base64
3
4client = OpenAI(base_url="http://localhost:8000/v1", api_key="unused")
5
6with open("photo.jpg", "rb") as f:
7 img_b64 = base64.b64encode(f.read()).decode()
8
9response = client.chat.completions.create(
10 model="OptimizeLLM/Qwen3-VL-30B-A3B-Thinking-NVFP4",
11 messages=[{
12 "role": "user",
13 "content": [
14 {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img_b64}"}},
15 {"type": "text", "text": "What do you see in this image?"},
16 ],
17 }],
18 max_tokens=2048,
19)
20print(response.choices[0].message.content)/think — Enable detailed reasoning (complex visual analysis, comparisons)/no_think — Disable thinking (fast perception, OCR, simple descriptions)"Describe this image. /no_think"quantize_vl.py. Notable details:VLM split (image+text pairs) instead of the LLM split (text-only). The text decoder sees different activation distributions when processing image-conditioned inputs, so text-only calibration is suboptimal for VL models.mallopt(M_TRIM_THRESHOLD, 0), glibc arena bloat accumulates about 1.4GB per subgraph during calibration (~68GB phantom RSS across 49 subgraphs), enough to OOM a 128GB machine. The script includes this fix. Zero impact on quantization quality.| GPU | VRAM | Notes |
|---|---|---|
| RTX PRO 6000 (96GB) | ~16GB model + headroom | Recommended — full Blackwell NVFP4 acceleration |
| RTX 5090 / 4090 (24GB) | ~16GB model, ~8GB headroom | Fits, but limited context/batch |
| A100 / H100 (80GB) | ~16GB model + headroom | Works, but NVFP4 acceleration requires SM100+ |
Note: Full NVFP4 acceleration (W4A4 compute) requires Blackwell architecture (SM100+). On pre-Blackwell GPUs, vLLM uses weight-only quantization — still a memory savings, but without the activation quantization speedup.