背景与前置说明

vllm与多模态部署的意义

vLLM-Ascend是vLLM社区官方支持的昇腾NPU专用后端,通过将PagedAttention等核心技术与昇腾硬件深度集成,显著提升大模型在昇腾集群上的推理性能并降低部署门槛。该项目采用低侵入式插件架构,将torch_npu等硬件依赖完全隔离至独立后端,既保障了主仓代码纯净性,又为异构硬件生态接入树立了范式,推动昇腾生态从交付模式向开源共建转型,为国产硬件在大模型推理领域提供了关键基础设施

目标模型:DeepSeek-R1-671B-0528 W8A8

DeepSeek-R1-671B-0528 W8A8是DeepSeek最新发布的6710亿参数专家混合模型(MoE)的8位权重量化版本,该版本通过vLLM-Ascend在昇腾硬件上实现了高效部署。作为稀疏激活模型,其实际推理时仅激活约370亿参数,结合W8A8量化技术显著降低了显存占用,使单卡部署超大规模模型成为可能。在昇腾NPU上,该模型通过vLLM-Ascend的PagedAttention内核和MTP(内存优化)技术,实现了接近FP16精度的推理效果,同时吞吐量提升1.6倍以上,为千亿级MoE模型在国产硬件上的产业化应用提供了关键技术支持。

环境版本与依赖清单

为确保部署兼容性,以下是本次部署的核心组件版本与硬件规格,建议严格遵循:

组件类别 组件名称/规格 版本/参数 用途说明
硬件载体 昇腾服务器规格 Atlas 800I A2(64GB)*2 模型推理的硬件基础,双机64G显存满足DeepSeek-R1-671B-0528 W8A8大模型需求
基础镜像 MindIE镜像 v0.9.1-dev-openeuler 预集成CANN、MindIE、torch_npu,vllm,vllm-ascend减少环境配置工作量
系统依赖 操作系统 openEuler 24.03 LTS 昇腾硬件推荐适配系统
编译工具 gcc/g++ gcc 12 / g++ 12;适配工具链7.3.0 编译模型依赖的C++组件,解决头文件缺失问题
Python依赖 Python版本 3.11 镜像内置,匹配依赖库版本
模型下载地址

为了方便开发者下载模型,以下提供了模型下载地址:

https://www.modelscope.cn/models/vllm-ascend/DeepSeek-R1-0528-W8A8

镜像下载地址

Docker镜像通过将应用及其所有依赖项打包在一起,确保了应用在任何环境中运行的结果都是一致的。华为官方提供了一系列已经配置好环境的镜像,通过下方镜像站直接下载的镜像,无需再配置vllm和vllm-ascend,ais-bench工具等环境,方便开发者直接推理模型。

https://quay.io/repository/ascend/vllm-ascend?tab=tags

本文下载的镜像版本为v0.9.1-dev-openeuler

启动容器

在下载好镜像后,可通过下方的命令直接启动容器运行进入docker的环境中,在此环境中做的任何操作都不会影响宿主机。

docker run --name ${docker-name} \
--net=host --shm-size=500g \  
--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/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 /dpc:/dpc \  
-p 8000:8000 \  
-it ${image-name} bash

注释:${docker-name}是容器名称,${image-name}是镜像名称,可以通过docker images查到,启动后,通过docker ps,找到${docker-name}后可通过docker exec -it ${docker-name} bash再次进入容器。

设置环境变量

在每个2个容器分别复制下方环境命令,并执行即可,具体环境变量的作用可在昇腾社区查找。本文只对需要专门修改的环境变量进行说明。

source /usr/local/Ascend/ascend-toolkit/set_env.sh
export HCCL_IF_IP=`hostname -I|awk -F" " '{print $1}'`
#ifconfig 查询获得(本机为enp61s0f0)
export HCCL_SOCKET_IFNAME=enp61s0f0
export TP_SOCKET_IFNAME=enp61s0f0
export GLOO_SOCKET_IFNAME=enp61s0f0
export HCCL_BUFFSIZE=1024
export HCCL_CONNECT_TIMEOUT=7200
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export HCCL_OP_EXPANSION_MODE=AIV
export TASK_QUEUE_ENABLE=1
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=100
export VLLM_USE_V1=1
export VLLM_LOGGING_LEVEL=WARNING

主节点启动

在主节点(Node 0)上执行如下命令启动服务,/mnt/nfs/deepseek/DeepSeek-R1-0528-W8A8\修改为模型权重路径即可

vllm serve /mnt/nfs/deepseek/DeepSeek-R1-0528-W8A8 \
--host 0.0.0.0 \
--port 8000 \
--trust-remote-code \
--gpu-memory-utilization 0.9 \
--no-enable-prefix-caching \
--max-model-len 8192\
--max-num-batched-tokens 8192 \
--max-num-seqs 256 \
--data-parallel-size 2 \
--data-parallel-size-local 1 \
--data-parallel-address 10.226.72.51 \
--data-parallel-rpc-port 13389 \
--tensor-parallel-size 8 \
--block-size=128 \
--seed 1024 \
--enable-expert-parallel \
--quantization ascend \
--additional-config '{"ascend_scheduler_config":{"enabled":false},"torchair_graph_config":{"enabled":true}}'

副节点执行命令

在主节点启动后,立刻在副节点(Node 1)执行如下命令即可,无需等待主节点给出提示

vllm serve /mnt/nfs/deepseek/DeepSeek-R1-0528-W8A8 \
--host 0.0.0.0 \
--port 8000 \
--trust-remote-code \
--headless \
--gpu-memory-utilization 0.9 \
--no-enable-prefix-caching \
--max-model-len 8192 \
--max-num-batched-tokens 8192 \
--max-num-seqs 256 \
--data-parallel-size 2 \
--data-parallel-size-local 1 \
--data-parallel-start-rank 1 \
--data-parallel-address 10.226.72.51 \
--data-parallel-rpc-port 13389 \
--tensor-parallel-size 8 \
--block-size=128 \
--seed 1024 \
--enable-expert-parallel \
--quantization ascend \
--additional-config '{"ascend_scheduler_config":{"enabled":false},"torchair_graph_config":{"enabled":true}}'

测试服务可用性

为了测试服务是否可用,可以通过下方命令进行简单的测试,如果需要性能测试或者精度测试,可以采用ais-bench进行,此工具具体使用方式可在昇腾社区查找。

curl -H "Accept:application/json" -H "Content-type:application/json" -X POST -d '{
"model": "/mnt/nfs/deepseek/DeepSeek-R1-0528-W8A8",
"stream": false,
"max_completion_tokens":20,
"messages":[
{"role":"user","content": "who are you?"}]
}' http://10.226.72.51:8000/v1/chat/completions
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐