周红伟:信创大模型企业级部署实操,Qwen3.5 昇腾企业级部署案例实操

Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。其核心架构特点包括:

  • 原生多模态能力(视觉编码器 + 图文融合)
    • 混合注意力机制(全注意力与线性注意力交替)
    • MTP 多 Token 预测分支
    • 高性能 MoE 专家路由与共享专家机制。

本文档将展示该模型的主要验证步骤,包括支持特性、特性配置、环境准备、单节点与多节点部署、精度评估及性能评估。

支持特性

模型 支持情况 说明 BF16 支持硬件 W8A8 分块预填充 自动前缀缓存 LoRA 推测解码 异步调度 张量并行 流水线并行 专家并行 数据并行 预填充-解码分离 分段式 AclGraph 全图式 AclGraph 最大模型长度 MLP 权重预取
Qwen3.5 ✖️ A2/A3 ✖️ - ✖️ - ✖️ - 256K -

请参阅 特性指南 获取特性配置说明。

环境准备

模型权重

注: 建议将模型权重下载至多节点共享目录,例如 /root/.cache/

安装

1)官方 Docker 镜像

您可以通过镜像链接下载镜像压缩包来进行部署,具体流程如下:

复制代码
# 使用docker加载下载的镜像压缩包
# 根据您的环境更新要加载的vllm-ascend镜像压缩包名称,以下以A3 arm为例:
docker load -i Vllm-ascend-Qwen3_5-A3-Ubuntu-v0.tar 
# 根据您的设备更新 --device(Atlas A3:/dev/davinci[0-15])。

# 注意:您需要提前将权重下载至 /root/.cache。
# 更新 vllm-ascend 镜像,并配置对应的Image名
export IMAGE=vllm-ascend:qwen3_5-v0-a3 
export NAME=vllm-ascend

# 使用定义的变量运行容器
# 注意:若使用 Docker 桥接网络,请提前开放可供多节点通信的端口
docker run --rm \
--name $NAME \
--net=host \
--shm-size=100g \
--device /dev/davinci0 \
--device /dev/davinci1 \
--device /dev/davinci2 \
--device /dev/davinci3 \
--device /dev/davinci4 \
--device /dev/davinci5 \
--device /dev/davinci6 \
--device /dev/davinci7 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/Ascend/driver/tools/hccn_tool:/usr/local/Ascend/driver/tools/hccn_tool \
-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 \
-it $IMAGE bash
2)源码构建

如果您不希望使用上述 Docker 镜像,也可通过源码完整构建:

  • 确保您的环境已成功安装 CANN 8.5.0

  • 从源码安装 vllm-ascend,请参考 安装指南

从源码安装 vllm-ascend 后,您需要将 vllm、vllm-ascend、transformers 升级至主分支:

复制代码
# 升级 vllm
git clone https://github.com/vllm-project/vllm.git
cd vllm
git checkout a75a5b54c7f76bc2e15d3025d6
git fetch origin pull/34521/head:pr-34521
git merge pr-34521
VLLM_TARGET_DEVICE=empty pip install -v .

# 升级 vllm-ascend
pip uninstall vllm-ascend -y
git clone https://github.com/vllm-project/vllm-ascend.git
cd vllm-ascend
git checkout c63b7a11888e9e1caeeff8
git fetch origin pull/6742/head:pr-6742
git merge pr-6742
pip install -v .

# 重新安装 transformers
git clone https://github.com/huggingface/transformers.git
cd transformers
git reset --hard fc9137225880a9d03f130634c20f9dbe36a7b8bf
pip install .

如需部署多节点环境,您需要在每个节点上分别完成环境配置。

部署

单节点部署

A2 系列

尚未测试。

A3 系列
  • 量化模型 Qwen3.5-w8a8 可部署于单台 Atlas 800 A3(64G × 16)

执行以下脚本进行在线推理。

复制代码
export PYTORCH_NPU_ALLOC_CONF="expandable_segments:True"
export HCCL_IF_IP="xxx"
export HCCL_OP_EXPANSION_MODE="AIV"
export HCCL_BUFFSIZE=1024
export OMP_NUM_THREADS=1
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2:$LD_PRELOAD
export TASK_QUEUE_ENABLE=1

vllm serve /root/.cache/modelscope/hub/models/vllm-ascend/Qwen3.5-w8a8/ \
    --served-model-name "qwen3.5" \
    --host 0.0.0.0 \
    --port 8010 \
    --data-parallel-size 1 \
    --tensor-parallel-size 16 \
    --max-model-len 5000 \
    --max-num-batched-tokens 16384 \
    --max-num-seqs 128 \
    --gpu-memory-utilization 0.94 \
    --compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' \
    --trust-remote-code \
    --async-scheduling \
    --allowed-local-media-path / \
    --quantization ascend \
    --mm-processor-cache-gb 0 \
    --additional-config '{"enable_cpu_binding":true, "multistream_overlap_shared_expert": true}'

参数说明如下:

  • 对于单节点部署,低延迟场景下我们推荐使用 dp1tp16 并关闭专家并行。
  • --async-scheduling:异步调度是一种优化推理效率的技术,允许非阻塞的任务调度,以提高并发性和吞吐量,尤其在处理大规模模型时效果明显。

执行以下脚本向模型发送一条请求:

复制代码
curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{
        "prompt": "The future of AI is",
        "path": "/path/to/model/Qwen3.5-w8a8/",
        "max_tokens": 100,
        "temperature": 0
        }'

执行结束后,您可以看到模型回答如下:

复制代码
Prompt: 'The future of AI is', Generated text: ' not just about building smarter machines, but about creating systems that can collaborate with humans in meaningful, ethical, and sustainable ways. As AI continues to evolve, it will increasingly shape how we live, work, and interact --- and the decisions we make today will determine whether this future is one of shared prosperity or deepening inequality.\n\nThe rise of generative AI, for example, has already begun to transform creative industries, education, and scientific research. Tools like ChatGPT, Midjourney, and'

也可执行以下脚本向模型发送一条多模态请求:

复制代码
curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
    -d '{
        "model": "qwen3.5",
        "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": [
                {"type": "image_url", "image_url": {"url": "https://modelscope.oss-cn-beijing.aliyuncs.com/resource/qwen.png"}},
                {"type": "text", "text": "What is the text in the illustrate?"}
            ]}
        ]
    }'

执行结束后,您可以看到模型回答如下:

复制代码
{"id":"chatcmpl-9dab99d55addd8c0","object":"chat.completion","created":1771060145,"model":"qwen3.5","choices":[{"index":0,"message":{"role":"assistant","content":"TONGYI Qwen","refusal":null,"annotations":null,"audio":null,"function_call":null,"tool_calls":[],"reasoning":null},"logprobs":null,"finish_reason":"stop","stop_reason":null,"token_ids":null}],"service_tier":null,"system_fingerprint":null,"usage":{"prompt_tokens":112,"total_tokens":119,"completion_tokens":7,"prompt_tokens_details":null},"prompt_logprobs":null,"prompt_token_ids":null,"kv_transfer_params":null}

多节点部署

A2 系列
  • Qwen3.5-w8a8:至少需要 2 台 Atlas 800 A2(64G × 16)部署。

在两台节点上分别执行以下脚本。

1)节点 0

复制代码
# 通过 ifconfig 获取本机信息
# nic_name 为当前节点 local_ip 对应的网卡接口名称
nic_name="xxx"
local_ip="xxx"

# node0_ip 的值必须与节点0(主节点)中设置的 local_ip 一致
node0_ip="xxxx"

export HCCL_IF_IP=$local_ip
export GLOO_SOCKET_IFNAME=$nic_name
export TP_SOCKET_IFNAME=$nic_name
export HCCL_SOCKET_IFNAME=$nic_name
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=1
export HCCL_BUFFSIZE=1024
export TASK_QUEUE_ENABLE=1
export PYTORCH_NPU_ALLOC_CONF="expandable_segments:True"
export HCCL_OP_EXPANSION_MODE="AIV"
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2:$LD_PRELOAD

vllm serve /root/.cache/modelscope/hub/models/vllm-ascend/Qwen3.5-w8a8/ \
    --served-model-name "qwen3.5" \
    --host 0.0.0.0 \
    --port 8010 \
    --data-parallel-address $node0_ip \
    --data-parallel-rpc-port 13389 \
    --data-parallel-size-local 1 \
    --data-parallel-size 2 \
    --tensor-parallel-size 8 \
    --max-model-len 5000 \
    --max-num-batched-tokens 16384 \
    --max-num-seqs 16 \
    --gpu-memory-utilization 0.94 \
    --compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' \
    --trust-remote-code \
    --async-scheduling \
    --allowed-local-media-path / \
    --quantization ascend \
    --mm-processor-cache-gb 0 \
    --additional-config '{"enable_cpu_binding":true}'

2)节点 1

复制代码
# 通过 ifconfig 获取本机信息
# nic_name 为当前节点 local_ip 对应的网卡接口名称
nic_name="xxx"
local_ip="xxx"

# node0_ip 的值必须与节点0(主节点)中设置的 local_ip 一致
node0_ip="xxxx"

export HCCL_IF_IP=$local_ip
export GLOO_SOCKET_IFNAME=$nic_name
export TP_SOCKET_IFNAME=$nic_name
export HCCL_SOCKET_IFNAME=$nic_name
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=1
export HCCL_BUFFSIZE=1024
export TASK_QUEUE_ENABLE=1
export PYTORCH_NPU_ALLOC_CONF="expandable_segments:True"
export HCCL_OP_EXPANSION_MODE="AIV"
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2:$LD_PRELOAD

vllm serve /root/.cache/modelscope/hub/models/vllm-ascend/Qwen3.5-w8a8/ \
    --served-model-name "qwen3.5" \
    --host 0.0.0.0 \
    --port 8010 \
    --data-parallel-address $node0_ip \
    --data-parallel-rpc-port 13389 \
    --data-parallel-size-local 1 \
    --data-parallel-start-rank 1 \
    --data-parallel-size 2 \
    --tensor-parallel-size 8 \
    --max-model-len 5000 \
    --max-num-batched-tokens 16384 \
    --max-num-seqs 16 \
    --gpu-memory-utilization 0.94 \
    --compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' \
    --trust-remote-code \
    --async-scheduling \
    --allowed-local-media-path / \
    --quantization ascend \
    --mm-processor-cache-gb 0 \
    --additional-config '{"enable_cpu_binding":true}' \
    --headless 
相关推荐
阿里云大数据AI技术4 小时前
Agentic Memory Extension 支持对接主流Agent - 适用于 Claude Code、CodeX等
人工智能·agent
我唔知啊4 小时前
不是让 AI 写代码,我是在指挥 AI 干活:一套打磨出来的 AI 编程工作流
人工智能
ZzT4 小时前
在 GitHub 上 @一下 claude,它自己把 issue 改成 PR
人工智能·开源
不加辣椒5 小时前
第15章 上下文窗口管理与长文本策略
人工智能
牛奶6 小时前
AI 能赚钱了——但赚的不是你
人工智能·ai编程·nvidia
凌杰6 小时前
AI 学习笔记:研究方法的演变
人工智能
半盏药香6 小时前
由于jinja2的starlette版本过高引发的问题:500 Server Error TypeError: unhashable type: 'dict'
人工智能
阿里云大数据AI技术6 小时前
MiniMax M3、Kimi K2.7 Code来啦!PAI已支持一键部署,开源前沿触手可及
人工智能·agent
ApacheSeaTunnel6 小时前
当多表数据涌入,Apache SeaTunnel 如何巧妙化解主键冲突?
大数据·开源·数据集成·seatunnel·技术分享·数据同步
百度Geek说6 小时前
AI Coding 的底层框架:一切优化都是在对抗熵增
人工智能