周红伟:信创大模型企业级部署实操,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工作室1 小时前
我做了个飞书转公众号排版器,6套高颜值主题想换就换
前端·人工智能
响叮当!1 小时前
大模型输出的全过程
人工智能·深度学习·机器学习
杨浦老苏2 小时前
AI提示词管理工具AiShort
人工智能·docker·ai·群晖
qq_314009832 小时前
Windows10+WSL部署Openclaw接入飞书实践
人工智能·飞书
SmartBrain2 小时前
多智能体设计(第二部分):消息传递机制(含考题)
人工智能·架构·langchain·aigc
SickeyLee2 小时前
AI产品经理-大模型的智力之源与能力边界
大数据·人工智能
dtsola2 小时前
AI独立开发的道法术器:一个解决方案架构师的实践与思考
人工智能·ai编程·ai创业·独立开发者·vibecoding·个人开发者·一人公司
2501_926978332 小时前
概率分形理论--从离散到连续--从向量到模型
人工智能·经验分享·agi
A小码哥2 小时前
Cowork 开源平替 OpenWork:打破 AI 协助垄断
人工智能·开源