Qwen/Qwen3.5-122B-A10B
Mid-size Qwen3.5 multimodal MoE (122B total / 10B active) with gated delta networks, 256 experts, and 262K context
Qwen3.5 mid-tier MoE — fits on 4x H200 BF16 or 2x H200 FP8
Guide
Overview
Qwen3.5-122B-A10B is a mid-tier member of the Qwen3.5 family, sharing the gated delta networks MoE architecture with 122B total parameters and 10B activated per token (256 experts). It is multimodal (vision + text) and natively supports 262K context.
Prerequisites
- vLLM version: >= 0.17.0
- Hardware (BF16): 4x H200 or 8x H100
- Hardware (FP8): 2x H200 or 4x H100
- Hardware (Int4): single 80 GB GPU
Install vLLM
uv venv
source .venv/bin/activate
uv pip install -U vllm --torch-backend=auto
Launching the Server
BF16 on 4xH200 (TP4)
vllm serve Qwen/Qwen3.5-122B-A10B \
--tensor-parallel-size 4 \
--max-model-len 262144 \
--reasoning-parser qwen3
FP8 on 2xH200 (TP2)
vllm serve Qwen/Qwen3.5-122B-A10B-FP8 \
--tensor-parallel-size 2 \
--max-model-len 262144 \
--reasoning-parser qwen3
Throughput-focused (text-only, EP)
vllm serve Qwen/Qwen3.5-122B-A10B-FP8 \
-dp 4 --enable-expert-parallel \
--language-model-only \
--reasoning-parser qwen3 \
--enable-prefix-caching
MTP speculative decoding
vllm serve Qwen/Qwen3.5-122B-A10B-FP8 \
--tensor-parallel-size 2 \
--speculative-config '{"method": "mtp", "num_speculative_tokens": 1}' \
--reasoning-parser qwen3
AMD (MI325X / MI355X, single GPU, FP8)
The FP8 checkpoint fits one MI300X-class GPU. Three settings matter on ROCm and none is on by
default: VLLM_ROCM_USE_AITER=1 switches the MoE to the AITER FP8 kernels,
--attention-backend ROCM_AITER_FA keeps decode flat across context (the auto-selected
ROCM_ATTN decays with prompt length on this hybrid GDN model), and --kv-cache-dtype fp8
keeps MTP flat across context too.
VLLM_ROCM_USE_AITER=1 vllm serve Qwen/Qwen3.5-122B-A10B-FP8 \
--attention-backend ROCM_AITER_FA \
--kv-cache-dtype fp8 --max-num-seqs 64 \
--reasoning-parser qwen3
--max-num-seqs 64 because the default exceeds the Mamba block budget on 192 GB. MTP
(--speculative-config '{"method":"mtp","num_speculative_tokens":1}') works with the same
flags. Single-stream decode (tokens/s at ~200 / ~2k / ~12k / ~30k prompt tokens, 128 output
tokens, prefix caching off), measured 2026-10-07 on vllm/vllm-openai-rocm:v0.31.0:
| MI325X | MI355X | |
|---|---|---|
AITER + ROCM_AITER_FA | 128 / 127 / 127 / 127 | 143 / 143 / 143 / 143 |
| + MTP | 184 / 169 / 172 / 164 | 204 / 193 / 195 / 190 |
This recipe used ROCM_AITER_UNIFIED_ATTN before v0.31.0. Avoid it on MI350X/MI355X with
v0.31.0: there it runs AITER's new gfx950 Gluon kernel, which decodes at 110 tokens/s and,
with MTP, falls from 200 to 72 tokens/s between ~200 and ~30k prompt tokens
(vllm-project/vllm#60408). MI325X is
unaffected (126 tokens/s; 182 to 162 with MTP).
Client Usage
from openai import OpenAI
client = OpenAI(api_key="EMPTY", base_url="http://localhost:8000/v1")
resp = client.chat.completions.create(
model="Qwen/Qwen3.5-122B-A10B",
messages=[{"role": "user", "content": "Summarize the gated delta networks paper."}],
max_tokens=512,
)
print(resp.choices[0].message.content)
Troubleshooting
- CUDA graph / Mamba cache size error: reduce
--max-cudagraph-capture-size(default 512). See vLLM PR #34571. - Disable reasoning: add
--default-chat-template-kwargs '{"enable_thinking": false}'. - Prefix Caching (Mamba): currently experimental in "align" mode.