This document is relevant for: Trn2, Trn3
Qwen3-VL (Dense) Model Recipe#
Introduction#
Qwen3-VL is a multimodal language model developed by the Qwen team. It supports image-text understanding, visual reasoning, OCR, document analysis, and multi-image comparison. The -Instruct variant is instruction-tuned for chat and task-following, while the -Thinking variant adds extended chain-of-thought reasoning.
Qwen3-VL is now supported for inference serving with vLLM Neuron Plugin using the Neuron SDK on AWS Trainium2 (trn2) and Trainium3 (trn3) hardware.
Compatible model checkpoints:
Model |
HuggingFace |
Hardware |
Quantization |
|---|---|---|---|
Qwen3-VL-32B-Instruct |
Trn2, Trn3 |
BF16, MXFP8 (Trn3 only) |
|
Qwen3-VL-32B-Thinking |
Trn2, Trn3 |
BF16, MXFP8 (Trn3 only) |
|
Qwen3-VL-8B-Instruct |
Trn2, Trn3 |
BF16, MXFP8 (Trn3 only) |
|
Qwen3-VL-8B-Thinking |
Trn2, Trn3 |
BF16, MXFP8 (Trn3 only) |
The
-Thinkingcheckpoint shares the same architecture and serving path as-Instructand runs with the identical configuration. The accuracy numbers below were measured on the-Thinkingvariant.
Qwen3-VL is not published with MXFP8 weights, follow the tutorial to quantize the BF16 checkpoint offline.
Features#
Per-model feature availability for Qwen3-VL. See the features guide for configuration details.
Category |
Feature |
Status |
|---|---|---|
Multimodal Inputs |
Text |
✅ |
Single image + text |
✅ |
|
Multi-image + text |
✅ |
|
Video + text |
✅ |
|
Quantization |
BF16 |
✅ |
MXFP8 (Trn3 only) |
✅ |
|
Parallelism |
Tensor parallelism (TP) |
✅ |
Vision encoder parallelism |
✅ |
|
Pipeline parallelism (PP) |
❌ |
|
Context parallelism (CP) |
❌ |
|
Performance |
On-device sampling (greedy, top-k, top-p) |
✅ |
Disaggregated encoder (EPD) (1E1PD / xEyPD) |
✅ |
|
Segmented prefill |
❌ |
|
Chunked prefill (mixed batching) |
❌ |
|
Compilation |
torch.compile (XLA backend) |
✅ |
CPU mode (testing) |
✅ |
Status legend:
✅ Supported: integrated and tested for Qwen3-VL
❌ Not supported: may be considered for future releases
Tensor parallelism is recommended at tensor_parallel_size=16 on a trn2.48xlarge (16 NeuronCores), matching the configuration used throughout the tutorial.
Multi-image input is validated up to 30 images at 512x512 resolution.
Vision encoder parallelism shards the encoder by the num_blocks dimension of the block-packed images (unlike text DP, which shards by request batch), configurable via vision_neuron_config. See vision encoder parallelism for details.
Known limitations#
Segmented prefill and prefix caching are not supported yet. The validated workload (30 images at 512x512, 8K sequence length) is served without segmented prefill enabled. Prefix caching requires segmented prefill, so it is unavailable here as well.
Accuracy Evaluation#
Benchmark: POPE (Polling-based Object Probing Evaluation): 5,000 binary Yes/No questions about object presence in images across three difficulty subsets: popular, adversarial, random. Results are from the open-source VLMEvalKit harness.
Metric |
32B-Thinking, Neuron Trn2 BF16 |
|---|---|
Overall F1 |
85.94 |
Adversarial F1 |
84.86 |
Popular F1 |
85.63 |
Random F1 |
87.38 |
Reproduce: Serve the -Thinking checkpoint following the tutorial, then run VLMEvalKit’s run.py against the running server over its OpenAI-compatible endpoint:
git clone https://github.com/open-compass/VLMEvalKit.git
cd VLMEvalKit && git checkout fd3884b && pip install . && cd ..
python VLMEvalKit/run.py --data POPE --model Qwen3-VL-32B-Thinking \
--base-url http://localhost:8000/v1 --max-tokens 256
Tutorials#
This document is relevant for: Trn2, Trn3