如何在NPU上部署大模型(Qwen3-30B-A3B)?
本文介绍了在NPU服务器上部署Qwen3-30B-A3B大模型的完整流程。主要内容包括:1)准备工作,如硬件要求、驱动安装、docker环境和镜像资源;2)详细部署步骤,包含镜像拉取、宿主机配置(设备挂载、模型路径映射)、容器内服务启动参数设置;3)验证方法,通过API接口测试和Python示例代码检查模型推理功能。特别强调了NPU设备挂载、tensor并行参数配置等关键环节,适用于OpenEul
0. 资源汇总
0.0 硬件要求:搭载NPU的服务器设备
0.1 下载固件与驱动:商用版-固件与驱动-昇腾社区
在终端中输入npu-smi info,若输出完整信息,则驱动安装成功。
0.2 安装docker:openEuler(华为欧拉)安装docker - 木人草 - 博客园
0.3 镜像资源[RED HAT]:quay.io/ascend/vllm-ascend:main
0.4 参考教程[wiki]:安装指南 vllm-project/vllm-ascend - KoalaWik
0.5 Qwen3-30B-A3B模型下载:MindSDK/Qwen3-30B-A3B | 魔乐社区
1. 具体部署流程
1.1 拉取镜像
由于NPU服务器官方推荐OS是OpenEuler,因此选择对应版本的镜像;不做硬性要求,也可以进入0.3中介绍的官网查看其他镜像,拉取别的镜像,修改下面网址末尾冒号后面的名字即可。
# 拉取指定路径的镜像
docker pull quay.io/ascend/vllm-ascend:main-openeuler
1.2 宿主机操作
1.2.1 将模型挂载到容器内
# 设置待使用的镜像
export IMAGE=quay.io/ascend/vllm-ascend:main-openeuler
# 设置模型在宿主机上的路径和希望在容器内挂载的路径
export HOST_MODEL_DIR=/root/models/MindSDK/Qwen3-30B-A3B # 根据模型的实际存放路径修改
export CONTAINER_MODEL_DIR=/root/models/Qwen3-30B-A3B # 容器内的目标路径,可自定义
下载模型可以参考资源汇总的0.5。
1.2.2 创建容器
docker run --rm -it \
--name vllm-ascend-container \
--device /dev/davinci0 \
--device /dev/davinci1 \
--device /dev/davinci2 \
--device /dev/davinci3 \
--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 ${HOST_MODEL_DIR}:${CONTAINER_MODEL_DIR} \
-p 8000:8000 \
$IMAGE /bin/bash
有的终端换行时候容易出错误,如果出错误,可以用LLM把命令改写为1行。
改写后的1行命令:
docker run --rm -it --name vllm-ascend-container --device /dev/davinci0 --device /dev/davinci1 --device /dev/davinci2 --device /dev/davinci3 --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 ${HOST_MODEL_DIR}:${CONTAINER_MODEL_DIR} -p 8000:8000 $IMAGE /bin/bash
1.3 容器内操作
# 在容器内执行
python -m vllm.entrypoints.openai.api_server \
--model /root/models/Qwen3-30B-A3B \
--trust-remote-code \
--host 0.0.0.0 \
--port 8000 \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.9 \
--served-model-name Qwen3-30B-A3B
有的终端换行时候容易出错误,如果出错误,可以用LLM把命令改写为1行。
改写后的1行命令:
python -m vllm.entrypoints.openai.api_server --model /root/models/Qwen3-30B-A3B --trust-remote-code --host 0.0.0.0 --port 8000 --tensor-parallel-size 4 --gpu-memory-utilization 0.9 --served-model-name Qwen3-30B-A3B
注意,tensor-parallel-size通常设置为2的次方数。例如对于此模型,attention head是32,因此tensor并行应该选择能被32整除的内容。
2. 在容器外检查是否部署成功
2.1 curl检查
# 1.检查服务是否存活
curl http://localhost:8000/health
# 预期响应: 容器外部空响应 + 容器内部显示200 OK
# 2.查看已加载的模型
curl http://localhost:8000/v1/models
# 预期响应: JSON格式的模型信息
{
"object": "list",
"data": [
{
"id": "Qwen3-30B-A3B",
"object": "model",
"created": 1760692486,
"owned_by": "vllm",
"max_model_len": 40960,
// ... 其他模型信息
}
]
}
# 3.基础聊天测试
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen3-30B-A3B",
"messages": [
{"role": "user", "content": "你好,请简单介绍蔡徐坤"}
],
"max_tokens": 100
}'
如果返回对应的响应,则代表模型部署成功。
2.2 smoke程序检查模型是否可以正常推理
from openai import OpenAI
client = OpenAI(
api_key="EMPTY",
base_url="http://localhost:8000/v1"
)
messages = [
{"role": "system", "content": "你是一个乐于助人的助手。"},
{"role": "user", "content": "请赏析《只因你太美》这首歌曲。"}
]
try:
# 发送请求到容器内的vLLM服务
response = client.chat.completions.create(
model="Qwen3-30B-A3B", # 与你启动服务时指定的名称一致
messages=messages,
temperature=0.7,
max_tokens=500
)
# 打印模型回复
print("模型回复:")
print(response.choices[0].message.content)
print("\\n使用情况:")
print(f"总令牌数: {response.usage.total_tokens}")
print(f"提示令牌: {response.usage.prompt_tokens}")
print(f"完成令牌: {response.usage.completion_tokens}")
except Exception as e:
print(f"请求出错: {e}")
更多推荐


所有评论(0)