作者:SpaderMan
原文地址: https://spader-ai.com/blog/2025-04-17-deepseek-r1-671b-deployment-guide
本文将详细阐述基于物理机服务的 Deepseek-R1-671b 多机部署方案,基于 4 台 8 卡昇腾 910B GPU 物理机和 2 台 8 卡昇腾 910B GPU 物理机进行最佳实践,内容涵盖环境准备、服务启动与故障处理三个方面。
注意
-
4 台昇腾 910B 物理机服务器可以部署 DeepSeek-R1/V3 671B 版本,2 台昇腾 910B 物理机服务器可以部署 DeepSeek-R1/V3 671B W8A8 量化版本。 -
所用驱动的版本及相关软件不排除官方近期有版本更新。
预告
在下次分享中,我们会展示依照此篇部署指南搭建的环境中对 DeepSeek 进行 压测及调优的最终测试报告,敬请期待。同时,如果您对相关技术感兴趣,可以扫描文末二维码,入群讨论和分享您的观点,感谢。
准备工作
硬件需求概览
-
BF16 版本部署: 4 台配备昇腾 910B GPU 的服务器 -
W8A8 量化版本部署: 2 台配备昇腾 910B GPU 的服务器 -
每台服务器推荐配置: -
CPU: 64 核以上(实际测试环境:192 核) -
内存: 512GB 以上(实际测试环境:2048GB) -
存储: 2TB 以上 SSD 存储(实际测试环境:4x3.2TB) -
网络: 100Gbps RDMA 网络互联(实际测试环境:25G 网络)
软件需求概览
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
系统环境准备
开通物理机资源
在我们的实践中,我们申请了 Spader.AI[1] 的 4 台 910B 裸金属云资源。
具体配置为:
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
初始化系统
连接到服务器后,执行以下命令完成系统初始化:
# 更新系统
sudo apt update && sudo apt upgrade -y
# 设置系统参数
sudo bash -c 'cat >> /etc/sysctl.conf << EOF
net.core.rmem_max=26214400
net.core.wmem_max=26214400
net.ipv4.tcp_rmem=4096 87380 26214400
net.ipv4.tcp_wmem=4096 65536 26214400
EOF'
sudo sysctl -p
# 设置用户限制
sudo bash -c 'cat >> /etc/security/limits.conf << EOF
* soft nofile 1048576
* hard nofile 1048576
* soft memlock unlimited
* hard memlock unlimited
EOF'
安装依赖
# 安装基本工具
sudo apt update && sudo apt install -y ca-certificates curl gnupg \
lsb-release build-essential cmake git wget vim htop iotop
# 安装Python环境
sudo apt install -y python3-dev python3-pip
pip3 install -U pip
# 安装必要的Python包
pip3 install numpy scipy pandas scikit-learn matplotlib torch \
torchvision
安装 Docker
使用阿里云镜像安装 Docker 可以加速下载过程:
# 安装 Docker 依赖
sudo apt install -y apt-transport-https ca-certificates curl \
software-properties-common gnupg
# 添加阿里云 Docker 镜像仓库证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg |\
sudo gpg --dearmor -o /etc/apt/keyrings/aliyun-docker.gpg
# 添加 Docker 仓库
echo \
"deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/aliyun-docker.gpg] \
https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo \
tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 启动 Docker 服务
sudo systemctl enable docker
sudo systemctl start docker
昇腾环境配置
检查驱动和固件版本
在实际部署过程中,我们首先需要检查当前系统的驱动和固件版本:
# 查看当前驱动和固件版本
for i in {0..7}; do \
npu-smi info -t board -i $i | grep Version; \
done
输出结果示例:
Software Version : x.x.x.x # 驱动版本
Firmware Version : x.x.x.x # 固件版本
检查相关版本是否符合中前文中提到的固件及软件版本要求, 如果符合,则可以跳过此步骤,否则需要下载和安装最新版本的驱动和固件。
-
驱动版本 >= 24.1.rc3 -
固件版本 >= 7.5.0.1.129
驱动和固件升级
⚠️ 重要提示: 驱动和固件升级是关键步骤,错误操作可能导致设备不可用。请用户详细阅读官方的 升级前必读[2] 文档,根据文档说明进行升级。
注意事项
-
升级分为 deb包、rpm包、run包,可根据官方文档[3]选择合适的安装包格式 -
安装顺序: -
首次安装: 驱动 → 固件 -
覆盖安装或升级: 固件 → 驱动 -
升级后是否需要重启,请仔细阅读相关文档 -
升级完成后必须检查版本确认升级成功
固件以及驱动下载地址
昇腾 910B 固件以及驱动下载地址: https://www.hiascend.com/hardware/firmware-drivers/community?product=4&model=32&cann=8.0.0.alpha002&driver=1.0.RC2
运行 DeepSeek-R1/DeepSeek-V3 模型需要下载的固件以及驱动包:
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
备注 :本次此次为升级,因此需要按照"固件->驱动"的顺序来处理,安装包格式确认为 run 包。
固件升级
固件升级包为 Ascend-hdk-910b-npu-firmware_7.5.0.1.129.run
# 增加执行权限
chmod +x Ascend-hdk-910b-npu-firmware_7.5.0.1.129.run
# 校验文件完整性
./Ascend-hdk-910b-npu-firmware_7.5.0.1.129.run --check
# 升级固件
sudo ./Ascend-hdk-910b-npu-firmware_7.5.0.1.129.run --upgrade
若系统出现如下关键回显信息,表示升级成功。
Firmware package upgraded successfully!
备注:因为接下来会升级配套版本的驱动,因此无需重启系统,驱动升级后固件版本会自动生效。
驱动安装
驱动安装包为 Ascend-hdk-910b-npu-driver_24.1.rc3_linux-aarch64.run
# 增加执行权限
chmod +x Ascend-hdk-910b-npu-driver_24.1.rc3_linux-aarch64.run
# 校验文件完整性
./Ascend-hdk-910b-npu-driver_24.1.rc3_linux-aarch64.run --check
# 安装驱动
sudo ./Ascend-hdk-910b-npu-driver_24.1.rc3_linux-aarch64.run \
--upgrade
若系统出现如下关键回显信息,表示升级成功。
Firmware package upgraded successfully!
执行如下命令,检查升级后的版本号。
/usr/local/Ascend/driver/tools/upgrade-tool --device_index -1 \
--system_version
准备容器镜像
昇腾官方针对 DeepSeek-R1-671b / DeepSeek-R1-671b W8A8 量化版有可以直接部署的镜像,可前往昇腾社区/开发资源下载适配。
备注:镜像需要申请方可下载。普通用户按要求填写申请即可,通常需要 2-4 个小时通过审核。
下载地址: https://www.hiascend.com/developer/ascendhub/detail/af85b724a7e5469ebd7ea13c3439d48f
注意:量化版本(DeepSeek-R1-W8A8、DeepSeek-V3-W8A8)需要使用 mindie:2.0.T3 版本
镜像申请通过后,即可下载。
镜像拉取:
docker pull swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:2.0.T3-800I-A2-py311-openeuler24.03-lts
备注:弹出的拉取信息会在 6 小时后过期,请及时拉取。
完成之后,请使用 docker images 命令确认查找具体镜像名称与标签。
模型权重准备
权重下载
DeepSeek-R1/DeepSeek-V3 的模型权重有如下下载形式:
-
官方渠道:通过 HuggingFace[4] 下载 a. DeepSeek-R1:https://huggingface.co/deepseek-ai/DeepSeek-R1 b. DeepSeek-V3:https://huggingface.co/deepseek-ai/DeepSeek-V3 -
魔乐社区:通过 魔乐社区[5] 下载 a. DeepSeek-R1:https://modelers.cn/models/State_Cloud/DeepSeek-R1-origin b. DeepSeek-V3:https://modelers.cn/models/State_Cloud/DeepSeek-V3-origin c. DeepSeek-R1-W8A8:https://modelers.cn/models/State_Cloud/DeepSeek-R1-W8A8 d. DeepSeek-V3-W8A8:https://modelers.cn/models/State_Cloud/DeepSeek-V3-W8A8
国内推荐通过魔乐社区下载,下载速度可以达到 50M/s 以上。详细信息可以参考: https://modelers.cn/updates/zh/modelers/20250213-deepseek%E6%9D%83%E9%87%8D%E4%B8%8B%E8%BD%BD/
下载和准备模型
存储空间需求:
-
DeepSeek-R1 模型的 FP8原始权重文件大小约为 700GB -
转换为昇腾 910B 支持的 BF16类型后,约 1.4TB -
总计需要至少 2.1TB 以上的存储空间
魔乐社区支持 openmind_hub 下载和 Git 下载两种方式
本次采用 openmind_hub 方式下载,下载脚本如下:
#!/usr/bin/env python3
import os
from openmind_hub import snapshot_download
snapshot_download(
repo_id="State_Cloud/DeepSeek-R1-origin",
local_dir="/data/models/deepseek-r1",
local_dir_use_symlinks=False,
)
⚠️ 重要: 运行前必须通过环境变量设定敏感路径白名单 HUB_WHITE_LIST_PATHS,指定模型下载路径:
export HUB_WHITE_LIST_PATHS="/data/models/deepseek-r1"
模型转换
昇腾 910B 需要 bfp8 类型模型,因此需要进行模型转换。
DeepSeek 官方没有针对 DeepSeek-R1 提供新的权重转换脚本,需要复用 DeepSeek-V2 的权重转换脚本,执行下面命令进行权重转换。
# 克隆模型转换脚本
git clone https://gitee.com/ascend/ModelZoo-PyTorch.git
# 进入模型转换脚本目录
cd ModelZoo-PyTorch/MindIE/LLM/DeepSeek/DeepSeek-V2/NPU_inference
# 执行转换
# 其中 /data/models/deepseek-r1 表示DeepSeek-R1原始权重路径
#/data/models/deepseek-r1-bf16 表示权重转换后的新权重路径。
python fp8_cast_bf16.py \
--input-fp8-hf-path /data/models/deepseek-r1 \
--output-bf16-hf-path /data/models/deepseek-r1-bf16
注意 ⚠️:
-
模型转换时间较长,请提前确保好磁盘空间,避免中断。 -
转换脚本不会自动复制 tokenizer 等文件,需手动操作。
多机部署
启动推理服务 Docker 容器
在每台服务器上执行以下命令启动 Docker 容器,模型权重需要放到容器的 /workspace 目录下,后期 mindie 推理服务会读取该路径下的模型权重。其它的挂载都是常规的驱动或者工具,按照要求挂载即可。
docker run -itd --privileged --name=deepseek-r1 --net=host \
--shm-size 500g \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device /dev/devmm_svm \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/bin/hccn_tool:/usr/bin/hccn_tool \
-v /usr/local/sbin:/usr/local/sbin \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \
-v /etc/hccn.conf:/etc/hccn.conf \
-v /data/models/deepseek-r1-bf16:/workspace \
swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:2.0.T3-800I-A2-py311-openeuler24.03-lts \
bash
备注:
-
/data/models/deepseek-r1-bf16为转换后的模型权重路径。 -
不要遗漏 --shm-size 500g参数,否则后期启动mindie推理服务会报错。 -
镜像版本为 swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:2.0.T3-800I-A2-py311-openeuler24.03-lts,请根据实际情况选择合适的镜像版本。
推理服务准备
推理服务容器检查
多机部署推理前,需要在每台机器的推理服务 Docker 容器内执行以下命令检查网络配置。出现问题时,可以先排查下本机是否正常,容器内问题一般都是相关目录没有挂载好。
# 检查物理链接
for i in {0..7}; do hccn_tool -i $i -lldp -g | grep Ifname; done
# 输出结果示例:
Ifname: 200GE1/0/9
Ifname: 200GE1/0/10
Ifname: 200GE1/0/11
Ifname: 200GE1/0/12
Ifname: 200GE1/0/13
Ifname: 200GE1/0/14
Ifname: 200GE1/0/15
Ifname: 200GE1/0/16
# 检查链接情况
for i in {0..7}; do hccn_tool -i $i -link -g ; done
# 输出结果示例:
link status: UP
link status: UP
link status: UP
link status: UP
link status: UP
link status: UP
link status: UP
link status: UP
# 检查网络健康情况
for i in {0..7}; do hccn_tool -i $i -net_health -g ; done
# 输出结果示例:
net health status: Success
net health status: Success
net health status: Success
net health status: Success
net health status: Success
net health status: Success
net health status: Success
net health status: Success
# 查看侦测ip的配置是否正确
for i in {0..7}; do hccn_tool -i $i -netdetect -g ; done
# 输出结果示例:
netdetect address: 10.52.27.1
netdetect address: 10.52.27.1
netdetect address: 10.52.27.1
netdetect address: 10.52.27.1
netdetect address: 10.52.27.1
netdetect address: 10.52.27.1
netdetect address: 10.52.27.1
# 查看网关是否配置正确
for i in {0..7}; do hccn_tool -i $i -gateway -g ; done
# 输出结果示例:
default gateway:10.52.27.1, Iface:eth0
default gateway:10.52.27.1, Iface:eth1
default gateway:10.52.27.1, Iface:eth2
default gateway:10.52.27.1, Iface:eth3
default gateway:10.52.27.1, Iface:eth4
default gateway:10.52.27.1, Iface:eth5
default gateway:10.52.27.1, Iface:eth6
default gateway:10.52.27.1, Iface:eth7
# 检查NPU底层tls校验行为一致性,建议全0
for i in {0..7}; do hccn_tool -i $i -tls -g ; done | grep switch
# NPU底层tls校验行为置0操作
for i in {0..7};do hccn_tool -i $i -tls -s enable 0;done
配置多机多卡文件
确定容器内部网络正常后,我们需要为集群提供多机多卡的配置文件 rank_table_file.json。这个配置文件在集群内各节点上需要保持一致,后续的 MindIE 推理框架也会参考此配置进行启动。
rank_table_file.json 名字可以更改,但是需要和 mindie 推理服务配置文件中的 rank_table_file 参数一致以及环境变量中的配置一致。
为了方便管理,我们将 rank_table_file.json 这个文件放在前文‘准备模型’章节中模型转换后的模型目录 /data/models/deepseek-r1-bf16 下,确保避免在容器内编辑文件。
rank_table_file.json 配置文件需要了解集群的如下信息:
-
server_count:一共使用几台服务器,即节点数。server_list 中第一个 server 为主节点 -
device_id:当前卡的本机编号,取值范围[0, 本机卡数) -
device_ip:当前卡的 ip 地址,可通过 hccn_tool 命令获取 -
rank_id:当前卡在集群内的全局编号,取值范围[0, 总卡数) -
server_id:当前节点的 ip 地址 -
container_ip:容器 ip 地址(服务化部署时需要),若无特殊配置,则与 server_id 相同
下面是基于现有环境的 4 机 32 卡的 rank_table_file.json 配置文件示例,其中 server_id: 192.168.0.2 为主节点。
{
"server_count": "4",
"server_list": [
{
"device": [
{"device_id": "0", "device_ip": "10.52.27.3", "rank_id": "0"},
{"device_id": "1", "device_ip": "10.52.27.2", "rank_id": "1"},
{"device_id": "2", "device_ip": "10.52.27.5", "rank_id": "2"},
{"device_id": "3", "device_ip": "10.52.27.4", "rank_id": "3"},
{"device_id": "4", "device_ip": "10.52.27.8", "rank_id": "4"},
{"device_id": "5", "device_ip": "10.52.27.9", "rank_id": "5"},
{"device_id": "6", "device_ip": "10.52.27.7", "rank_id": "6"},
{"device_id": "7", "device_ip": "10.52.27.6", "rank_id": "7"}
],
"server_id": "192.168.0.2",
"container_ip": "192.168.0.2"
},
{
"device": [
{"device_id": "0", "device_ip": "10.52.27.27", "rank_id": "8"},
{"device_id": "1", "device_ip": "10.52.27.26", "rank_id": "9"},
{"device_id": "2", "device_ip": "10.52.27.29", "rank_id": "10"},
{"device_id": "3", "device_ip": "10.52.27.28", "rank_id": "11"},
{"device_id": "4", "device_ip": "10.52.27.32", "rank_id": "12"},
{"device_id": "5", "device_ip": "10.52.27.33", "rank_id": "13"},
{"device_id": "6", "device_ip": "10.52.27.31", "rank_id": "14"},
{"device_id": "7", "device_ip": "10.52.27.30", "rank_id": "15"}
],
"server_id": "192.168.0.3",
"container_ip": "192.168.0.2"
},
{
"device": [
{"device_id": "0", "device_ip": "10.52.27.19", "rank_id": "16"},
{"device_id": "1", "device_ip": "10.52.27.18", "rank_id": "17"},
{"device_id": "2", "device_ip": "10.52.27.21", "rank_id": "18"},
{"device_id": "3", "device_ip": "10.52.27.20", "rank_id": "19"},
{"device_id": "4", "device_ip": "10.52.27.24", "rank_id": "20"},
{"device_id": "5", "device_ip": "10.52.27.25", "rank_id": "21"},
{"device_id": "6", "device_ip": "10.52.27.23", "rank_id": "22"},
{"device_id": "7", "device_ip": "10.52.27.22", "rank_id": "23"}
],
"server_id": "192.168.0.5",
"container_ip": "192.168.0.2"
},
{
"device": [
{"device_id": "0", "device_ip": "10.52.27.11", "rank_id": "24"},
{"device_id": "1", "device_ip": "10.52.27.10", "rank_id": "25"},
{"device_id": "2", "device_ip": "10.52.27.13", "rank_id": "26"},
{"device_id": "3", "device_ip": "10.52.27.12", "rank_id": "27"},
{"device_id": "4", "device_ip": "10.52.27.16", "rank_id": "28"},
{"device_id": "5", "device_ip": "10.52.27.17", "rank_id": "29"},
{"device_id": "6", "device_ip": "10.52.27.15", "rank_id": "30"},
{"device_id": "7", "device_ip": "10.52.27.14", "rank_id": "31"}
],
"server_id": "192.168.0.4",
"container_ip": "192.168.0.2"
}
],
"status": "completed",
"version": "1.0"
}
最后,不要忘了设置 rank_table_file.json 文件的权限
chmod 640 rank_table_file.json
启动推理服务
配置推理服务环境变量
在每个容器内执行以下命令配置推理服务环境变量, 其中 MIES_CONTAINER_IP 需要根据实际情况修改:
# 设置环境变量
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
# MIES_CONTAINER_IP 当前容器的ip地址,根据实际情况修改
export MIES_CONTAINER_IP=192.168.0.2
export RANKTABLEFILE=/workspace/rank_table_file.json
export OMP_NUM_THREADS=1
export NPU_MEMORY_FRACTION=0.95
# HCCL相关环境变量(解决网络超时问题)
export HCCL_DETERMINISTIC=false
export HCCL_OP_EXPANSION_MODE="AIV"
# 日志相关环境变量
export ATB_LOG_LEVEL=ERROR
export ATB_LOG_TO_STDOUT=1
export ATB_LOG_TO_FILE=1
export ASDOPS_LOG_LEVEL=ERROR
export ASDOPS_LOG_TO_STDOUT=1
export ASDOPS_LOG_TO_FILE=1
注意:
-
当前容器的 ip 地址需要根据实际情况填写,由于是使用的 host 网络,填写的是 192.168.0.2 -
rank_table_file.json 文件路径需要根据实际情况填写 -
WORLD_SIZE 指的是集群的卡的数量,集群为 4 机 32 卡,此处为 32 -
NPU_MEMORY_FRACTION 指的是当前卡的内存使用比例,一般设置为 0.95
修改推理参数配置
启动 MindIE 之前,还需要对 MindIE 的推理服务进行配置,配置文件位于容器内,集群中的每一个容器都要做一样的配置。
在容器内的路径为 /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json。
{
"Version" : "1.0.0",
"LogConfig" :
{
"logLevel" : "Info",
"logFileSize" : 20,
"logFileNum" : 20,
"logPath" : "logs/mindie-server.log"
},
"ServerConfig" :
{
"ipAddress" : "192.168.0.2",
"managementIpAddress" : "192.168.0.2",
"port" : 1025,
"managementPort" : 1026,
"metricsPort" : 1027,
"allowAllZeroIpListening" : false,
"maxLinkNum" : 300,
"httpsEnabled" : false,
"fullTextEnabled" : false,
"tlsCaPath" : "security/ca/",
"tlsCaFile" : ["ca.pem"],
"tlsCert" : "security/certs/server.pem",
"tlsPk" : "security/keys/server.key.pem",
"tlsPkPwd" : "security/pass/key_pwd.txt",
"tlsCrlPath" : "security/certs/",
"tlsCrlFiles" : ["server_crl.pem"],
"managementTlsCaFile" : ["management_ca.pem"],
"managementTlsCert" : "security/certs/management/server.pem",
"managementTlsPk" : "security/keys/management/server.key.pem",
"managementTlsPkPwd" : "security/pass/management/key_pwd.txt",
"managementTlsCrlPath" : "security/management/certs/",
"managementTlsCrlFiles" : ["server_crl.pem"],
"kmcKsfMaster" : "tools/pmt/master/ksfa",
"kmcKsfStandby" : "tools/pmt/standby/ksfb",
"inferMode" : "standard",
"interCommTLSEnabled" : false,
"interCommPort" : 1121,
"interCommTlsCaPath" : "security/grpc/ca/",
"interCommTlsCaFiles" : ["ca.pem"],
"interCommTlsCert" : "security/grpc/certs/server.pem",
"interCommPk" : "security/grpc/keys/server.key.pem",
"interCommPkPwd" : "security/grpc/pass/key_pwd.txt",
"interCommTlsCrlPath" : "security/grpc/certs/",
"interCommTlsCrlFiles" : ["server_crl.pem"],
"openAiSupport" : "vllm"
},
"BackendConfig" : {
"backendName" : "mindieservice_llm_engine",
"modelInstanceNumber" : 1,
"npuDeviceIds" : [[0,1,2,3,4,5,6,7]],
"tokenizerProcessNumber" : 8,
"multiNodesInferEnabled" : true,
"multiNodesInferPort" : 1120,
"interNodeTLSEnabled" : false,
"interNodeTlsCaPath" : "security/grpc/ca/",
"interNodeTlsCaFiles" : ["ca.pem"],
"interNodeTlsCert" : "security/grpc/certs/server.pem",
"interNodeTlsPk" : "security/grpc/keys/server.key.pem",
"interNodeTlsPkPwd" : "security/grpc/pass/mindie_server_key_pwd.txt",
"interNodeTlsCrlPath" : "security/grpc/certs/",
"interNodeTlsCrlFiles" : ["server_crl.pem"],
"interNodeKmcKsfMaster" : "tools/pmt/master/ksfa",
"interNodeKmcKsfStandby" : "tools/pmt/standby/ksfb",
"ModelDeployConfig" :
{
"maxSeqLen" : 10000,
"maxInputTokenLen" : 2048,
"truncation" : true,
"ModelConfig" : [
{
"modelInstanceType" : "Standard",
"modelName" : "deepseekr1",
"modelWeightPath" : "/workspace/",
"worldSize" : 8,
"cpuMemSize" : 5,
"npuMemSize" : -1,
"backendType" : "atb",
"trustRemoteCode" : false
}
]
},
"ScheduleConfig" :
{
"templateType" : "Standard",
"templateName" : "Standard_LLM",
"cacheBlockSize" : 128,
"maxPrefillBatchSize" : 8,
"maxPrefillTokens" : 2048,
"prefillTimeMsPerReq" : 150,
"prefillPolicyType" : 0,
"decodeTimeMsPerReq" : 50,
"decodePolicyType" : 0,
"maxBatchSize" : 8,
"maxIterTimes" : 1024,
"maxPreemptCount" : 0,
"supportSelectBatch" : false,
"maxQueueDelayMicroseconds" : 5000
}
}
}
开启多机推理,需要设置 ipAddress 为主节点 IP 并调整显存参数:
{
"multiNodesInferEnabled": true,
"maxSeqLen": 32000,
"maxBatchSize": 32,
"modelWeightPath": "/data/models/deepseek-r1-bf16/"
}
注意:
-
ipAddress 需要根据实际情况填写,当前为 192.168.0.2 -
显存参数需要根据实际情况填写,当前为 32 -
模型权重路径需要根据实际情况填写,当前为 /data/models/deepseek-r1-bf16/ -
多机推理场景下 npuDeviceIds会被覆盖,因此只需要保证数量能够与本机匹配不影响启动即可。
启动推理服务
在每个容器内都执行以下命令启动推理服务:
cd /usr/local/Ascend/mindie/latest/mindie-service
./bin/mindieservice_daemon
运行命令后,各节点首先读取配置文件,由主节点下发配置绑定 CPU,然后各节点启动推理服务,当所有节点都启动完毕后,出现 Daemon start success! 即表示启动成功。
从节点日志输出样例:
# cd /usr/local/Ascend/mindie/latest/mindie-service
# ./bin/mindieservice_daemon
Start to parse ranktable file
Finished parsing ranktable file.
Update worldSize and npuDeviceIds of backend config successfully
for Multi Nodes Inference.
[2025-02-26 16:36:06,357] [501] [281472443609440] [llm] [INFO]
[cpu_binding.py-212] : rank_id: 1, device_id: 1, numa_id: 0,
shard_devices: [1, 3], cpus: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
...
[2025-02-26 16:36:06,998] [536] [281471900381536] [llm] [INFO]
[cpu_binding.py-238] : process 536, new_affinity is [108, 109,
110, 111, 112, 113, 114, 115, 116, 117, 118, 119], cpu count 12
[2025-02-26 16:36:16,652] [501] [281472443609440] [llm] [INFO]
[dist.py-81] : initialize_distributed has been Set
[2025-02-26 16:36:16,652] [522] [281472149680480] [llm] [INFO]
[dist.py-81] : initialize_distributed has been Set
[2025-02-26 16:36:16,651] [499] [281471688372576] [llm] [INFO]
[dist.py-81] : initialize_distributed has been Set
[2025-02-26 16:36:17,029] [529] [281472118354272] [llm] [INFO]
[dist.py-81] : initialize_distributed has been Set
[2025-02-26 16:36:17,033] [543] [281472141226336] [llm] [INFO]
[dist.py-81] : initialize_distributed has been Set
[2025-02-26 16:36:17,897] [515] [281472854192480] [llm] [INFO]
[dist.py-81] : initialize_distributed has been Set
[2025-02-26 16:36:18,068] [536] [281471900381536] [llm] [INFO]
[dist.py-81] : initialize_distributed has been Set
[2025-02-26 16:36:18,260] [508] [281472308867424] [llm] [INFO]
[dist.py-81] : initialize_distributed has been Set
Daemon start success!
主节点除了会输出以上从节点的日志内容之外,还会输出模型相关信息。
一般启动需要等待 10 分钟以上,出现 Daemon start success! 后,即可测试推理服务。
测试推理服务
使用 curl 测试服务响应:
curl -X POST http://{ip}:{port}/v1/chat/completions \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseekr1",
"messages": [{
"role": "user",
"content": "你好"
}],
"max_tokens": 20,
"presence_penalty": 1.03,
"frequency_penalty": 1.0,
"seed": null,
"temperature": 0.5,
"top_p": 0.95,
"stream": true
}'
注意:
-
model 需要根据 4.3.2 配置文件中的 modelName填写 -
ip 需要根据 4.3.2 配置文件中的 ipAddress填写 -
port 需要根据 4.3.2 配置文件中的 port填写
以上能看到输出,就算是部署成功了。至此,DeepSeek-V3/R1 671B 满血版部署已完成。
常见错误
权限错误 Check path: config.json failed, by:owner id diff
错误现象:
# ./bin/mindieservice_daemon
Check path: config.json failed, by:owner id diff: current process
user id is 0, file owner id is 1001
Failed to check config.json under model weight path.
ERR: Failed to init endpoint! Please check the service log or
console output.
Killed
关于 owner 和 group 的配置需要和镜像匹配,在我们的容器环境下要改成 root:root。
解决方案: 模型的权重配置文件是通过命令挂载到容器中的,所以需要在外部节点上运行以下命令。
chown -R root:root /data/models/deepseek-r1-bf16/
未设置环境变量 LLMInferEngine failed to init LLMInferModels
错误现象:
# ./bin/mindieservice_daemon
LLMInferEngine failed to init LLMInferModels
ERR: Failed to init endpoint! Please check the service log or
console output.
Killed
没有设置正确的环境变量
解决方案: 在启动 ./bin/mindieservice_daemon 之前,参考 4.3 节设置正确的环境变量。
rank_table_file.json 配置错误的 worldSize
错误现象:
# ./bin/mindieservice_daemon
the size of npuDeviceIds (subset) does not equal to worldSize
ERR: Failed to init endpoint! Please check the service log or
console output.
Killed
错误原因: 在多节点推理情况下,配置中的 npuDeviceIds 和 worldSize 都会被忽略。
解决方案:npuDeviceIds 和 worldSize 需要按照本机的情况进行配置,例如单机 8 卡的配置下, worldSize 需要配置为 8,npuDeviceIds 配置为 [0,1,2,3,4,5,6,7]。
各节点 rank_table_file.json 配置文件不一致
错误信息:
# ./bin/mindieservice_daemon
Start to parse ranktable file
Finished parsing ranktable file.
Update worldSize and npuDeviceIds of backend config successfully
for Multi Nodes Inference.
npuDeviceID does not allow repetitive element
ERR: Failed to init endpoint! Please check the service log or
console output.
Killed
错误原因: 各节点 rank_table_file.json 配置文件不一致,导致启动失败。
修复方法: 各节点 rank_table_file.json 配置文件保持一致。
配置问题:rank_table_file.json 中的server_id和container_ip填写
当 docker 启动容器使用 host 模式时:rank_table_file.json 中的server_id和container_ip 均填写成主机 IP,注意容器开放的端口不要和主机冲突。
通信错误:hccl execute failed
问题现象: 日志显示 NPU 设备(IP 地址 10.52.27.11)与 NPU 设备(IP 地址 10.52.27.3)之间 connection fail 出现如下网络超时错误:
[ERROR] HCCL(127,mindie_llm_backend_connector):
2025-02-27-19:20:33.904.720 [hccl_socket_manager.cc:580][3182] |
10.52.27.11(24) | 16666 | 10.52.27.3(0) | 0 | server | time out |
错误原因:
-
网络错误 -
性能瓶颈导致通信失败,可以增加超时时间 -
网络防火墙导致通信失败,可以查看各节点之间的网络连接情况
解决方案:
-
确保所有服务器之间的网络连接正常 -
添加以下环境变量:
export HCCL_DETERMINISTIC=false
export HCCL_OP_EXPANSION_MODE="AIV"
export HCCL_CONNECT_TIMEOUT=7200
export HCCL_EXEC_TIMEOUT=0
-
关闭防火墙,如果是云主机需要修改对应的安全组配置。
显存不足:NPU out of memory
问题现象:
Warm-up fail due to out of memory error.
错误原因:
-
显存配置不足 -
模型权重过大
解决方案:
-
适当调高 NPU_MEMORY_FRACTION 环境变量(默认值为 0.8) -
适当调低 mindie-service 服务化配置文件 config.json 中 maxSeqLen、maxInputTokenLen、maxPrefillBatchSize、maxPrefillTokens、maxBatchSize 等参数。
export NPU_MEMORY_FRACTION=0.96
export PYTORCH_NPU_ALLOC_CONF=expandable segments:True
其他
由于控制台输出内容较少,遇到推理报错时,请打开日志环境变量,收集日志信息查看具体错误信息。
算子库日志|默认输出路径为"~/atb/log"
export ASDOPS_LOG_LEVEL = INFO
export ASDOPS_LOG_TO_FILE = 1
加速库日志|默认输出路径为"~/mindie/log/debug"
export ATB_LOG_LEVEL = INFO
export ATB_LOG_TO_FILE = 1
MindIE Service 日志|默认输出路径为"~/mindie/log/debug"
export MINDIE_LOG_TO_FILE = 1
export MINDIE_LOG_TO_LEVEL = debug
CANN 日志收集|默认输出路径为"~/ascend"
export ASCEND_GLOBAL_LOG_TO_LEVEL = 1
免责声明:本文档提供的信息仅用于参考,具体部署可能需要根据您的实际环境进行调整。如有变更,请以最新官方文档为准。
关于 Spader.AI
Spader.AI,北京与星以舟智能科技有限公司,是一支专注于人工智能与云计算技术的创新团队,致力于推动前沿技术的发展和实际应用。
我们构建高性能、可扩展的 AI 基础设施,提供灵活、安全的智能解决方案,帮助企业轻松应对复杂计算任务,加速 AI 应用落地。我们相信,智能技术应当开放、可及,并真正创造价值。因此,我们不断优化算法与架构,以提升算力效率、降低使用门槛,让人工智能成为推动产业升级的重要驱动力。
如果您对高性价比算力、大模型训练训练及推理以及相关业务场景的技术感兴趣,或者对本篇分享中提到的某些观点有自己的见解希望讨论,扫码秒加 SpaderMan 客服,SpaderMan 会带您入群,和各领域技术大佬共同探讨最前沿的 AI 技术。
引用链接
Spader-AI: https://spader-ai.com/
[2]升级前必读: https://support.huawei.com/enterprise/zh/doc/EDOC1100388846/9eebb749
[3]官方文档: https://support.huawei.com/enterprise/zh/doc/EDOC1100388846/639664c
[4]HuggingFace: https://huggingface.co/
[5]魔乐社区: https://modelers.cn/

