UOS V2500 昇腾CANN异构平台部署vLLM服务手册-310P3卡
·
部署环境
服务器:鲲鹏 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 |
更多推荐


所有评论(0)