在昇腾 910B2 上部署 Qwen3.5-35B-A3B

当大模型遇到国产算力,会擦出怎样的火花?本文带你从零开始,在昇腾 910B2 上完成 Qwen3.5-35B-A3B 的高性能部署。

Qwen3.5-35B-A3B 这款采用 MoE(混合专家)架构的模型在性能和效果之间找到了绝佳的平衡点。而另一边,昇腾 910B2 作为国产算力的代表,正在被越来越多的企业采用。

把这两者结合起来,意味着你可以在完全自主可控的硬件栈上,运行世界一流的开源大模型。这不仅仅是技术上的尝试,更是面向未来的战略布局。

硬件选型:你的机器够用吗?

开始之前,先确认你的硬件环境。Qwen3.5-35B-A3B 采用 MoE 架构,对显存的要求相对友好,但昇腾部署仍有两种主流配置方案:

方案一:Atlas 800 A3(推荐)

  • 16 张 NPU,每张 64GB 显存

  • 总算力更强,适合高并发场景

  • 单节点即可完整部署

方案二:Atlas 800 A2

  • 8 张 NPU,每张 64GB 显存

  • 成本更友好,适合入门验证

  • 同样支持单节点部署

如果你计划上多节点集群,建议提前验证节点间的通信环境。这一步看似 optional,但实际踩坑的人不少------HCCL 通信没调通,后续所有分布式部署都会卡住。


环境准备:把地基打牢

模型权重下载

模型权重建议下载到共享目录,比如 /root/.cache/。这样在多节点部署时,所有节点都能访问同一份权重,避免重复下载。

原版模型

量化版本(生产推荐)

生产环境强烈建议用量化版,性价比更高。

方式一:Docker 镜像(推荐新手)

vLLM-Ascend 提供了预构建的 Docker 镜像,这是最省心的方式。根据硬件选型选择对应的镜像:

复制代码
# Atlas 800 A2
export IMAGE=m.daocloud.io/quay.io/ascend/vllm-ascend:v0.17.0rc1

# Atlas 800 A3
export IMAGE=m.daocloud.io/quay.io/ascend/vllm-ascend:v0.17.0rc1-a3

启动容器时,注意设备映射要完整。下面是一份经过验证的配置:

复制代码
docker run --rm \
  --name vllm-ascend \
  --net=host \
  --shm-size=1g \
  --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

关键点--net=host 是必须的,多节点通信依赖主机网络。如果要用桥接网络,需要提前暴露端口。

方式二:源码安装(Python pip)

如果你更喜欢直接安装在宿主机或自定义环境中,可以使用 pip 方式安装。

环境要求:

步骤 1:配置系统依赖和 pip 镜像

复制代码
# 配置清华 pip 镜像
pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

# 安装系统依赖
apt-get update -y && apt-get install -ygcc g++ cmake libnuma-dev wgetgitcurl jq

步骤 2:安装 vLLM 和 vLLM-Ascend

复制代码
# 安装 vLLM(支持的最新版本为 v0.17.0)
pip install vllm==0.17.0

# 安装 vLLM-Ascend(从华为镜像源)
pip install \
--extra-index-url https://mirrors.huaweicloud.com/ascend/repos/pypi/simple  \
--index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple   \
vllm-ascend==0.17.0rc1

步骤 3(可选):使用 uv-wheelnext 增量安装

这种方式只下载增量部分,下载体积更小:

复制代码
# 安装 uv-wheelnext
curl-LsSf https://astral.sh/uv/install.sh | sed 's/verify_checksum "$_file"/true/' | INSTALLER_DOWNLOAD_URL=https://wheelnext.astral.sh sh
source $HOME/.local/bin/env

# 通过增量索引安装 vllm-ascend
uv pip install --system-v \
--extra-index-url https://mirrors.huaweicloud.com/ascend/repos/pypi/incremental  \
--index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple   \
vllm-ascend==0.17.0rc1

步骤 4(可选):从源代码构建

如果需要定制或开发,可以从源代码构建:

复制代码
# 克隆并安装 vLLM
git clone --depth 1--branch v0.17.0 https://github.com/vllm-project/vllm
cd vllm
VLLM_TARGET_DEVICE=empty pip install -v-e .
cd ..

# 克隆并安装 vLLM-Ascend
git clone --depth 1--branch v0.17.0rc1 https://github.com/vllm-project/vllm-ascend.git
cd vllm-ascend
git submodule update --init--recursive
pip install -v-e .

注意 :构建自定义算子需要 gcc/g++ 版本高于 8,且需要 C++17 或更高版本支持。如果在 CPU-only 环境中构建,需要提前设置 SOC_VERSION 环境变量指定目标芯片型号。

验证安装

创建 example.py 测试文件:

复制代码
from vllm import LLM, SamplingParams

prompts= [
    "Hello, my name is",
    "The future of AI is",
]

sampling_params=SamplingParams(temperature=0.8, top_p=0.95)
llm=LLM(model="Qwen/Qwen3-0.6B")

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

运行测试:

复制代码
export VLLM_USE_MODELSCOPE=true
pip install modelscope
python example.py

如果看到正常的推理输出,说明安装成功。


启动服务:一行命令跑起来

环境变量设置好之后,启动服务其实非常简单。下面是一份可以直接使用的启动脚本:

复制代码
#!/bin/sh

# 从 ModelScope 加载模型(国内网络更快)
export VLLM_USE_MODELSCOPE=true

# 显存分配优化,避免碎片化
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True

# HCCL 通信缓冲
export HCCL_BUFFSIZE=512

# 进程绑定优化
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=1

# 任务队列启用
export TASK_QUEUE_ENABLE=1

vllm serve Eco-Tech/Qwen3.5-35B-A3B-w8a8-mtp \
  --host 0.0.0.0 \
  --port 8000 \
  --data-parallel-size 1 \
  --tensor-parallel-size 2 \
  --seed 1024 \
  --quantization ascend \
  --served-model-name qwen3.5-35b-a3b \
  --max-num-seqs 32 \
  --max-model-len 133000 \
  --max-num-batched-tokens 8096 \
  --trust-remote-code \
  --gpu-memory-utilization 0.90 \
  --no-enable-prefix-caching \
  --speculative_config '{"method": "qwen3_5_mtp", "num_speculative_tokens": 3, "enforce_eager": true}' \
  --compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' \
  --additional-config '{"enable_cpu_binding":true}' \
  --async-scheduling

关键参数解读

这些参数不是随便填的,每个都有明确的含义:

**--tensor-parallel-size 2**张量并行度。2 是一个平衡点,既能利用多卡加速,又不会引入过大的通信开销。

**--max-model-len 133000**上下文长度上限。Qwen3.5 支持超长上下文,这里设置为 133K,可以根据实际需求调整。

**--max-num-seqs 32**每个数据并行组最大并发请求数。如果实际并发超过这个值,超出的请求会排队等待。注意:等待时间也会计入 TTFT 指标。

**--gpu-memory-utilization 0.90**显存利用率。设置为 0.9 意味着 vLLM 会使用 90% 的显存进行推理。留 10% 余量是为了防止实际推理时的显存波动导致 OOM。

--speculative_config 推测解码配置。Qwen3.5-35B-A3B 支持 MTP 推测解码,可以显著提升吞吐。num_speculative_tokens: 3 表示每次推测 3 个 token。

--compilation-config 图编译配置。FULL_DECODE_ONLY 模式只在解码阶段使用图优化,是目前推荐的配置。


验证部署:真的能跑吗?

服务启动后,用 curl 发个请求验证一下:

复制代码
curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3.5-35b-a3b",
    "prompt": "The future of AI is",
    "max_completion_tokens": 50,
    "temperature": 0
  }'

如果返回了正常的 completion 结果,恭喜,基础部署已经成功。


性能评估

精度验证

用 AISBench 跑一下 gsm8k 基准测试,量化版的准确率可以达到 96.74%,和原版几乎无异。这意味着你可以放心使用量化版本,不用为那一点点精度损失纠结。

吞吐测试

vLLM 提供了内置的 benchmark 工具:

复制代码
export VLLM_USE_MODELSCOPE=true
vllm bench serve \
  --model Eco-Tech/Qwen3.5-35B-A3B-w8a8-mtp \
  --dataset-name random \
  --random-input 200 \
  --num-prompts 200 \
  --request-rate 1 \
  --save-result \
  --result-dir ./

几分钟就能拿到完整的性能报告,包括 TTFT、TPOT、吞吐等核心指标。


遇到过的那些坑

坑一:显存碎片化

PyTorch 在 NPU 上容易出现显存碎片,导致明明还有显存却报 OOM。解决方法就是开头那个环境变量:

复制代码
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True

坑二:多节点通信超时

多节点部署时,HCCL 通信超时是常见问题。检查以下几点:

  • 所有节点的网络是否互通

  • 防火墙是否放行了必要端口

  • HCCL_BUFFSIZE 是否设置合理

坑三:Prefix Caching 的陷阱

Qwen3.5-35B-A3B 是 Hybrid 架构,开启 Prefix Caching 可能导致 block_size 异常增大(比如跳到 2048)。这意味着短于 2048 的前缀都不会被缓存。生产环境建议先关闭,等官方优化后再开启。


在昇腾 910B2 上部署 Qwen3.5-35B-A3B,本质上是在验证一条技术路线:国产算力 + 开源大模型 = 自主可控的 AI 基础设施。真实环境千差万别,遇到问题时,最好的调试工具永远是日志和耐心。

相关推荐
冬奇Lab2 小时前
一天一个开源项目(第68篇):DeerFlow - 字节跳动出品的深度研究与超级智能体框架
人工智能·开源·资讯
NineData3 小时前
NineData V5.0 产品发布会:让 AI 成为数据管理的驱动力,4月16日!
数据库·人工智能·ai编程
罗西的思考3 小时前
【OpenClaw】通过 Nanobot 源码学习架构---(5)Context
人工智能·算法·机器学习
2301_764441333 小时前
claw-code:基于Claude Code架构的clean-room重写开源项目
人工智能·架构·开源
模拟器连接器曾工4 小时前
CCD定位与图像辨别的智能视觉检测系统
人工智能·计算机视觉·视觉检测·智能视觉检测系统
云栖梦泽4 小时前
AI安全合规与治理:行业发展趋势与职业展望
大数据·人工智能·安全
小陈工4 小时前
2026年4月2日技术资讯洞察:数据库融合革命、端侧AI突破与脑机接口产业化
开发语言·前端·数据库·人工智能·python·安全
happyprince5 小时前
2026年04月07日热门模型
人工智能
IT_陈寒5 小时前
Vue的这个响应式问题,坑了我整整两小时
前端·人工智能·后端