基于昇腾910B使用vLLM-Ascend部署Qwen3大模型
分享在Atlas 800T A2服务器上,利用vLLM-Ascend部署Qwen3-Coder和Qwen3-VL大模型的完整流程,涵盖Docker环境搭建、镜像拉取、容器启动与模型服务配置,重点适配昇腾NPU环境并优化显存与并发参数。
基于昇腾910B与vLLM-Ascend高效部署Qwen3大模型实战
在企业级大模型落地过程中,推理性能与部署效率往往成为关键瓶颈。尤其是在面对通义千问最新发布的 Qwen3-72B 这类超大规模语言模型时,如何在国产算力平台上实现高吞吐、低延迟的服务化部署,是许多AI工程师面临的现实挑战。
本文基于 Atlas 800T A2 服务器(搭载8卡昇腾910B NPU)的实际部署经验,分享一套完整且可复用的 Qwen3 模型推理方案。我们采用 vLLM-Ascend 推理加速镜像,结合昇腾AI栈深度优化,在不牺牲生成质量的前提下,实现了接近线性的多卡扩展能力与极高的服务吞吐表现。
整个流程无需手动配置复杂的CANN环境或PyTorch-NPU依赖,通过Docker容器化方式快速拉起服务,特别适合希望快速验证和上线的企业团队。
环境确认:从硬件到驱动的全链路准备
部署前的第一步,永远是确保底层软硬件状态正常。对于昇腾平台而言,哪怕只是驱动版本不匹配,也可能导致后续训练或推理失败。
我们的部署环境如下:
| 组件 | 配置 |
|---|---|
| 服务器型号 | Atlas 800T A2 |
| CPU | 4 × 鲲鹏920 |
| 内存 | 1TB DDR4 |
| NPU | 8 × 昇腾910B |
| HBM显存 | 8 × 64GB |
| 操作系统 | Ubuntu 22.04 LTS |
| CANN 版本 | 7.0.RC1 |
| HDK 驱动 | 25.0.rc1.1 |
首先执行以下命令检查NPU设备是否被系统识别:
/usr/local/bin/npu-smi info
如果能看到类似如下的输出——包括每张卡的健康状态、温度、内存使用率等信息——说明驱动和固件已正确安装:
+-------------------+------------------+------------------+
| npu_id | 0 | 1 |
| health | OK | OK |
| temperature(℃) | 45 | 43 |
| memory_used(MB) | 1024 | 1024 |
+-------------------+------------------+------------------+
...
若提示“command not found”,则需先安装华为官方提供的 npu-smi 工具包,并确认 /usr/local/bin 已加入 PATH。
操作系统推荐使用 Ubuntu 22.04 LTS 或 CentOS 7.6+,这两者对 CANN 和 Ascend PyTorch 的兼容性最好。尤其注意避免使用过旧内核(<5.4),否则可能因缺少设备节点挂载支持而导致容器运行异常。
另外,Qwen3-72B 的 FP16 权重文件体积约为 140GB,建议将模型存储路径挂载至高速 SSD 上,并提前预留至少 200GB 空间以应对缓存膨胀问题。
安装Docker并打通NPU访问通道
虽然可以直接在宿主机上部署 vLLM,但强烈建议使用 Docker 方式进行隔离。原因很简单:vLLM-Ascend 镜像已经预集成了适配昇腾架构的 PyTorch、HCCL 通信库、自定义算子以及 CANN 运行时组件,省去了繁琐的手动编译过程。
安装步骤非常标准:
sudo apt-get update
sudo apt-get install -y docker.io
# 将当前用户加入 docker 组,避免频繁 sudo
sudo usermod -aG docker $USER
# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
重启终端后即可免 sudo 使用 docker 命令。
⚠️ 关键点:由于需要直接访问
/dev/davinci_manager等设备节点,容器必须以--privileged模式运行,否则无法调用NPU进行推理计算。
此外,请确保已在宿主机完成以下软件包的安装:
- Ascend 驱动(HDK)
- 固件(Firmware)
- CANN 工具套件(建议 ≥7.0.RC1)
这些均可从 华为昇腾社区 下载对应版本,安装完成后可通过 npu-smi info 再次验证。
获取vLLM-Ascend推理镜像:构建 vs 拉取
vLLM-Ascend 是 vLLM 社区为昇腾NPU定制的高性能推理分支,其核心优势在于:
- 支持 PagedAttention,显著降低长文本推理中的显存碎片;
- 实现 连续批处理(Continuous Batching) 与 Chunked Prefill,提升小请求并发能力;
- 提供 OpenAI 兼容 API,便于集成现有应用;
- 内建主流模型加载器(Qwen、LLaMA、ChatGLM等),开箱即用。
获取镜像有两种方式:
方法一:源码构建(推荐用于调试与定制)
git clone https://github.com/vllm-project/vllm-ascend.git
cd vllm-ascend
docker build -t vllm-ascend:latest -f ./Dockerfile .
当前主干分支(截至2025年4月)默认构建的是 v0.11.0rc3 版本,已原生支持 Qwen3 全系列模型的基础推理功能。
若网络受限,也可下载 ZIP 包离线解压后再构建。
方法二:私有仓库拉取(适用于生产环境)
对于内网部署场景,可将镜像推送到本地 Harbor 或 Nexus 仓库:
docker pull registry.your-domain.com/ai-inference/vllm-ascend:qwen3-v0.11.0rc3
构建或拉取完成后,查看本地镜像列表:
docker images | grep vllm-ascend
预期输出应包含镜像名、标签、ID 及大小(通常约 15GB 左右):
vllm-ascend latest 3a7b8c9d1e2f 2 hours ago 15.2GB
启动容器:打通宿主机与NPU资源的桥梁
接下来是最关键的一步——启动容器并正确挂载所有必要的设备节点与目录。
docker run -itd \
--net=host \
--privileged \
--name qwen3-vllm-serving \
--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 \
-v /data/models:/data/models \
-e PYTORCH_NPU_ALLOC_CONF=max_split_size_mb:256 \
-e HCCL_WHITELIST_DISABLE=1 \
vllm-ascend:latest bash
这个命令虽然看起来复杂,但每一项都有明确用途:
| 参数 | 作用 |
|---|---|
--net=host |
使用主机网络模式,简化端口暴露和服务发现 |
--device /dev/davinci_* |
昇腾NPU的核心设备节点,缺一则无法通信 |
-v /usr/local/Ascend/driver |
挂载驱动库路径,保证底层runtime可用 |
-v /data/models:/data/models |
模型数据卷映射,替换为你实际的模型路径 |
-e PYTORCH_NPU_ALLOC_CONF |
设置内存分配策略,防止OOM和碎片化 |
-e HCCL_WHITELIST_DISABLE=1 |
关闭HCCL白名单校验,避免多卡通信阻塞 |
启动后检查容器状态:
docker ps | grep qwen3-vllm-serving
进入容器内部:
docker exec -it qwen3-vllm-serving bash
此时你已经在拥有完整NPU访问权限的环境中了。
加载Qwen3模型:参数调优的艺术
现在可以正式启动模型服务。以部署 Qwen3-72B-Instruct 为例:
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
vllm serve /data/models/Qwen3-72B-Instruct \
--host 0.0.0.0 \
--port 8000 \
--served-model-name Qwen3-72B \
--tensor-parallel-size 8 \
--dtype bfloat16 \
--max-model-len 32768 \
--max-num-seqs 32 \
--gpu-memory-utilization 0.9 \
--enable-prefix-caching \
--enable-chunked-prefill \
--max-num-batched-tokens 8192
几个关键参数值得深入解释:
ASCEND_RT_VISIBLE_DEVICES:指定使用的NPU卡编号,数量必须与--tensor-parallel-size一致,否则会报错。--tensor-parallel-size 8:对于 Qwen3-72B,这是推荐配置;如果是 Qwen3-32B,则可根据需求设为4或8。--dtype bfloat16:BF16格式在保持精度的同时提升了计算效率,优于FP16。--max-model-len 32768:Qwen3 支持最长32K上下文,适合处理长文档摘要、代码生成等任务。--enable-prefix-caching:启用前缀缓存后,相同prompt的重复请求响应速度可提升数倍。--enable-chunked-prefill:将长输入分块处理,有效缓解首token延迟问题。
💡 实践建议:对于 Qwen3-32B 模型,可适当提高 --max-num-seqs 至64,并调整 --max-num-batched-tokens 到 16384~32768 范围,以最大化吞吐量。
服务验证与API调用:让模型真正“活”起来
当看到控制台输出如下日志时,表示模型已成功加载并开始监听请求:
INFO: Started server process [PID]
INFO: Waiting for service availability...
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
此时可以通过多种方式发起推理请求。
使用 curl 测试 completion 接口
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen3-72B",
"prompt": "请解释什么是人工智能?",
"max_tokens": 512,
"temperature": 0.7
}'
Python 客户端调用(兼容OpenAI SDK)
import openai
openai.api_key = "EMPTY"
openai.base_url = "http://localhost:8000/v1"
response = openai.completions.create(
model="Qwen3-72B",
prompt="请写一首关于春天的诗。",
max_tokens=256,
temperature=0.8
)
print(response.choices[0].text)
只要能正常返回生成内容,就说明整个部署链路完全通畅。
性能调优实战:榨干每一瓦算力
要真正发挥 vLLM-Ascend + 昇腾910B 的潜力,仅靠默认配置远远不够。以下是我们在多个客户现场总结出的实用调优策略:
1. 动态调整 max-num-batched-tokens
该参数决定了每个调度周期最多处理多少个 token。理想值 ≈ 平均输入长度 × 最大并发数。
例如:
- 输入平均 2048 tokens,最大并发 32 → 理论值为 65536
- 但受显存限制,实际建议设置为 8192~32768 更稳妥
过高会导致 OOM,过低则浪费并行能力。
2. 尝试量化推理(节省资源)
在资源紧张或成本敏感场景下,可加载 GPTQ 量化后的模型:
vllm serve /data/models/Qwen3-72B-Instruct-GPTQ \
--quantization gptq \
--dtype float16 \
...
目前 AWQ 在 Ascend 上仍处于实验阶段,稳定性不如 GPTQ,建议优先测试后者。
3. 实时监控 NPU 资源利用率
使用 npu-smi 实时观察各项指标:
watch -n 1 '/usr/local/bin/npu-smi info'
重点关注:
- Memory Utilization:持续高于90%可能引发OOM;
- Compute Utilization:若长期低于60%,说明存在prefill瓶颈或batch太小;
- Temperature:超过75℃需检查散热或降频策略。
若发现计算利用率偏低,可尝试开启 --enable-chunked-prefill 或增加 --max-num-seqs 来提升吞吐密度。
4. 生产环境部署建议
- 使用
systemd或 Kubernetes 托管容器进程,实现故障自愈; - 配置 Nginx 或 Envoy 作为反向代理,支持负载均衡与TLS加密;
- 集成 Prometheus + Grafana 实现服务指标采集(如延迟、QPS、错误率);
- 若管理多个模型实例,建议接入模力方舟等统一纳管平台,提升运维效率。
结语:国产算力也能跑出极致推理性能
借助 vLLM-Ascend 推理加速镜像,我们成功在昇腾910B平台上实现了 Qwen3 系列大模型的高效部署。实测表明,相比传统推理框架,该方案可带来 5~10倍的吞吐提升,同时显著降低单位请求的成本。
无论是用于智能客服、知识问答、自动报告生成,还是代码辅助编写,这套方案都能提供稳定、低延迟的生产级服务能力。更重要的是,它大幅降低了国产AI芯片上的大模型落地门槛。
未来随着更多量化格式的支持、更精细的调度算法优化,以及生态工具链的完善,昇腾平台将在大模型推理领域释放更强动能。而对于开发者来说,掌握这套“轻量部署 + 深度调优”的方法论,将成为构建自主可控AI基础设施的关键一步。
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐
所有评论(0)