周红伟:信创大模型企业级部署实操,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.den几秒前
Windows 安装 MinerU 3.x 实现本地批量解析 PDF
人工智能·windows·ai
牧子川2 分钟前
016-Function-Calling
大模型·tools·functioncalling
枫叶林FYL7 分钟前
【强化学习】长上下文可验证奖励强化学习:原理推导与系统架构
人工智能·系统架构
Teable任意门互动7 分钟前
深度解析:AI 赋能开源多维表格,实现企业全场景数据整合与高效应用
数据库·人工智能·低代码·信息可视化·开源·数据库开发
沪漂阿龙9 分钟前
Hermes Agent 安全边界全解析:让 AI Agent 敢执行、可控制、能回滚
人工智能·安全
天天进步201511 分钟前
从零打造 Python 全栈项目:智能教学辅助系统
开发语言·人工智能·python
南屹川12 分钟前
【分布式系统】分布式事务与一致性协议:从理论到实践
人工智能
2601_9577867719 分钟前
多平台矩阵系统的反脆弱架构:如何用技术解耦对抗平台规则的不确定性
人工智能·矩阵·架构·平台解耦
馒头吃馒头22 分钟前
AI 伦理安全指引 1.0 发布:严控违规智能应用,划定行业伦理安全红线
人工智能·人工智能应用伦理安全指引1.0·人工智能应用伦理
jkyy201425 分钟前
顺应IoT与健康产业融合趋势,补齐中小企业健康数字化短板
大数据·人工智能·信息可视化·健康医疗