vLLM-Ascend双机混部DeepSeek-R1-671B-0528 W8A8量化模型

作者:昇腾PAE技术支持团队

昇腾案例库简介https://agent.blog.csdn.net/article/details/155446713
昇腾案例库限时开放https://gitcode.com/invite/link/8791cccc43cb4ee589e8

(如对本文有疑问,请移步案例库提交issue,专人答疑)


背景与前置说明

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的环境中,在此环境中做的任何操作都不会影响宿主机。

bash 复制代码
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个容器分别复制下方环境命令,并执行即可,具体环境变量的作用可在昇腾社区查找。本文只对需要专门修改的环境变量进行说明。

bash 复制代码
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\修改为模型权重路径即可

bash 复制代码
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)执行如下命令即可,无需等待主节点给出提示

bash 复制代码
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进行,此工具具体使用方式可在昇腾社区查找。

bash 复制代码
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
相关推荐
IT_陈寒2 小时前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
用户3521802454754 小时前
🎆从 Prompt 到 Skill:让 Spring AI Agent 学会"装新技能"
人工智能·spring boot·ai编程
米小虾4 小时前
手把手教你搭建第一个生产级AI Agent:从选型到实战的完整指南
人工智能·agent
任沫4 小时前
Agent之Function Call
javascript·人工智能·go
米小虾4 小时前
2026年AI Agent全面爆发:从开源生态到企业级应用的进化之路
人工智能·agent
用户6919026813394 小时前
Vibe Coding 开发项目的基本范式
人工智能·设计模式·代码规范
To_OC5 小时前
别再跟 AI 死磕 prompt 了,我写了个 Loop 让它自己改到满意为止
人工智能·aigc·agent
血小溅5 小时前
三大 AI 编码框架深度对比:GSD vs OpenSpec vs Superpowers
人工智能·后端
武子康8 小时前
调查研究-186 LangChain 和 LangGraph 的区别:从快速构建 Agent 到生产级工作流编排
人工智能·langchain·llm
武子康9 小时前
调查研究-185 CodeGraph 调研:给 AI 编程 Agent 一张代码库地图,少一点反复 grep(2026)
人工智能·openai·claude