Files
vLLM/recipes/models/Qwen/Qwen3-32B.yaml
T
2026-10-17 09:14:36 +00:00

250 lines
7.3 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
meta:
title: "Qwen3-32B"
slug: "qwen3-32b"
provider: "Qwen"
description: "Qwen3 32B dense model with hybrid thinking/non-thinking modes — verified on TPU v6e (Trillium)."
date_added: 2025-10-15
date_updated: 2026-09-10
tasks:
- text
performance_headline: "Verified on TPU v6e (Trillium) and v7 (Ironwood) with BF16"
related_recipes:
- "Qwen/Qwen3-4B"
hardware:
trillium: verified
ironwood: verified
arc_pro_b60: verified
arc_pro_b70: verified
model:
model_id: "Qwen/Qwen3-32B"
min_vllm_version: "0.8.5"
architecture: dense
parameter_count: "32B"
active_parameters: "32B"
context_length: 40960
base_args: []
base_env: {}
features:
tool_calling:
description: "Enable automatic tool choice with the Hermes parser"
args:
- "--enable-auto-tool-choice"
- "--tool-call-parser"
- "hermes"
reasoning:
description: "Enable Qwen3 thinking mode (chain-of-thought) with the Qwen3 reasoning parser"
args:
- "--reasoning-parser"
- "qwen3"
long_context:
description: "YaRN RoPE scaling to the model card's validated 131,072-token context. Static YaRN holds the scaling factor constant regardless of input length, so leave this off unless you actually serve long prompts — it can cost quality below 32K."
args:
- "--hf-overrides"
- '{"max_position_embeddings":131072,"rope_parameters":{"rope_type":"yarn","factor":4.0,"original_max_position_embeddings":32768}}'
- "--max-model-len"
- "131072"
spec_decoding:
description: "Eagle3 speculative decoding with externally trained draft model; the served checkpoint is unchanged."
args:
- "--speculative-config"
- '{"model": "RedHatAI/Qwen3-32B-speculator.eagle3", "num_speculative_tokens": 3, "method": "eagle3"}'
opt_in_features:
- spec_decoding
- long_context
variants:
default:
precision: bf16
vram_minimum_gb: 77
description: "Full precision BF16 — TPU v6e 2x2 (4 chips, TP=4) or a single 80GB+ GPU"
fp8:
model_id: "Qwen/Qwen3-32B-FP8"
precision: fp8
vram_minimum_gb: 39
description: "Qwen official FP8 checkpoint — single 40 GB GPU"
awq:
model_id: "Qwen/Qwen3-32B-AWQ"
precision: int4
vram_minimum_gb: 20
description: "AWQ 4-bit quantized weights — fits on a single 24 GB GPU"
extra_args:
- "--quantization"
- "awq"
redhat_fp8:
model_id: "RedHatAI/Qwen3-32B-FP8-dynamic"
precision: fp8
label: "FP8 Dynamic (RedHat)"
vram_minimum_gb: 39
description: "RedHatAI FP8 (E4M3) with dynamic per-token activation quantization"
extra_args:
- "--kv-cache-dtype"
- "fp8"
redhat_fp8_block:
model_id: "RedHatAI/Qwen3-32B-FP8-block"
precision: fp8
label: "FP8 Block (RedHat)"
vram_minimum_gb: 39
description: "RedHatAI FP8 block quantization"
extra_args:
- "--kv-cache-dtype"
- "fp8"
nvfp4:
model_id: "RedHatAI/Qwen3-32B-NVFP4"
precision: nvfp4
vram_minimum_gb: 22
description: "RedHatAI NVFP4 quantization"
redhat_nvfp4:
model_id: "RedHatAI/Qwen3-32B-NVFP4A16"
precision: nvfp4
label: "NVFP4 A16 (RedHat)"
vram_minimum_gb: 22
description: "RedHatAI NVFP4 with BF16 activations"
compatible_strategies:
- single_node_tp
- multi_node_tp
kv_offload_support:
offloading_cpu: verified
offloading_fs: verified
hardware_overrides:
xpu:
extra_args:
- "--gpu-memory-utilization"
- "0.90"
strategy_overrides: {}
guide: |
## Overview
Qwen3-32B is the flagship dense model in the Qwen3 series, with hybrid thinking / non-thinking modes. BF16 is the training precision and gives the best accuracy.
Toggle thinking mode per request with `enable_thinking` in `chat_template_kwargs`, or set the **Reasoning** feature to add the Qwen3 reasoning parser so `<think>` content is split into a separate field.
## Prerequisites
### NVIDIA
```bash
uv venv
source .venv/bin/activate
uv pip install -U vllm --torch-backend auto
```
### TPU (Trillium / v6e)
Use the official vLLM TPU image. The 32B model is served on a `v6e-4` slice (`--topology 2x2`, 4 chips, TP=4).
```bash
export HF_HOME=/dev/shm
export HF_TOKEN=<your HF token>
```
### Intel XPU (B60 / B70)
Use the official vLLM XPU image.
```bash
docker pull vllm/vllm-openai-xpu:latest
```
## Deployment Configurations
### TPU v6e (Trillium, 2x2 slice, TP=4)
Verified end-to-end on a 4-chip v6e slice.
```bash
export HF_HOME=/dev/shm
export HF_TOKEN=<your HF token>
export TP=4
export MAX_MODEL_LEN=4096
vllm serve Qwen/Qwen3-32B \
--seed 42 \
--gpu-memory-utilization 0.98 \
--max-num-batched-tokens 2048 \
--max-num-seqs 256 \
--tensor-parallel-size $TP \
--max-model-len $MAX_MODEL_LEN
```
### TPU v7 (Ironwood, single host, TP=2)
Verified end-to-end on a single Ironwood host (`tpu7x-standard-1t`, topology `1x1x1`). Served via the OpenAI API server entrypoint.
```bash
export HF_HOME=/data
export HUGGING_FACE_HUB_TOKEN=<your HF token>
export LAYOUT_Q_PROJ_AS_NDH=1
export USE_BATCHED_RPA_KERNEL=1
vllm serve Qwen/Qwen3-32B \
--host 0.0.0.0 \
--port 8000 \
--seed 42 \
--tensor-parallel-size 2 \
--data-parallel-size 1 \
--max-model-len 9216 \
--max-num-batched-tokens 4096 \
--max-num-seqs 135 \
--gpu-memory-utilization 0.98 \
--block-size 256 \
--kv-cache-dtype fp8 \
--no-enable-prefix-caching \
--async-scheduling
```
> Ironwood support ships in the nightly TPU image (e.g. `vllm/vllm-tpu:nightly-20260330-2f76400-8c0b626`).
### Single node (BF16, TP=2)
```bash
vllm serve Qwen/Qwen3-32B \
--host 0.0.0.0 \
--port 8000 \
--tensor-parallel-size 2
```
### Intel XPU (B60, B70)
Validated on 4× Intel Arc Pro B60 / B70 (B60 24 GB, B70 32 GB per card) with the
official vLLM XPU image `vllm/vllm-openai-xpu:latest`.
```bash
docker run --device /dev/dri \
-v /dev/dri/by-path:/dev/dri/by-path --shm-size=16g \
--privileged --ipc=host -p 8000:8000 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
vllm/vllm-openai-xpu:latest \
Qwen/Qwen3-32B \
--gpu-memory-utilization 0.90 \
--tensor-parallel-size 4 \
--max-model-len 8192
```
## Configuration Tips
- `--max-model-len 4096` keeps memory in check on a 4-chip v6e slice; native context is 40K — raise it if you have headroom.
- vLLM uses 90% of device memory by default; the TPU recipe pushes `--gpu-memory-utilization 0.98` to maximize KV cache.
- `--max-num-batched-tokens` and `--max-num-seqs` tune batch throughput vs latency.
- For thinking mode Qwen recommends `temperature=0.6, top_p=0.95, top_k=20`; for non-thinking, `temperature=0.7, top_p=0.8`.
## Benchmarking
Launch the server with `--no-enable-prefix-caching` for consistent measurements.
```bash
vllm bench serve \
--host 0.0.0.0 \
--port 8000 \
--model Qwen/Qwen3-32B \
--dataset-name random \
--random-input-len 1024 \
--random-output-len 1024 \
--num-prompts 128
```
## References
- [Model card](https://huggingface.co/Qwen/Qwen3-32B)
- [Qwen3 on Trillium (v6e)](https://github.com/AI-Hypercomputer/tpu-recipes/tree/main/inference/trillium/vLLM/Qwen3)
- [Qwen3-32B on Ironwood (v7)](https://github.com/AI-Hypercomputer/tpu-recipes/tree/main/inference/ironwood/vLLM/Qwen3-32B)