在人工智能飞速发展的大背景下,算力是关键支撑。为了实时提供灵活且强大的计算资源调配能力,昇腾 910B 物理机以强劲的硬件性能为基础,搭配 DeepSeek 先进的算法框架,三者结合,将为 AI 研究与应用开拓更广阔的创新空间。本部署指南适配华为昇腾 910B NPU硬件平台,集成MindIE的2.0.T6版本推理引擎,能显著优化端到端推理性能。
一、环境准备
1.1 软硬件要求
组件类型 规格要求 数量
计算节点 华为Atlas 800T A2训练服务器 1台
NPU加速卡 昇腾910B-32 (单卡算力320TFLOPS) ≥4卡
本地存储 NVMe SSD ≥5.8TB (2*2.9T) 2块
内存 DDR4 ≥512GB -
管理节点 CTyunOS-23.01.2@GalaxyMaster-NPU24.1.rc2.1镜像
1.2 存储配置
1.2.1 磁盘分区方案
将节点的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 "所有磁盘已成功挂载并配置为开机自动挂载!"
$ 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/nvme0n1:部署MindIE容器、启动服务及运行日志
/mnt/nvme1n1:存储模型文件和mindie容器镜像(需确保750权限)
1.3 软件部署
1.3.1 获取部署包
cd /mnt/nvme0n1
wget https://jiangsu-10.zos.ctyun.cn/galaxy/deployment/deepseek-hw-1node-v20250331.tar
tar xvf deepseek-hw-1node-v20250331.tar
1.3.2 更新MindIE镜像
mkdir -p /mnt/nvme1n1/apptainer
cd /mnt/nvme1n1/apptainer
wget https://jiangsu-10.zos.ctyun.cn/galaxy/apptainer/mindie/mindie_2.0.T6.B023-800I-A2-py3.11-openeuler24.03-lts-aarch64.sif
cd /mnt/nvme0n1/deepseek
ln -s /mnt/nvme1n1/apptainer/mindie_2.0.T6.B023-800I-A2-py3.11-openeuler24.03-lts-aarch64.sif .
注意华为 MindIE 容器升级⾄ **T6** 版本,能够优化推理执行性能,显著提升整体系统表现。
1.4 模型准备
将模型文件下载并保存在每个节点的/mnt/nvme1n1/model/ 目录下,这里以量化版DeepSeek-R1模型举例:
$ ll /mnt/nvme1n1/model/DeepSeek-R1-Distill-Llama-70B
total 137809304
-rwxr-x--- 1 root root 879 Mar 6 13:42 config.json
-rwxr-x--- 1 root root 181 Mar 6 13:42 generation_config.json
-rwxr-x--- 1 root root 1064 Mar 6 13:42 LICENSE
-rwxr-x--- 1 root root 8946552810 Mar 6 13:42 model-00001-of-000017.safetensors
...
-rwxr-x--- 1 root root 60337 Mar 6 13:42 model.safetensors.index.json
-rwxr-x--- 1 root root 18985 Mar 6 13:42 README.md
-rwxr-x--- 1 root root 3061 Mar 6 13:42 tokenizer_config.json
-rwxr-x--- 1 root root 9084480 Mar 6 13:42 tokenizer.json
注意可联系公有云事业部通过对等连接方式进行快速模型罐装。
二、服务管理
2.1 服务配置
2.1.1 核心参数设置
根据具体使用的模型,修改run.sh 中的内容:
export MODEL_DIR=/mnt/nvme1n1/model/DeepSeek-R1-Distill-Llama-70B
export MINDIE_IMG=mindie_2.0.T6.B023-800I-A2-py3.11-openeuler24.03-lts-aarch64.sif
其中:
- MODEL_DIR 为模型本地盘中的具体路径
- MINDIE_IMG为使用的mindie容器
设定服务启动主节点,修改config.json的内容:
...
"ServerConfig" :
{
"ipAddress" : "192.168.0.3",
"managementIpAddress" : "192.168.0.3",
...
将这里192.168.0.3 改为本机IP地址。
2.2 DeepSeek服务启动
仅需如下3条命令,即可启动服务(根据模型大小,启动服务需等待5-30分钟不等)
cd /mnt/nvme0n1/deepseek
sh run.sh
INFO: instance started successfully
查看log_ds目录下的out文件,当出现如下信息时,表示服务启动成功:
tail -f log_ds/webui_2025-03-20_16-09-26.out
Daemon start success!
2.3 查看DeepSeek状态
# 查看容器实例作业运行信息命令
apptainer instance list
2.4 DeepSeek服务停止
# 停止DeepSeek服务命令
apptainer instance stop app-mindie
三、运维验证
检查项 验证命令 预期结果
NPU设备状态 watch -n 1 npu-smi info 显示所有NPU状态为OK
容器运行状态 apptainer instance list app-mindie状态为running
服务端口监听 ` netstat -tunlp|grep xxx` xxx端口处于LISTEN状态