大数跨境
0
0

双剑合璧,手握“昇腾+DeepSeek满血版部署大法”战天下

双剑合璧,手握“昇腾+DeepSeek满血版部署大法”战天下 Spader.AI与星以舟
2025-04-28
0
导读:从环境准备到推理优化,手把手带你完成高性能部署。

作者: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 网络)

软件需求概览

组件
版本要求
备注
MindIE
≥ 2.0.T3
官网下载
Python 环境
3.11
镜像预置
MindStudio
Msit: br_noncom_MindStudio_8.0.0_POC_20251231 分支

HDK
24.1.0

CANN
≥ 8.0.T63

昇腾驱动
≥ 24.1.rc2
所有节点确认驱动版本一致
昇腾固件
≥ 7.5.0.1.129
所有节点确认固件版本一致

系统环境准备

开通物理机资源

在我们的实践中,我们申请了 Spader.AI[1] 的 4 台 910B 裸金属云资源。

具体配置为:

主机名
主机 IP
CPU
NPU
网络
内存
存储
主机 2
192.168.0.2
192 核
8 片
8×200G RoCE v2
2048GB
4×3.2T NVMe
主机 3
192.168.1.3
192 核
8 片
8×200G RoCE v2
2048GB
4×3.2T NVMe
主机 4
192.168.1.4
192 核
8 片
8×200G RoCE v2
2048GB
4×3.2T NVMe
主机 5
192.168.1.5
192 核
8 片
8×200G RoCE v2
2048GB
4×3.2T NVMe
组件
版本/说明
操作系统
Ubuntu 22.04 64 位 for ARM
内核版本
5.15.0-118-generic (2024-07-05)

初始化系统

连接到服务器后,执行以下命令完成系统初始化:

# 更新系统
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] 文档,根据文档说明进行升级。

注意事项

  1. 升级分为 deb 包、rpm 包、run 包,可根据官方文档[3]选择合适的安装包格式
  2. 安装顺序:
    • 首次安装: 驱动 → 固件
    • 覆盖安装或升级: 固件 → 驱动
  3. 升级后是否需要重启,请仔细阅读相关文档
  4. 升级完成后必须检查版本确认升级成功

固件以及驱动下载地址

昇腾 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 模型需要下载的固件以及驱动包:

文件名
类型
发布时间
说明
大小
Ascend-hdk-910b-npu-firmware_7.5.0.1.129.run
NPU
2024/09/29
昇腾固件带内升级包
273.18KB
Ascend-hdk-910b-npu-driver_24.1.rc3_linux-aarch64.run
NPU
2024/09/29
昇腾 ARM 架构驱动包
118.66MB

备注 :本次此次为升级,因此需要按照"固件->驱动"的顺序来处理,安装包格式确认为 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 的模型权重有如下下载形式:

  1. 官方渠道:通过 HuggingFace[4] 下载 a. DeepSeek-R1:https://huggingface.co/deepseek-ai/DeepSeek-R1 b. DeepSeek-V3:https://huggingface.co/deepseek-ai/DeepSeek-V3
  2. 魔乐社区:通过 魔乐社区[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

注意 ⚠️:

  1. 模型转换时间较长,请提前确保好磁盘空间,避免中断。
  2. 转换脚本不会自动复制 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

备注:

  1. /data/models/deepseek-r1-bf16 为转换后的模型权重路径。
  2. 不要遗漏 --shm-size 500g 参数,否则后期启动mindie推理服务会报错。
  3. 镜像版本为 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

注意:

  1. 当前容器的 ip 地址需要根据实际情况填写,由于是使用的 host 网络,填写的是 192.168.0.2
  2. rank_table_file.json 文件路径需要根据实际情况填写
  3. WORLD_SIZE 指的是集群的卡的数量,集群为 4 机 32 卡,此处为 32
  4. 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/"
}

注意:

  1. ipAddress 需要根据实际情况填写,当前为 192.168.0.2
  2. 显存参数需要根据实际情况填写,当前为 32
  3. 模型权重路径需要根据实际情况填写,当前为 /data/models/deepseek-r1-bf16/
  4. 多机推理场景下 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
     }'

注意:

  1. model 需要根据 4.3.2 配置文件中的 modelName 填写
  2. ip 需要根据 4.3.2 配置文件中的 ipAddress 填写
  3. 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_idcontainer_ip填写

当 docker 启动容器使用 host 模式时:rank_table_file.json 中的server_idcontainer_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 |

错误原因:

  1. 网络错误
  2. 性能瓶颈导致通信失败,可以增加超时时间
  3. 网络防火墙导致通信失败,可以查看各节点之间的网络连接情况

解决方案:

  1. 确保所有服务器之间的网络连接正常
  2. 添加以下环境变量:
export HCCL_DETERMINISTIC=false
export HCCL_OP_EXPANSION_MODE="AIV"
export HCCL_CONNECT_TIMEOUT=7200
export HCCL_EXEC_TIMEOUT=0
  1. 关闭防火墙,如果是云主机需要修改对应的安全组配置。

显存不足:NPU out of memory

问题现象:

Warm-up fail due to  out of memory error.

错误原因:

  1. 显存配置不足
  2. 模型权重过大

解决方案:

  1. 适当调高 NPU_MEMORY_FRACTION 环境变量(默认值为 0.8)
  2. 适当调低 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 技术。

引用链接

[1] 

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/

【声明】内容源于网络
0
0
Spader.AI与星以舟
星舟引航,算力智汇
内容 15
粉丝 0
Spader.AI与星以舟 星舟引航,算力智汇
总阅读0
粉丝0
内容15