Qwen3-Next#

简介#

Qwen3-Next 模型是一个高稀疏度的稀疏 MoE(混合专家)模型。与 Qwen3 的 MoE 架构相比,它在混合注意力机制和多 Token 预测机制等方面引入了关键改进,提升了模型在长上下文和大总参数规模下的训练和推理效率。

本文档将展示模型的核心验证步骤,包括支持的特性、环境准备,以及精度评估和性能评估。Qwen3 Next 目前使用 Triton Ascend,该组件处于实验阶段。在后续版本中,其与稳定性和精度相关的性能可能会发生变化,性能将持续得到优化。

Qwen3-Next 模型从 vllm-ascend:v0.10.2rc1 版本开始首次支持。

支持的特性#

请参阅支持的特性矩阵获取模型支持的特性列表。

请参阅特性指南获取特性的配置方法。

权重准备#

Qwen3-Next-80B-A3B-Instruct 模型权重的下载链接:下载模型权重

部署#

如果机器环境为 Atlas 800I A3(64G*16),部署方法保持不变。

运行 Docker 容器#

# Update the vllm-ascend image
# For Atlas A2 machines:
# export IMAGE=quay.io/ascend/vllm-ascend:v0.20.2rc1
# For Atlas A3 machines:
export IMAGE=quay.io/ascend/vllm-ascend:v0.20.2rc1-a3
docker run --rm \
--shm-size=1g \
--name vllm-ascend-qwen3 \
--device /dev/davinci0 \
--device /dev/davinci1 \
--device /dev/davinci2 \
--device /dev/davinci3 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /root/.cache:/root/.cache \
-p 8000:8000 \
-it $IMAGE bash

Qwen3 Next 使用 Triton Ascend,该组件目前处于实验阶段。在未来的版本中,可能会发生与稳定性、精度和性能提升相关的行为变化。

推理#

运行以下脚本在多 NPU 上启动 vLLM 服务器:

vllm serve Qwen/Qwen3-Next-80B-A3B-Instruct --tensor-parallel-size 4 --max-model-len 32768 --gpu-memory-utilization 0.8 --max-num-batched-tokens 4096 --compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}'

服务器启动后,您可以使用输入提示词查询模型。

curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
  "model": "Qwen/Qwen3-Next-80B-A3B-Instruct",
  "messages": [
    {"role": "user", "content": "Who are you?"}
  ],
  "temperature": 0.6,
  "top_p": 0.95,
  "top_k": 20,
  "max_completion_tokens": 32
}'

运行以下脚本在多 NPU 上执行离线推理:

import gc
import torch

from vllm import LLM, SamplingParams
from vllm.distributed.parallel_state import (destroy_distributed_environment,
                                             destroy_model_parallel)

def clean_up():
    destroy_model_parallel()
    destroy_distributed_environment()
    gc.collect()
    torch.npu.empty_cache()

if __name__ == '__main__':
    prompts = [
        "Who are you?",
    ]
    sampling_params = SamplingParams(temperature=0.6, top_p=0.95, top_k=40, max_tokens=32)
    llm = LLM(model="Qwen/Qwen3-Next-80B-A3B-Instruct",
              tensor_parallel_size=4,
              enforce_eager=True,
              distributed_executor_backend="mp",
              gpu_memory_utilization=0.7,
              max_model_len=4096)

    outputs = llm.generate(prompts, sampling_params)
    for output in outputs:
        prompt = output.prompt
        generated_text = output.outputs[0].text
        print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

    del llm
    clean_up()

如果成功运行此脚本,将看到如下所示的信息:

Prompt: 'Who are you?', Generated text: ' What do you know about me?\n\nHello! I am Qwen, a large-scale language model independently developed by the Tongyi Lab under Alibaba Group. I am'

精度评估#

使用 AISBench#

  1. 详细信息请参考使用 AISBench 进行精度评估

  2. 执行后即可获得结果,以下是 Qwen3-Next-80B-A3B-Instructvllm-ascend:0.13.0rc1 上的结果,仅供参考。

数据集

版本

指标

模式

vllm-api-general-chat

gsm8k

-

准确率

生成

95.53

性能#

使用 AISBench#

详细信息请参考使用 AISBench 进行性能评估

使用 vLLM 基准测试#

Qwen3-Next 为例运行性能评估。

更多详细信息请参考 vLLM 基准测试

有三个 vllm bench 子命令:

  • latency:基准测试单批次请求的延迟。

  • serve:基准测试在线服务的吞吐量。

  • throughput:基准测试离线推理的吞吐量。

serve 为例,运行如下代码。

export VLLM_USE_MODELSCOPE=True
vllm bench serve --model Qwen/Qwen3-Next-80B-A3B-Instruct  --dataset-name random --random-input 200 --num-prompts 200 --request-rate 1 --save-result --result-dir ./

大约几分钟后,即可获得性能评估结果。

性能结果如下:

硬件:A3-752T,2 节点

部署:TP4 + 纯解码模式

输入/输出:2k/2k

并发数:32

性能:580 tps,TPOT 54 毫秒

常见问题#

  1. Qwen3-Next 目前不支持 TP >= 16。由于该模型有 16 个查询头,但只有 2 个键值头,当 TP >= 16 时,GQA 会退化为 MHA。然而,FIA 算子目前无法在头维度为 256 的 MHA 场景下正常工作(该模型正是这种情况)。