一、环境准备
1.1 基础环境要求
本次部署需基于以下环境开展:
操作系统镜像:CTyunOS - CTyunOS 23.01.2@GalaxyCompute-NPU25.0.rc1.1 64 位
物理机实例:天翼云昇腾910B物理机(套餐规格:physical.Icas910b.2xlarge11)
1.2 NVME 磁盘挂载配置
为提升模型存储与服务运行性能,需将节点的nvme1n1
和nvme0n1
两块 NVME 盘分别挂载至/mnt/nvme1n1
和/mnt/nvme0n1
目录。可通过以下脚本实现自动化挂载及开机自动挂载配置:
#!/bin/bash
# 设备列表
devices=("/dev/nvme0n1" "/dev/nvme1n1")
mount_points=("/mnt/nvme0n1" "/mnt/nvme1n1")
fs_type="xfs"
# 确保 root 权限
if [[ $EUID -ne 0 ]]; then
echo "请使用 root 运行此脚本!"
exit 1
fi
for i in "${!devices[@]}"; do
device="${devices[$i]}"
mount_point="${mount_points[$i]}"
# 创建挂载目录
mkdir -p "$mount_point"
# 获取设备的文件系统类型
current_fs=$(blkid -s TYPE -o value "$device")
if [[ -z "$current_fs" ]]; then
echo "设备 $device 没有文件系统,正在格式化为 $fs_type..."
mkfs.xfs -f "$device"
else
echo "$device 已格式化为 $current_fs,跳过格式化"
fi
# 确保设备未被挂载后再尝试挂载
umount "$device" 2>/dev/null
mount -t "$fs_type" "$device" "$mount_point"
if [[ $? -ne 0 ]]; then
echo "错误:无法挂载 $device 到 $mount_point,请检查设备或文件系统!"
exit 1
fi
echo "$device 已成功挂载到 $mount_point"
# 获取 UUID 并更新 /etc/fstab,避免重复添加
uuid=$(blkid -s UUID -o value "$device")
if ! grep -q "$uuid" /etc/fstab; then
echo "UUID=$uuid $mount_point $fs_type defaults 0 0" >> /etc/fstab
echo "$device (UUID=$uuid) 已添加到 /etc/fstab"
else
echo "$device 已存在于 /etc/fstab,无需添加"
fi
done
echo "所有磁盘已成功挂载并配置为开机自动挂载!"
执行完成后,可通过以下命令验证磁盘挂载状态:
[root@new ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 4.2G 1 loop
sda 8:0 0 446.6G 0 disk
├─sda1 8:1 0 122M 0 part
├─sda2 8:2 0 976.6M 0 part /boot/efi
├─sda3 8:3 0 1.9G 0 part /boot
└─sda4 8:4 0 443.6G 0 part
├─system-lv_swap 253:0 0 16G 0 lvm [SWAP]
└─system-lv_root 253:1 0 427.6G 0 lvm /
nvme1n1 259:0 0 2.9T 0 disk
└─nvme1n1p1 259:4 0 2.9T 0 part /mnt/nvme1n1
nvme0n1 259:1 0 2.9T 0 disk
└─nvme0n1p1 259:3 0 2.9T 0 part /mnt/nvme0n1
说明
本文档部署架构中,/mnt/nvme1n1
用于存储模型文件及 MindIE 容器镜像,/mnt/nvme0n1
用于服务启动及运行目录。
1.3 部署脚本下载与解压
将部署所需脚本包下载至服务运行目录并解压,其中Qwen3-32B目录包含服务启停脚本(app_start.sh、app_stop.sh等)、配置文件(config.json)及相关运行目录。
cd /mnt/nvme0n1
wget https://jiangsu-10.zos.ctyun.cn/galaxy/deployment/qwen3-32b-hw-1node-v20250728.tar
tar xvf qwen3-32b-hw-1node-v20250728.tar
1.4 MindIE 容器镜像准备
MindIE 容器镜像是模型推理的运行环境载体,需按以下步骤准备:
1、创建镜像存储目录并下载镜像:
mkdir -p /mnt/nvme1n1/apptainer
cd /mnt/nvme1n1/apptainer
wget https://jiangsu-10.zos.ctyun.cn/galaxy/apptainer/mindie/mindie_2.0.RC2-800I-A2-py311-openeuler24.03-lts-qwen3.sif
2、在服务运行目录创建软链接,便于服务调用镜像:
cd /mnt/nvme0n1/Qwen3-32B
ln -s /mnt/nvme1n1/apptainer/mindie_2.0.RC2-800I-A2-py311-openeuler24.03-lts-qwen3.sif .
1.5 下载模型文件
将模型文件下载并保存在每个节点的/mnt/nvme1n1/model/ 目录下,并配置模型文件访问权限为750,确保服务可正常读取:
[root@new ~]# ls -l /mnt/nvme1n1/model/Qwen3-32B
total 64004232
-rwxr-x--- 1 root root 728 Jul 24 11:23 config.json
-rwxr-x--- 1 root root 73 Jul 24 11:23 configuration.json
-rwxr-x--- 1 root root 239 Jul 24 11:23 generation_config.json
-rwxr-x--- 1 root root 1671853 Jul 24 11:23 merges.txt
-rwxr-x--- 1 root root 3957109648 Jul 24 11:36 model-00001-of-00017.safetensors
。。。。。。
-rwxr-x--- 1 root root 3055341992 Jul 24 11:50 model-00017-of-00017.safetensors
-rwxr-x--- 1 root root 58330 Jul 24 11:46 model.safetensors.index.json
-rwxr-x--- 1 root root 16636 Jul 24 11:46 README.md
-rwxr-x--- 1 root root 9732 Jul 24 11:46 tokenizer_config.json
-rwxr-x--- 1 root root 11422654 Jul 24 11:46 tokenizer.json
-rwxr-x--- 1 root root 2776833 Jul 24 11:46 vocab.json
二、起停服务
2.1 配置Qwen3
根据具体使用的模型,修改app_start.sh 中的内容:
export MODEL_DIR=/mnt/nvme1n1/model/Qwen3-32B
export MINDIE_IMG=mindie_2.0.RC2-800I-A2-py311-openeuler24.03-lts-qwen3.sif
其中:
MODEL_DIR 为模型本地盘中的具体路径。
MINDIE_IMG为使用的mindie容器
设定服务启动主节点,修改config.json的内容:
...
"ServerConfig" :
{
"ipAddress": "192.168.0.50",
"managementIpAddress": "192.168.0.50",
...
将这里192.168.0.50 改为本机IP地址。
2.2 启动mindie推理服务
仅需如下1条命令,即可启动服务:
cd /mnt/nvme0n1/Qwen3-32B
sh app_start.sh
INFO: instance started successfully
Qwen3-32B 启动完成,日志:logs/log_2025-07-28_11-30-53.out
查看logs目录下的out文件,当出现如下信息时,服务启动:
tail -f logs/log_2025-07-28_11-30-53.out
Daemon start success!
2.3 查看mindie推理服务
查看作业运行信息:
$ apptainer instance list
INSTANCE NAME PID IP IMAGE
app-qwen3 1735711 /mnt/nvme0n1/Qwen3-32B-4npu/mindie_2.0.RC2-800I-A2-py311-openeuler24.03-lts-qwen3.sif
2.4 停止mindie推理服务
仅需一条命令即可停止mindie推理服务:
$ sh app_stop.sh
INFO: Stopping app-qwen3 instance of /mnt/nvme0n1/Qwen3-32B/mindie_2.0.RC2-800I-A2-py311-openeuler24.03-lts-qwen3.sif (PID=1735711)
如需清空log文件,可执行:
$ sh app_clean.sh
2.5 测试验证
使用服务器1025端口(可在config.json文件中修改)对服务可用性进行验证:
curl -i --location 'http://192.168.0.50:1025/v1/chat/completions' \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen3",
"stream": false,
"messages": [ {"role": "user", "content": "你是谁"} ]
}'
验证结果:
HTTP/1.1 200 OK
Keep-Alive: timeout=180, max=2147483647
Content-Length: 2326
Content-Type: application/json
Connection: close
RequestUUID: b43cdc0180c348a087c25dbbea04a068
{"id":"endpoint_common_0","object":"chat.completion","created":1753675122,"model":"qwen3","choices":[{"index":0,"message":{"role":"assistant","tool_calls":null,"content":"<think>\n好的,用户问“你是谁”,我需要给出一个简洁明了的回答。首先,我应该介绍自己的名字Qwen,然后说明我是通义实验室研发的超大规模语言模型。接下来,要列出我的主要功能,比如回答问题、创作文字、逻辑推理、编程等,这样用户能了解我的能力范围。还要提到我支持多语言,这样用户知道可以用不同语言交流。最后,保持友好,邀请用户提问,促进进一步的互动。要确保回答结构清晰,信息全面,但不过于冗长。检查有没有遗漏的重要信息,比如我的中文名通义千问,以及多语言支持的具体例子。确认语气友好专业,没有使用复杂术语,让用户容易理解。现在可以组织语言,确保流畅自然。\n</think>\n\n你好!我是Qwen,是通义实验室研发的超大规模语言模型。你可以叫我通义千问或Qwen。我能够回答问题、创作文字(比如写故事、公文、邮件、剧本等)、进行逻辑推理、编程,甚至表达观点和玩游戏。我支持多种语言,包括但不限于中文、英文、德语、法语、西班牙语等。\n\n有什么问题或需要帮助的,尽管告诉我!"},"logprobs":null,"finish_reason":"stop"}],"usage":{"prompt_tokens":10,"completion_tokens":253,"total_tokens":263},"prefill_time":80,"decode_time_arr":[65,36,36,36,36,36,37,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,35,36,36,36,36,36,36,36,36,35,36,36,36,36,36,36,36,36,36,36,36,36,36,37,36,36,36,36,36,36,37,36,36,36,51,36,36,36,37,37,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,37,36,36,36,37,37,36,36,36,36,36,37,36,36,36,36,36,36,36,36,36,36,36,36,37,36,36,36,37,36,36,37,36,37,36,36,36,36,37,36,36,36,36,37,36,37,37,36,36,37,37,37,36,37,36,38,37,36,36,36,37,36,36,37,37,36,36,37,36,36,36,36,38,36,36,37,37,36,36,37,36,36,36,36,37,36,36,36,37,36,36,36,37,38,37,37,36,36,36,43,37,36,36,37,37,36,40,37,37,36,36,37,37,36,36,36,42,38,36,36,36,36,37,36,36,45,37,36,36,37,37,38,36,37,37,36,36,36,36,37,36,37,37,36,36,36,36,37,36,36,37,37,36,36,36,37,37,37,37,36,39,36,37,37,37]}
三、总结
本文档详细介绍了在天翼云昇腾910B物理机上部署 Qwen3-32B 推理服务的完整流程,包括环境准备(磁盘挂载、脚本与镜像下载、模型配置)、服务配置、启停操作及可用性验证。通过遵循本文档步骤,可高效完成模型推理服务的部署与上线,充分利用天翼云昇腾910B物理机的高性能计算能力。