部署环境

服务器:鲲鹏 920 服务器(aarch64)
NPU 卡:昇腾 310P3
操作系统:UOS V2500
CANN 版本:8.2.RC1 > 注意:(必须)
PyTorch 版本:2.7.1
torch_npu 插件:2.7.1
Python版本:Python3.11.6
vLLM版本:v0.10.0
vLLM-Ascend版本:v0.10.0rc1
大模型:DeepSeek-R1-Distill-Qwen-1.5B

安装NPU驱动、固件以及CANN异构平台环境

CANN异构平台环境部署参考“UOS V2500 昇腾 CANN 异构平台部署手册”文档。
注意:如果使用容器化部署则只需安装NPU驱动与固件。

物理机部署方案

安装部署Pytorch框架
# 设置pip源
pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple  
# 下载软件包 
wget https://download.pytorch.org/whl/cpu/torch-2.7.1%2Bcpu-cp311-cp311-manylinux_2_28_aarch64.whl

# 安装命令 
pip3 install torch-2.7.1+cpu-cp311-cp311-manylinux_2_28_aarch64.whl
安装torch_npu插件
# 下载插件包 
wget https://gitcode.com/Ascend/pytorch/releases/download/v7.2.0-pytorch2.7.1/torch_npu-2.7.1-cp311-cp311-manylinux_2_28_aarch64.whl 
# 安装命令 
pip3 install torch_npu-2.7.1-cp311-cp311-manylinux_2_28_aarch64.whl

注意:注:其他版本Pytorch、torch_npu安装参考昇腾安装文档。https://www.hiascend.com/document/detail/zh/Pytorch/720/configandinstg/instg/insg_0004.html

安装vLLM 和 vllm-ascend
# 安装服务依赖
yum update -y && yum install -y gcc g++ cmake numactl-devel wget git curl jq python3-devel python3-libs
# 源码安装vllm
git clone --depth 1 --branch v0.10.0 https://gitee.com/cdpro/vllm.git
cd vllm
VLLM_TARGET_DEVICE=empty pip install -v -e .
cd ..

# 安装vllm-ascend
export CPLUS_INCLUDE_PATH=/usr/include/c++/12:/usr/include/c++/12/aarch64-uos-linux
export PIP_EXTRA_INDEX_URL=https://mirrors.huaweicloud.com/ascend/repos/pypi
export SOC_VERSION=ASCEND310P3
git clone --depth 1 --branch v0.10.0rc1 https://gitee.com/cdpro/vllm-ascend.git
cd vllm-ascend
pip install -v -e . --extra-index https://download.pytorch.org/whl/cpu/
启动vLLM服务
vllm serve /root/ascend/models/DeepSeek-R1-Distill-Qwen-1.5B  --served-model-name=deepseek  --host 0.0.0.0   --dtype=float16  --tensor-parallel-size 1 --max-model-len 4096 --enforce-eager --compilation-config '{"level":0,"use_inductor":false,"cudagraph_mode":"none"}'
验证vLLM服务
curl -X POST http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek",
    "messages": [{"role": "user", "content": "你好,请介绍一下自己"}],
    "temperature": 0.7,
    "max_tokens": 200,
    "stream": false
  }'

容器化部署方案(推荐使用)

docker run \
--name vllm-ascend \
--shm-size=10g \
--ulimit nofile=65535:65535 \
--privileged \
--device /dev/davinci0 \
--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 /root/ascend/models:/home/models \
-p 8000:8000 \
-itd registry.uniontech.com/uos-ai/uos-server-2500-vllm-ascend:V0.10.0rc1-310p \
--model /home/models/DeepSeek-R1-Distill-Qwen-1.5B \
--served-model-name=deepseek \
--dtype=float16 \
--max-model-len 4096 \
--enforce-eager \
--tensor-parallel-size 1 \
--host 0.0.0.0 \
--compilation-config '{"level":0,"use_inductor":false,"cudagraph_mode":"none"}' \
--disable-log-requests \  
--no-enable-prefix-caching
验证 vLLM 服务
curl -X POST http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek",
    "messages": [{"role": "user", "content": "你好,请介绍一下自己"}],
    "temperature": 0.7,
    "max_tokens": 200,
    "stream": false
  }'
Docker 容器运行核心参数(容器层面)
参数 详细说明
docker run Docker 启动容器的核心命令
--rm 容器停止后自动删除容器实例,避免残留无用容器占用磁盘/资源
--name vllm-ascend 给容器命名为vllm-ascend,方便通过docker ps/docker logs/docker exec等命令管理
--shm-size=10g 设置容器的共享内存(Shared Memory)大小为 10GB

✨ 必要性:vLLM 运行时需要大量共享内存存储 KV 缓存,昇腾 NPU 环境下默认 shm 太小会导致内存不足
--privileged 赋予容器特权模式

✨ 必要性:昇腾 NPU 设备需要容器拥有更高的系统权限,才能正常访问 /dev 下的 NPU 设备节点、加载驱动相关文件
--device /dev/davinci0 将宿主机的昇腾 NPU 0 号卡设备节点挂载到容器内

✨ 备注:若使用多卡可添加--device /dev/davinci1
--device /dev/davinci_manager 挂载昇腾 NPU 设备管理节点,用于 NPU 卡的状态管理、资源分配
--device /dev/devmm_svm 挂载昇腾共享虚拟内存设备节点,支持 NPU 的内存虚拟化和高效数据交换
--device /dev/hisi_hdc 挂载昇腾调试通道设备节点,用于 NPU 与宿主的通信、调试指令传输
-v /usr/local/dcmi:/usr/local/dcmi 挂载昇腾 DCMI(设备监控管理接口)工具目录,容器内可通过 dcmi 工具监控 NPU 状态
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi 挂载昇腾npu-smi工具,容器内可执行npu-smi info查看 NPU 状态
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ 挂载昇腾驱动的核心库文件,容器内的 vLLM / 昇腾插件需要依赖这些库访问 NPU
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info 挂载驱动版本信息文件,vLLM-ascend 插件会读取该文件确认驱动版本兼容性
-v /etc/ascend_install.info:/etc/ascend_install.info 挂载昇腾安装配置文件,确认 NPU 的安装路径、版本等基础信息
-v /root/.cache:/root/.cache 挂载宿主机的缓存目录到容器

✨ 必要性:避免容器内重复下载模型 / 依赖包,提升启动速度,节省磁盘空间
-v /root/ascend/models:/home/models 将宿主机的模型目录挂载到容器内的/home/models,vLLM 可直接读取该目录下的模型文件
-p 8000:8000 端口映射:将宿主机的 8000 端口映射到容器内的 8000 端口

✨ 必要性:外部可通过宿主机 IP:8000访问 vLLM 的 OpenAI 兼容 API
-it 组合参数:

- -i:保持标准输入(STDIN)打开,支持交互式操作

- -t:分配伪终端(Pseudo-TTY),让容器内的命令行有终端交互体验
uos-server-2500-vllm-ascend:v0.10.0rc1-310p 指定要运行的 Docker 镜像名称 + 版本(昇腾适配的 vLLM 镜像,基于 UOS 系统)
vLLM 业务参数(应用层面)

这部分参数是传递给vllm.entrypoints.openai.api_server的业务参数,控制模型加载、推理、API 服务的行为:

参数 详细说明
--model /home/models/DeepSeek-R1-Distill-Qwen-1.5B 指定要加载的模型路径(容器内路径,对应宿主机/root/ascend/models
--served-model-name=deepseek 设置 API 服务中展示的模型名称,调用 API 时可通过model: deepseek指定该模型
--dtype=float16 设置模型推理时的数据类型为 16 位浮点数

✨ 必要性:昇腾 NPU 对 float16 优化更好,且能节省内存(对比 float32)
--max-model-len 4096 设置模型支持的最大序列长度(输入 + 输出)为 4096 tokens

✨ 备注:需与模型本身的最大上下文长度匹配(DeepSeek-R1-Distill-Qwen-1.5B 支持 4096)
--enforce-eager 强制启用 Eager 模式(禁用 torch.compile 的图编译)

✨ 核心作用:绕开昇腾 NPU 驱动 / 固件版本不匹配导致的图捕获失败问题(你之前启动失败的关键修复项)
--host 0.0.0.0 设置 API 服务监听的 IP 地址为 0.0.0.0(所有网卡)

✨ 必要性:默认监听 127.0.0.1 时,容器外部无法访问,设为 0.0.0.0 才能通过宿主机 IP 访问
--compilation-config '{"level":0,"use_inductor":false,"cudagraph_mode":"none"}' 自定义 torch.compile 的编译配置:

- level:0:禁用编译优化

- use_inductor:false:禁用 PyTorch Inductor 编译器

- cudagraph_mode:none:禁用 CUDA Graph(昇腾 NPU 不兼容该特性)
--disable-log-requests 禁用请求级别的日志输出

✨ 作用:减少日志冗余,提升服务性能,仅保留核心日志
--enable-prefix-caching=False 禁用前缀缓存(Prefix Caching)

✨ 必要性:前缀缓存要求block_size=128,禁用后避免因 block_size 不匹配导致的警告 / 错误
--tensor-parallel-size 卡的 core 核数量,例如 pro 卡 1 张卡就是 1,如果是 duo 卡 1 张卡要设置成 2
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐