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

638 lines
21 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.6-27B"
slug: "Qwen3.6-27b"
provider: "Qwen"
description: "Qwen3.6 dense multimodal model (27B) with gated delta networks hybrid attention, MTP, and 262K context"
date_added: 2026-04-22
date_updated: 2026-10-12
tasks:
- multimodal
- text
performance_headline: "Qwen3.6 flagship dense — single-GPU FP8, 2x GPU BF16, 2-4x Intel Arc Pro B60/B70 BF16, Ascend 910C TP2+DP8, or Ascend 950DT TP1+DP8"
related_recipes:
- "Qwen/Qwen3.6-35B-A3B"
hardware:
dgx_spark_gb10: verified
rtx_pro_6000: verified
dgx_station_gb300: verified
rtx_5090: verified
ascend_950dt: verified
ascend_910c: verified
arc_pro_b60: verified
arc_pro_b70: verified
mi300x: verified
model:
model_id: "Qwen/Qwen3.6-27B"
min_vllm_version: "0.17.0"
default_frontend: rust
architecture: dense
parameter_count: "27B"
active_parameters: "27B"
context_length: 262144
docker_image:
# The AMD numbers in the guide were measured on this tag (2026-10-12).
amd: "vllm/vllm-openai-rocm:v0.31.0"
base_args:
- "--trust-remote-code"
base_env: {}
features:
tool_calling:
description: "Enable automatic tool choice with Qwen3 Coder parser"
args:
- "--enable-auto-tool-choice"
- "--tool-call-parser"
- "qwen3_coder"
reasoning:
description: "Enable chain-of-thought reasoning with Qwen3 parser"
args:
- "--reasoning-parser"
- "qwen3"
spec_decoding:
description: "Speculative decoding — pick native MTP or the Ascend MTP mode."
default_mode: mtp
modes:
mtp:
label: "MTP"
description: "Native MTP head, 3 draft tokens."
variants: [default, fp8, nvfp4, redhat_fp8]
args:
- "--speculative-config"
- '{"method":"mtp","num_speculative_tokens":3}'
hardware_overrides:
# GB10 is decode-bound at low concurrency, so a deeper draft pays off.
dgx_spark_gb10:
args:
- "--speculative-config"
- '{"method":"mtp","num_speculative_tokens":5}'
qwen3_5_mtp:
label: "MTP (Ascend)"
description: "MTP mode documented for vLLM Ascend."
variants: [ascend_w8a8_mxfp8, ascend_w8a8]
args:
- "--speculative-config"
- '{"method":"qwen3_5_mtp","num_speculative_tokens":3,"enforce_eager":true}'
text_only:
description: "Skip loading the vision encoder for text-only workloads — frees VRAM for KV cache. Mutually exclusive with encoder_parallel."
args:
- "--language-model-only"
encoder_parallel:
description: "Run the vision encoder in data-parallel mode — avoids TP comm overhead on the small encoder. Mutually exclusive with text_only."
args:
- "--mm-encoder-tp-mode"
- "data"
long_context:
description: "YaRN RoPE scaling past the native 262,144-token window to ~1,010,000 tokens. Static YaRN holds the scaling factor constant regardless of input length, so leave this off unless you actually serve long prompts; for ~524K, halve the factor to 2.0."
args:
- "--hf-overrides"
- '{"text_config": {"rope_parameters": {"mrope_interleaved": true, "mrope_section": [11, 11, 10], "rope_type": "yarn", "rope_theta": 10000000, "partial_rotary_factor": 0.25, "factor": 4.0, "original_max_position_embeddings": 262144}}}'
- "--max-model-len"
- "1010000"
env:
VLLM_ALLOW_LONG_MAX_MODEL_LEN: "1"
opt_in_features:
- spec_decoding
- text_only
- long_context
variants:
default:
precision: bf16
vram_minimum_gb: 65
description: "Full precision BF16 — fits on 1x H200, 2x H100, 4x Intel Arc Pro B60, 2x Intel Arc Pro B70, or an Ascend A3 node (TP2+DP8)"
tp:
ascend_910c: 2
hardware_overrides:
rtx_pro_6000:
extra_args:
- "--max-num-seqs"
- "8"
ascend_910c:
docker_image: "swr.cn-southwest-2.myhuaweicloud.com/base_image/ascend-ci/vllm-ascend:v0.23.0-a3"
extra_args:
- "--data-parallel-size"
- "8"
- "--served-model-name"
- "qwen3.6"
- "--max-num-seqs"
- "32"
- "--max-model-len"
- "133000"
- "--max-num-batched-tokens"
- "16384"
- "--gpu-memory-utilization"
- "0.90"
- "--no-enable-prefix-caching"
- "--compilation-config"
- '{"cudagraph_mode":"FULL_DECODE_ONLY"}'
- "--async-scheduling"
extra_env:
VLLM_USE_MODELSCOPE: "True"
PYTORCH_NPU_ALLOC_CONF: "expandable_segments:True"
HCCL_BUFFSIZE: "512"
OMP_PROC_BIND: "false"
OMP_NUM_THREADS: "1"
TASK_QUEUE_ENABLE: "1"
fp8:
model_id: "Qwen/Qwen3.6-27B-FP8"
precision: fp8
vram_minimum_gb: 33
description: "Qwen official FP8 checkpoint — single 40 GB GPU"
extra_args:
- "--max-num-seqs"
- "512"
hardware_overrides:
dgx_spark_gb10:
extra_env:
VLLM_USE_DEEP_GEMM: "0"
rtx_pro_6000:
extra_env:
VLLM_USE_DEEP_GEMM: "0"
nvfp4:
model_id: "nvidia/Qwen3.6-27B-NVFP4"
precision: nvfp4
vram_minimum_gb: 27
tp: 1
# SM120 GPUs only reach FlashInfer's XQA decode kernel from 0.28.0.
min_vllm_version: "0.28.0"
nightly_required: true
description: "NVIDIA ModelOpt NVFP4 checkpoint — MLP linears quantized to NVFP4, attention linears and KV cache in FP8. Single Blackwell GPU, including DGX Spark."
hardware_overrides:
dgx_station_gb300:
extra_args:
- "--kv-cache-dtype"
- "fp8"
- "--attention-backend"
- "flashinfer"
- "--gpu-memory-utilization"
- "0.92"
- "--max-model-len"
- "262144"
- "--max-num-batched-tokens"
- "8192"
- "--enable-chunked-prefill"
- "--enable-prefix-caching"
- "--load-format"
- "fastsafetensors"
- "--async-scheduling"
dgx_spark_gb10:
extra_args:
- "--kv-cache-dtype"
- "fp8"
- "--attention-backend"
- "flashinfer"
# GB10 shares 128 GB with the CPU, so leave half the pool to the host.
- "--gpu-memory-utilization"
- "0.5"
- "--max-model-len"
- "262144"
- "--max-num-seqs"
- "8"
- "--max-num-batched-tokens"
- "8192"
- "--enable-chunked-prefill"
- "--enable-prefix-caching"
- "--load-format"
- "fastsafetensors"
- "--async-scheduling"
rtx_pro_6000:
extra_args:
- "--kv-cache-dtype"
- "fp8"
- "--attention-backend"
- "flashinfer"
- "--gpu-memory-utilization"
- "0.9"
- "--max-model-len"
- "262144"
- "--max-num-seqs"
- "8"
- "--max-num-batched-tokens"
- "8192"
- "--enable-chunked-prefill"
- "--enable-prefix-caching"
- "--load-format"
- "fastsafetensors"
- "--async-scheduling"
rtx_5090:
extra_args:
- "--kv-cache-dtype"
- "fp8"
- "--attention-backend"
- "FLASHINFER"
- "--attention-config"
- '{"use_trtllm_attention": true}'
- "--gpu-memory-utilization"
- "0.93"
# 32 GB leaves ~9 GB for KV cache after the NVFP4 weights.
- "--max-model-len"
- "36608"
- "--max-num-seqs"
- "8"
- "--max-num-batched-tokens"
- "4096"
- "--gpu-memory-utilization"
- "0.95"
- "--enable-chunked-prefill"
- "--enable-prefix-caching"
- "--async-scheduling"
- "--skip-mm-profiling"
extra_env:
VLLM_HAS_FLASHINFER_CUBIN: "1"
redhat_fp8:
model_id: "RedHatAI/Qwen3.6-27B-FP8"
precision: fp8
label: "FP8 (RedHat)"
vram_minimum_gb: 33
description: "RedHatAI FP8 dynamic quantization"
ascend_w8a8_mxfp8:
model_id: "Eco-Tech/Qwen3.6-27B-w8a8-mxfp8"
precision: mxfp8
label: "W8A8 (Ascend)"
vram_minimum_gb: 34
supported_hardware: [ascend_950dt]
tp: 1
min_vllm_version: "0.23.0"
default_modes:
spec_decoding: qwen3_5_mtp
extra_args:
- "--distributed-executor-backend"
- "mp"
- "--data-parallel-size"
- "8"
- "--quantization"
- "ascend"
- "--served-model-name"
- "qwen3.6"
- "--max-num-seqs"
- "32"
- "--max-model-len"
- "262144"
- "--max-num-batched-tokens"
- "16384"
- "--gpu-memory-utilization"
- "0.90"
- "--no-enable-prefix-caching"
- "--compilation-config"
- '{"cudagraph_mode":"FULL_DECODE_ONLY"}'
- "--additional-config"
- '{"enable_cpu_binding":true}'
extra_env:
VLLM_USE_MODELSCOPE: "True"
PYTORCH_NPU_ALLOC_CONF: "expandable_segments:True"
HCCL_BUFFSIZE: "512"
OMP_PROC_BIND: "false"
OMP_NUM_THREADS: "1"
TASK_QUEUE_ENABLE: "1"
hardware_overrides:
ascend_950dt:
docker_image: "quay.io/ascend/vllm-ascend:v0.23.0-a5"
ascend_w8a8:
model_id: "Eco-Tech/Qwen3.6-27B-w8a8"
precision: int8
label: "W8A8 (Ascend A3)"
vram_minimum_gb: 33
supported_hardware: [ascend_910c]
tp: 2
min_vllm_version: "0.23.0"
default_modes:
spec_decoding: qwen3_5_mtp
extra_args:
- "--data-parallel-size"
- "8"
- "--quantization"
- "ascend"
- "--served-model-name"
- "qwen3.6"
- "--max-num-seqs"
- "32"
- "--max-model-len"
- "133000"
- "--max-num-batched-tokens"
- "16384"
- "--gpu-memory-utilization"
- "0.90"
- "--no-enable-prefix-caching"
- "--compilation-config"
- '{"cudagraph_mode":"FULL_DECODE_ONLY"}'
- "--additional-config"
- '{"enable_cpu_binding":true}'
- "--async-scheduling"
extra_env:
VLLM_USE_MODELSCOPE: "True"
PYTORCH_NPU_ALLOC_CONF: "expandable_segments:True"
HCCL_BUFFSIZE: "512"
OMP_PROC_BIND: "false"
OMP_NUM_THREADS: "1"
TASK_QUEUE_ENABLE: "1"
hardware_overrides:
ascend_910c:
docker_image: "swr.cn-southwest-2.myhuaweicloud.com/base_image/ascend-ci/vllm-ascend:v0.23.0-a3"
description: "ModelSlim INT8 W8A8 checkpoint for one Atlas 800 A3 node (16x Ascend 910C), using TP2+DP8. Requires --quantization ascend."
compatible_strategies:
- single_node_tp
- multi_node_tp
hardware_overrides:
amd:
# AITER is opt-in on ROCm and the image does not set it. Without these two the
# server auto-selects ROCM_ATTN, which cannot use its native kernel for this
# model (head size 256, 784-token hybrid blocks) and falls back to a Triton
# path whose single-stream decode drops ~5x from ~200 to ~32k prompt tokens.
# ROCM_AITER_FA stays flat across context on MI300X and is also the backend
# #1082 moved to for gfx950 on v0.31.0. Verified 2026-10-12 on one MI300X
# (see the AMD section of the guide).
extra_args:
- "--attention-backend"
- "ROCM_AITER_FA"
extra_env:
VLLM_ROCM_USE_AITER: "1"
xpu:
extra_args:
- "--enforce-eager"
strategy_overrides: {}
guide: |
## Overview
[Qwen3.6-27B](https://huggingface.co/Qwen/Qwen3.6-27B) is the flagship dense
model of the Qwen3.6 family. It uses the same gated delta networks hybrid
attention as its MoE siblings, supports vision+text input, and natively serves
262K context. MTP (multi-token prediction) is supported out of the box for
low-latency decoding.
## Prerequisites
- **vLLM version:** >= 0.17.0
- **NVFP4 vLLM version:** >= 0.28.0 (currently nightly). 0.24.0 loads the
checkpoint, but FlashInfer only selects its XQA decode kernel on SM120
GPUs from 0.28.0.
- **Hardware (BF16):** 1x H200, 2x H100, 4x Intel Arc Pro B60, 2x Intel Arc Pro B70
- **Hardware (FP8):** single 40 GB GPU (H100/H200/L40S)
- **Hardware (Int4):** single 24 GB GPU
- **Hardware (NVFP4):** single NVIDIA Blackwell GPU (B200/B300/GB10 DGX Spark)
- **Hardware (AMD):** 1x MI300X (BF16 fits one 192 GB GPU)
### Install vLLM
```bash
uv venv
source .venv/bin/activate
uv pip install -U vllm --torch-backend=auto
```
### Docker
```bash
docker pull vllm/vllm-openai-xpu:latest # Intel XPU (B60 / B70)
```
## Launching the Server
### Single-GPU FP8
```bash
vllm serve Qwen/Qwen3.6-27B-FP8 \
--max-model-len 262144 \
--reasoning-parser qwen3
```
### BF16 on 2xH100 (TP2)
```bash
vllm serve Qwen/Qwen3.6-27B \
--tensor-parallel-size 2 \
--max-model-len 262144 \
--reasoning-parser qwen3
```
### MTP speculative decoding
```bash
vllm serve Qwen/Qwen3.6-27B-FP8 \
--speculative-config '{"method": "mtp", "num_speculative_tokens": 1}' \
--reasoning-parser qwen3
```
### Text-only (skip vision encoder)
```bash
vllm serve Qwen/Qwen3.6-27B-FP8 \
--language-model-only \
--reasoning-parser qwen3 \
--enable-prefix-caching
```
### NVFP4 on Blackwell
The [`nvidia/Qwen3.6-27B-NVFP4`](https://huggingface.co/nvidia/Qwen3.6-27B-NVFP4)
checkpoint is NVIDIA's ModelOpt re-quantization: MLP linears drop to NVFP4
(W4A16) while the attention linears and KV cache stay FP8, so the ~22 GB
weights fit a single Blackwell GPU. vLLM auto-detects the ModelOpt
quantization from the checkpoint, so no `--quantization` flag is needed, but
it does need vLLM 0.28.0+ (currently nightly) for FlashInfer's XQA decode path
on SM120. NVIDIA reports near-lossless accuracy versus the FP8 baseline.
Select the NVFP4 variant in the command builder above and switch the hardware
pill for the validated single-node launch on DGX Spark (GB10), DGX Station
(GB300), RTX PRO 6000 or RTX 5090. Memory utilization, context length, batch
size, attention backend and MTP depth all differ per box and are encoded per
hardware, so the generated command is the tested one.
#### **2× DGX Spark (TP2)**
Two Sparks joined over ConnectX is the one layout the builder can't render, so
it is spelled out here. Download the checkpoint on all nodes. Start the worker
node first and then the head node — the head coordinates the others, so they
need to be ready to connect when it comes up.
```bash
# COMMON variables example values — same on all nodes
export HEAD_IP="<node1-connectx-ip>" # The ConnectX IP of Node1 (Head Node)
export ETH_IF="enp1s0f1np1" # CX7 ethernet interface which is UP
export IB_IF="rocep1s0f1,roceP2p1s0f1" # BOTH matching RoCE interfaces
export MASTER_PORT=29501 # Free port on the Head Node
export CONTAINER_NAME=vllm_node
export IMAGE="vllm/vllm-openai:nightly"
```
```bash
# Head Node
docker run --privileged --ulimit nofile=1048576:1048576 --ipc=host \
--gpus all --rm --network host --name "$CONTAINER_NAME" --entrypoint="" \
-e MN_IF_NAME="$ETH_IF" \
-e UCX_NET_DEVICES="$ETH_IF" \
-e NCCL_SOCKET_IFNAME="$ETH_IF" \
-e NCCL_IB_HCA="$IB_IF" \
-e NCCL_IB_DISABLE=0 \
-e OMPI_MCA_btl_tcp_if_include="$ETH_IF" \
-e GLOO_SOCKET_IFNAME="$ETH_IF" \
-e TP_SOCKET_IFNAME="$ETH_IF" \
-e NCCL_IGNORE_CPU_AFFINITY=1 \
-e VLLM_FLOAT32_MATMUL_PRECISION=high \
-e HEAD_IP="$HEAD_IP" \
-e MASTER_PORT="$MASTER_PORT" \
-v "$HOME/.cache/huggingface:/root/.cache/huggingface" \
"$IMAGE" vllm serve nvidia/Qwen3.6-27B-NVFP4 \
--host 0.0.0.0 \
--port 8000 \
--trust-remote-code \
--kv-cache-dtype fp8 \
--attention-backend flashinfer \
--gpu-memory-utilization 0.5 \
--max-model-len 262144 \
--max-num-seqs 8 \
--max-num-batched-tokens 8192 \
--enable-chunked-prefill \
--async-scheduling \
--enable-prefix-caching \
--speculative-config '{"method":"mtp","num_speculative_tokens":5,"draft_tensor_parallel_size":2}' \
--load-format fastsafetensors \
--reasoning-parser qwen3 \
--tool-call-parser qwen3_coder \
--enable-auto-tool-choice \
--tensor-parallel-size 2 \
--nnodes 2 \
--node-rank 0 \
--master-addr "$HEAD_IP" \
--master-port "$MASTER_PORT"
# Worker node
docker run --privileged --ulimit nofile=1048576:1048576 --ipc=host \
--gpus all --rm --network host --name "$CONTAINER_NAME" --entrypoint="" \
-e MN_IF_NAME="$ETH_IF" \
-e UCX_NET_DEVICES="$ETH_IF" \
-e NCCL_SOCKET_IFNAME="$ETH_IF" \
-e NCCL_IB_HCA="$IB_IF" \
-e NCCL_IB_DISABLE=0 \
-e OMPI_MCA_btl_tcp_if_include="$ETH_IF" \
-e GLOO_SOCKET_IFNAME="$ETH_IF" \
-e TP_SOCKET_IFNAME="$ETH_IF" \
-e NCCL_IGNORE_CPU_AFFINITY=1 \
-e VLLM_FLOAT32_MATMUL_PRECISION=high \
-e HEAD_IP="$HEAD_IP" \
-e MASTER_PORT="$MASTER_PORT" \
-v "$HOME/.cache/huggingface:/root/.cache/huggingface" \
"$IMAGE" vllm serve nvidia/Qwen3.6-27B-NVFP4 \
--host 0.0.0.0 \
--port 8000 \
--trust-remote-code \
--kv-cache-dtype fp8 \
--attention-backend flashinfer \
--gpu-memory-utilization 0.5 \
--max-model-len 262144 \
--max-num-seqs 8 \
--max-num-batched-tokens 8192 \
--enable-chunked-prefill \
--async-scheduling \
--enable-prefix-caching \
--speculative-config '{"method":"mtp","num_speculative_tokens":5,"draft_tensor_parallel_size":2}' \
--load-format fastsafetensors \
--reasoning-parser qwen3 \
--tool-call-parser qwen3_coder \
--enable-auto-tool-choice \
--tensor-parallel-size 2 \
--nnodes 2 \
--node-rank 1 \
--master-addr "$HEAD_IP" \
--master-port "$MASTER_PORT" \
--headless
```
### AMD (MI300X, single GPU, BF16)
BF16 fits one MI300X. Two settings matter on ROCm and neither is on by default:
`VLLM_ROCM_USE_AITER=1` and an explicit attention backend. The auto-selected
`ROCM_ATTN` cannot use its native kernel for this model and its decode slows
sharply as the prompt grows; `ROCM_AITER_FA` stays flat.
```bash
VLLM_ROCM_USE_AITER=1 vllm serve Qwen/Qwen3.6-27B \
--attention-backend ROCM_AITER_FA \
--enable-auto-tool-choice --tool-call-parser qwen3_coder \
--reasoning-parser qwen3
```
MTP works with the same flags (add the **Speculative decoding** feature above).
Single-stream decode (tokens/s at ~200 / ~2k / ~12k / ~32k prompt tokens, 512
output tokens, prefix caching on, which is the default), measured 2026-10-12 on
one MI300X with `vllm/vllm-openai-rocm:v0.31.0`:
| | MI300X |
|---|---|
| image defaults (`ROCM_ATTN`) | 66 / 56 / 27 / 13 |
| AITER + `ROCM_AITER_UNIFIED_ATTN` | 66 / 66 / 60 / 49 |
| AITER + `ROCM_AITER_FA` | 67 / 67 / 65 / 62 |
| + MTP (`num_speculative_tokens: 3`) | 139 / 176 / 168 / 157 |
The synthetic prompts are repetitive, which flatters MTP; on real coding-agent
requests (10-25k-token contexts) decode averaged 27 tok/s with image defaults,
68 with `ROCM_AITER_FA` and 161 with MTP added. GSM8K (first 250 test
questions, greedy, thinking off) is unchanged: 0.952 image defaults, 0.952
`ROCM_AITER_FA`, 0.964 `ROCM_AITER_UNIFIED_ATTN`, 0.964 `ROCM_AITER_FA` + MTP.
### Docker (Intel XPU B60 / B70)
Validated on 4× Intel Arc Pro B60 or 2x Intel Arc Pro 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.6-27B \
--reasoning-parser qwen3 \
--tensor-parallel-size 4 \
--max-model-len 8192 \
--enforce-eager
```
## Processing Ultra-Long Texts
Qwen3.6-27B natively supports `262,144` tokens. To serve longer inputs, turn on the
**Long Context** feature above: it applies the model card's YaRN RoPE
configuration via `--hf-overrides` and raises `--max-model-len` to ~1,010,000 tokens.
Static YaRN holds the scaling factor constant regardless of input length, so
leave it off unless you actually serve long prompts; for a ~524K workload,
halve the card's `factor` to `2.0`.
See the [model card](https://huggingface.co/Qwen/Qwen3.6-27B#processing-ultra-long-texts) for the full parameter reference.
## Client Usage
```python
from openai import OpenAI
client = OpenAI(api_key="EMPTY", base_url="http://localhost:8000/v1")
resp = client.chat.completions.create(
model="Qwen/Qwen3.6-27B",
messages=[{"role": "user", "content": "Write a haiku about gated delta networks."}],
max_tokens=256,
)
print(resp.choices[0].message.content)
```
## Troubleshooting
- **CUDA graph / Mamba cache size error:** reduce `--max-cudagraph-capture-size`
(default 512). See [vLLM PR #34571](https://github.com/vllm-project/vllm/pull/34571).
- **Disable reasoning:** add `--default-chat-template-kwargs '{"enable_thinking": false}'`.
- **Prefix Caching (Mamba):** currently experimental in "align" mode.
## References
- [Model card](https://huggingface.co/Qwen/Qwen3.6-27B)
- [FP8 checkpoint](https://huggingface.co/Qwen/Qwen3.6-27B-FP8)
- [GPTQ-Int4 checkpoint](https://huggingface.co/Qwen/Qwen3.6-27B-GPTQ-Int4)
- [NVIDIA NVFP4 checkpoint](https://huggingface.co/nvidia/Qwen3.6-27B-NVFP4)
- [Ascend W8A8 checkpoint](https://www.modelscope.cn/models/Eco-Tech/Qwen3.6-27B-w8a8-mxfp8)
- [Ascend A3 W8A8 checkpoint](https://www.modelscope.cn/models/Eco-Tech/Qwen3.6-27B-w8a8)
- [vLLM Ascend tutorial](https://docs.vllm.ai/projects/ascend/en/latest/tutorials/models/Qwen3.5-27B-Qwen3.6-27B.html)
- [Qwen3.6-35B-A3B recipe](../Qwen3.6-35B-A3B)