【AI】DeepSeek-R1模型双节点部署操作手册
本手册基于华为昇腾910B3和DeepSeek-R1 671B模型的实际部署经验编写。具体版本和配置可能因实际环境有所不同,请根据实际情况进行调整。
·
DeepSeek-R1模型双节点部署操作手册
文档信息
- 版本:V1.0
- 适用硬件:华为昇腾910B3 NPU
- 适用模型:DeepSeek-R1 671B参数
- 部署规模:2台服务器,每台8卡,共16卡
- 文档作者:MiniMax Agent
- 创建时间:2026年2月27日
1. 硬件环境要求
1.1 服务器配置要求
| 项目 | 最低要求 | 推荐配置 |
|---|---|---|
| 服务器数量 | 2台 | 2台 |
| 每台GPU数量 | 8卡昇腾910B3 | 8卡昇腾910B3 |
| CPU | 鲲鹏920或同级x86 | 鲲鹏920 64核 |
| 内存 | 256GB | 512GB |
| 系统盘 | 512GB SSD | 1TB NVMe SSD |
| 数据盘 | 2TB SSD | 4TB NVMe SSD |
| 网络 | 100Gbps RDMA | 200Gbps RDMA |
1.2 网络配置要求
| 项目 | 配置要求 |
|---|---|
| 节点1 IP | 10.0.2.1 |
| 节点2 IP | 10.0.2.2 |
| RDMA网络 | 10.0.3.x (节点1) / 10.0.4.x (节点2) |
| 子网掩码 | 255.255.255.0 |
| 网关 | 10.0.2.254 |
1.3 网络拓扑图
┌─────────────────────────────────────────────────────────────────┐
│ 网络架构图 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ 节点1 │ │ 节点2 │ │
│ │ AI001 │ │ AI002 │ │
│ │ 10.0.2.1│◄────────────►│ 10.0.2.2│ │
│ └──────────────┘ Management │└──────────────┘ │
│ │ │ │
│ │ 10.0.3.x │ 10.0.4.x │
│ │ (RDMA网络) │ (RDMA网络) │
│ ▼ ▼ │
│ ┌─────────────────────────────────────────────┐ │
│ │ 100/200Gbps 交换机 │ │
│ └─────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
2. 操作系统环境准备
2.1 操作系统要求
| 项目 | 要求 |
|---|---|
| 操作系统 | EulerOS 2.8 / openEuler 20.03 / CentOS 7.6+ |
| 内核版本 | 4.19.x 或 5.10.x |
| 虚拟化技术 | KVM |
2.2 操作系统配置(两台服务器同时执行)
# 1. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 2. 关闭SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 3. 配置hosts文件
cat >> /etc/hosts << EOF
10.0.2.1 AI001
10.0.2.2 AI002
EOF
# 4. 配置网络
# 编辑 /etc/sysconfig/network-scripts/ifcfg-eth0
# 确保以下配置:
# ONBOOT=yes
# BOOTPROTO=static
# IPADDR=10.0.2.1 # 节点2改为10.0.2.2
# NETMASK=255.255.255.0
# 5. 重启网络服务
systemctl restart network
# 6. 验证网络连通性
ping -c 3 10.0.2.1 # 从节点2执行
ping -c 3 10.0.2.2 # 从节点1执行
# 7. 验证RDMA网络连通性
ping -c 3 10.0.3.1 # 节点1内部
ping -c 3 10.0.4.1 # 节点2内部
3. 驱动与基础软件安装
3.1 安装NPU驱动(两台服务器同时执行)
3.1.1 准备驱动包
从华为官方渠道获取以下驱动包:
AArch64/Ubuntu/ascend驱动的xxx.run- 固件文件:
*.npu_firmware.*.bin
3.1.2 安装驱动
# 1. 上传驱动包到服务器
# 假设驱动包位于 /opt/driver/
# 2. 添加执行权限
chmod +x /opt/driver/*.run
# 3. 停止NPU服务(如有)
systemctl stop npu-smi 2>/dev/null || true
# 4. 安装驱动
cd /opt/driver
./Ascend-hdk-910b-npu-driver_*.run --full
# 5. 加载驱动
modprobe ascend_npu
# 6. 验证驱动安装
npu-smi info
3.1.3 安装固件
# 1. 安装固件
chmod +x /opt/driver/*.npu_firmware.*.bin
./Ascend-hdk-910b-npu-firmware_*.run
# 2. 重启NPU服务
systemctl restart npu-smi
# 3. 验证固件版本
npu-smi info
# 应该显示固件版本相关信息
3.2 安装Docker与容器运行时
# 1. 安装Docker依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 2. 添加Docker官方仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 3. 安装Docker
yum install -y docker-ce docker-ce-cli containerd.io
# 4. 启动Docker
systemctl start docker
systemctl enable docker
# 5. 配置Docker镜像加速(可选)
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
EOF
# 6. 重启Docker
systemctl restart docker
3.3 安装Ascend Docker Runtime(两台服务器同时执行)
# 1. 获取Ascend Docker Runtime包
# 从华为官方获取:ascend-docker-runtime_*.tar.gz
# 2. 加载镜像
docker load -i ascend-docker-runtime_*.tar.gz
# 3. 配置Ascend Docker Runtime
tar -xzf ascend-docker-runtime-*.tar.gz
cd ascend-docker-runtime
cp -r runtime/bin/* /usr/bin/
cp -r runtime/lib/* /usr/lib/
cp -r runtime/etc/* /etc/
# 4. 配置Docker使用Ascend Runtime
cat > /etc/docker/daemon.json << EOF
{
"runtimes": {
"ascend": {
"path": "/usr/bin/docker-containerd-shim-runc-v2",
"runtimeArgs": [
"--ascend-runtime-path",
"/usr/local/Ascend"
]
}
}
}
EOF
# 5. 重启Docker
systemctl restart docker
# 6. 验证安装
docker info | grep -i ascend
4. 模型与配置文件准备
4.1 准备模型文件
4.1.1 模型目录结构
# 创建模型存储目录(两台服务器)
mkdir -p /data0/DeepSeek-R1-bf16-hfd-w8a8
mkdir -p /data1
# 模型文件结构
/data0/DeepSeek-R1-bf16-hfd-w8a8/
├── config.json
├── model.safetensors.index.json
├── model-00001-of-00014.safetensors
├── model-00002-of-00014.safetensors
├── ... (共14个分片)
├── tokenizer.json
├── tokenizer_config.json
└── vocab.json
4.1.2 复制模型文件(节点1执行)
# 方式1:本地复制(如果模型文件已在本机)
cp -r /path/to/DeepSeek-R1-bf16-hfd-w8a8/* /data0/DeepSeek-R1-bf16-hfd-w8a8/
# 方式2:网络传输(从其他服务器)
scp -r user@source_server:/path/to/model/* /data0/DeepSeek-R1-bf16-hfd-w8a8/
4.2 创建rank_table_file.json
在两台服务器的 /data1/ 目录下创建相同的配置文件:
cat > /data1/rank_table_file.json << 'EOF'
{
"server_count": "2",
"server_list": [
{
"device": [
{"device_id": "0", "device_ip": "10.0.3.1", "rank_id": "0"},
{"device_id": "1", "device_ip": "10.0.3.2", "rank_id": "1"},
{"device_id": "2", "device_ip": "10.0.3.3", "rank_id": "2"},
{"device_id": "3", "device_ip": "10.0.3.4", "rank_id": "3"},
{"device_id": "4", "device_ip": "10.0.3.5", "rank_id": "4"},
{"device_id": "5", "device_ip": "10.0.3.6", "rank_id": "5"},
{"device_id": "6", "device_ip": "10.0.3.7", "rank_id": "6"},
{"device_id": "7", "device_ip": "10.0.3.8", "rank_id": "7"}
],
"server_id": "10.0.2.1",
"container_ip": "10.0.2.1"
},
{
"device": [
{"device_id": "0", "device_ip": "10.0.4.1", "rank_id": "8"},
{"device_id": "1", "device_ip": "10.0.4.2", "rank_id": "9"},
{"device_id": "2", "device_ip": "10.0.4.3", "rank_id": "10"},
{"device_id": "3", "device_ip": "10.0.4.4", "rank_id": "11"},
{"device_id": "4", "device_ip": "10.0.4.5", "rank_id": "12"},
{"device_id": "5", "device_ip": "10.0.4.6", "rank_id": "13"},
{"device_id": "6", "device_ip": "10.0.4.7", "rank_id": "14"},
{"device_id": "7", "device_ip": "10.0.4.8", "rank_id": "15"}
],
"server_id": "10.0.2.2",
"container_ip": "10.0.2.2"
}
],
"status": "completed",
"version": "1.0"
}
EOF
4.3 配置文件权限设置(两台服务器同时执行)
# 设置rank_table_file.json权限
chmod 640 /data1/rank_table_file.json
chown -R root:root /data1/rank_table_file.json
# 设置模型目录权限
chown -R root:root /data0/DeepSeek-R1-bf16-hfd-w8a8/
chmod -R 750 /data0/DeepSeek-R1-bf16-hfd-w8a8/
# 设置config.json权限
chmod 640 /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json
5. 准备Docker镜像
5.1 获取DeepSeek-R1镜像
# 方式1:从华为官方仓库拉取(需要配置凭证)
docker login registry.huawei.com
docker pull registry.huawei.com/ascend-mindie/deepseek-r1:latest
# 方式2:从文件加载(如果已获取镜像包)
docker load -i deepseek-r1-container.tar.gz
5.2 创建启动脚本
5.2.1 节点1启动脚本
cat > /data1/start_deepseek_node1.sh << 'EOF'
#!/bin/bash
# DeepSeek-R1 节点1 启动脚本
# 设置环境变量
source /usr/local/Ascend/mindie/set_env.sh
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh
source /usr/local/Ascend/atb-models/set_env.sh
# 分布式配置
export MIES_CONTAINER_IP=10.0.2.1
export RANKTABLEFILE=/data1/rank_table_file.json
export OMP_NUM_THREADS=1
export NPU_MEMORY_FRACTION=0.96
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export ATB_LLM_HCCL_ENABLE=1
export ATB_LLM_COMM_BACKEND="hccl"
export HCCL_CONNECT_TIMEOUT=7200
export WORLD_SIZE=16
export HCCL_EXEC_TIMEOUT=0
export MINDIE_LOG_TO_STDOUT=0
export MINDIE_LLM_LOG_TO_STDOUT=0
export ATB_WORKSPACE_MEM_ALLOC_ALG_TYPE=3
export ATB_WORKSPACE_MEM_ALLOC_GLOBAL=1
export HCCL_DETERMINISTIC=false
export HCCL_OP_EXPANSION_MODE="AIV"
# 启动服务
cd /usr/local/Ascend/mindie/latest/mindie-service/bin
nohup ./mindieservice_daemon &
echo "节点1服务已启动"
EOF
chmod +x /data1/start_deepseek_node1.sh
5.2.2 节点2启动脚本
cat > /data1/start_deepseek_node2.sh << 'EOF'
#!/bin/bash
# DeepSeek-R1 节点2 启动脚本
# 设置环境变量
source /usr/local/Ascend/mindie/set_env.sh
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh
source /usr/local/Ascend/atb-models/set_env.sh
# 分布式配置
export MIES_CONTAINER_IP=10.0.2.2
export RANKTABLEFILE=/data1/rank_table_file.json
export OMP_NUM_THREADS=1
export NPU_MEMORY_FRACTION=0.96
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export ATB_LLM_HCCL_ENABLE=1
export ATB_LLM_COMM_BACKEND="hccl"
export HCCL_CONNECT_TIMEOUT=7200
export WORLD_SIZE=16
export HCCL_EXEC_TIMEOUT=0
export MINDIE_LOG_TO_STDOUT=0
export MINDIE_LLM_LOG_TO_STDOUT=0
export ATB_WORKSPACE_MEM_ALLOC_ALG_TYPE=3
export ATB_WORKSPACE_MEM_ALLOC_GLOBAL=1
export HCCL_DETERMINISTIC=false
export HCCL_OP_EXPANSION_MODE="AIV"
# 启动服务
cd /usr/local/Ascend/mindie/latest/mindie-service/bin
nohup ./mindieservice_daemon &
echo "节点2服务已启动"
EOF
chmod +x /data1/start_deepseek_node2.sh
6. 启动Docker容器
6.1 容器启动命令
6.1.1 节点1启动容器
docker run -dit \
--name deepseek-r1 \
--network host \
--privileged \
--device /dev:/dev \
--device /usr/local/Ascend:/usr/local/Ascend \
--device /dev/davinci0:/dev/davinci0 \
--device /dev/davinci1:/dev/davinci1 \
--device /dev/davinci2:/dev/davinci2 \
--device /dev/davinci3:/dev/davinci3 \
--device /dev/davinci4:/dev/davinci4 \
--device /dev/davinci5:/dev/davinci5 \
--device /dev/davinci6:/dev/davinci6 \
--device /dev/davinci7:/dev/davinci7 \
--device /dev/davinci_manager:/dev/davinci_manager \
--device /dev/hdc:/dev/hdc \
-v /data0:/data0 \
-v /data1:/data1 \
-v /usr/local/Ascend:/usr/local/Ascend \
--shm-size=32g \
--runtime=ascend \
deepseek-r1:latest \
bash
6.1.2 节点2启动容器
docker run -dit \
--name deepseek-r1 \
--network host \
--privileged \
--device /dev:/dev \
--device /usr/local/Ascend:/usr/local/Ascend \
--device /dev/davinci0:/dev/davinci0 \
--device /dev/davinci1:/dev/davinci1 \
--device /dev/davinci2:/dev/davinci2 \
--device /dev/davinci3:/dev/davinci3 \
--device /dev/davinci4:/dev/davinci4 \
--device /dev/davinci5:/dev/davinci5 \
--device /dev/davinci6:/dev/davinci6 \
--device /dev/davinci7:/dev/davinci7 \
--device /dev/davinci_manager:/dev/davinci_manager \
--device /dev/hdc:/dev/hdc \
-v /data0:/data0 \
-v /data1:/data1 \
-v /usr/local/Ascend:/usr/local/Ascend \
--shm-size=32g \
--runtime=ascend \
deepseek-r1:latest \
bash
6.2 容器管理命令
# 启动容器
docker start deepseek-r1
# 进入容器
docker exec -it deepseek-r1 bash
# 停止容器
docker stop deepseek-r1
# 重启容器
docker restart deepseek-r1
# 查看容器状态
docker ps | grep deepseek-r1
7. 启动模型服务
7.1 服务启动流程
步骤1:进入容器(两台服务器同时执行)
# 节点1
docker exec -it deepseek-r1 bash
# 节点2
docker exec -it deepseek-r1 bash
步骤2:执行环境配置和启动脚本
节点1执行:
# 在容器内执行
chown -R root:root /data0/DeepSeek-R1-bf16-hfd-w8a8/
chmod -R 750 /data0/DeepSeek-R1-bf16-hfd-w8a8/
chmod 640 /data1/rank_table_file.json
chmod 640 /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json
# 设置环境变量
source /usr/local/Ascend/mindie/set_env.sh
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh
source /usr/local/Ascend/atb-models/set_env.sh
export MIES_CONTAINER_IP=10.0.2.1
export RANKTABLEFILE=/data1/rank_table_file.json
export OMP_NUM_THREADS=1
export NPU_MEMORY_FRACTION=0.96
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export ATB_LLM_HCCL_ENABLE=1
export ATB_LLM_COMM_BACKEND="hccl"
export HCCL_CONNECT_TIMEOUT=7200
export WORLD_SIZE=16
export HCCL_EXEC_TIMEOUT=0
export MINDIE_LOG_TO_STDOUT=0
export MINDIE_LLM_LOG_TO_STDOUT=0
export ATB_WORKSPACE_MEM_ALLOC_ALG_TYPE=3
export ATB_WORKSPACE_MEM_ALLOC_GLOBAL=1
export HCCL_DETERMINISTIC=false
export HCCL_OP_EXPANSION_MODE="AIV"
# 启动服务
cd /usr/local/Ascend/mindie/latest/mindie-service/bin
nohup ./mindieservice_daemon &
节点2执行:
# 在容器内执行
chown -R root:root /data0/DeepSeek-R1-bf16-hfd-w8a8/
chmod -R 750 /data0/DeepSeek-R1-bf16-hfd-w8a8/
chmod 640 /data1/rank_table_file.json
chmod 640 /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json
# 设置环境变量
source /usr/local/Ascend/mindie/set_env.sh
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh
source /usr/local/Ascend/atb-models/set_env.sh
export MIES_CONTAINER_IP=10.0.2.2
export RANKTABLEFILE=/data1/rank_table_file.json
export OMP_NUM_THREADS=1
export NPU_MEMORY_FRACTION=0.96
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export ATB_LLM_HCCL_ENABLE=1
export ATB_LLM_COMM_BACKEND="hccl"
export HCCL_CONNECT_TIMEOUT=7200
export WORLD_SIZE=16
export HCCL_EXEC_TIMEOUT=0
export MINDIE_LOG_TO_STDOUT=0
export MINDIE_LLM_LOG_TO_STDOUT=0
export ATB_WORKSPACE_MEM_ALLOC_ALG_TYPE=3
export ATB_WORKSPACE_MEM_ALLOC_GLOBAL=1
export HCCL_DETERMINISTIC=false
export HCCL_OP_EXPANSION_MODE="AIV"
# 启动服务
cd /usr/local/Ascend/mindie/latest/mindie-service/bin
nohup ./mindieservice_daemon &
8. 验证部署结果
8.1 检查进程状态
# 在两台服务器的容器内执行
ps aux | grep mindieservice_daemon
8.2 检查GPU显存占用
# 在两台服务器上执行(宿主机)
npu-smi info
预期结果:
- 节点1:8张GPU显存占用应该在70%-85%
- 节点2:8张GPU显存占用应该在70%-85%
- 每张GPU的HBM-Usage应该接近65536MB的75%-85%
8.3 检查服务日志
# 在容器内执行
tail -f /usr/local/Ascend/mindie/latest/mindie-service/bin/nohup.out
预期日志:
[时间戳] [进程ID] [线程ID] [llm] [INFO] [logging.py-331] : NPUSocInfo(...)
[时间戳] [进程ID] [线程ID] [llm] [INFO] [dist.py-81] : initialize_distributed has been Set
...
Daemon start success!
8.4 测试推理接口
# 确认服务端口
netstat -tlnp | grep -E '8000|8080'
# 发送测试请求
curl -X POST http://10.0.2.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-r1",
"messages": [{"role": "user", "content": "你好"}],
"max_tokens": 100
}'
9. 常用运维命令
9.1 服务管理
| 操作 | 命令 |
|---|---|
| 查看服务状态 | ps aux | grep mindieservice_daemon |
| 查看GPU状态 | npu-smi info |
| 查看实时日志 | tail -f nohup.out |
| 重启服务 | pkill mindieservice_daemon && cd /usr/local/Ascend/mindie/latest/mindie-service/bin && nohup ./mindieservice_daemon & |
| 停止服务 | pkill mindieservice_daemon |
9.2 容器管理
| 操作 | 命令 |
|---|---|
| 启动容器 | docker start deepseek-r1 |
| 停止容器 | docker stop deepseek-r1 |
| 进入容器 | docker exec -it deepseek-r1 bash |
| 查看容器日志 | docker logs deepseek-r1 |
| 重启容器 | docker restart deepseek-r1 |
9.3 故障排查
| 故障现象 | 排查命令 | 解决方案 |
|---|---|---|
| 显存占用低 | npu-smi info |
检查rank_table_file.json配置,确认网络互通 |
| 进程启动慢 | tail -f nohup.out |
HCCL初始化需要时间,耐心等待 |
| 服务无响应 | netstat -tlnp | grep 8000 |
检查端口是否监听,确认防火墙设置 |
| GPU温度过高 | npu-smi info |
检查机房空调,确保散热良好 |
10. 环境变量参考
10.1 关键环境变量说明
| 变量名 | 说明 | 推荐值 |
|---|---|---|
| MIES_CONTAINER_IP | 容器IP地址 | 10.0.2.1 / 10.0.2.2 |
| RANKTABLEFILE | 分布式配置文件路径 | /data1/rank_table_file.json |
| WORLD_SIZE | 总GPU数量 | 16 |
| OMP_NUM_THREADS | OpenMP线程数 | 1 |
| NPU_MEMORY_FRACTION | NPU显存使用比例 | 0.96 |
| HCCL_CONNECT_TIMEOUT | HCCL通信超时时间(秒) | 7200 |
| ATB_LLM_HCCL_ENABLE | 启用HCCL通信 | 1 |
| ATB_WORKSPACE_MEM_ALLOC_ALG_TYPE | 显存分配算法 | 3 |
11. 附录
11.1 IP规划参考表
| 用途 | 节点1 | 节点2 |
|---|---|---|
| 管理网络IP | 10.0.2.1 | 10.0.2.2 |
| RDMA网络IP1 | 10.0.3.1 | 10.0.4.1 |
| RDMA网络IP2 | 10.0.3.2 | 10.0.4.2 |
| RDMA网络IP3 | 10.0.3.3 | 10.0.4.3 |
| RDMA网络IP4 | 10.0.3.4 | 10.0.4.4 |
| RDMA网络IP5 | 10.0.3.5 | 10.0.4.5 |
| RDMA网络IP6 | 10.0.3.6 | 10.0.4.6 |
| RDMA网络IP7 | 10.0.3.7 | 10.0.4.7 |
| RDMA网络IP8 | 10.0.3.8 | 10.0.4.8 |
11.2 硬件信息检查命令
# 查看CPU信息
lscpu
cat /proc/cpuinfo | grep "model name" | head -1
# 查看内存信息
free -h
cat /proc/meminfo | grep MemTotal
# 查看磁盘信息
df -h
lsblk
# 查看NPU信息
npu-smi info
npu-smi list
# 查看网络信息
ip addr
ethtool eth0
文档版本记录
| 版本 | 日期 | 修改内容 | 作者 |
|---|---|---|---|
| V1.0 | 2026-02-27 | 初始版本 | MiniMax Agent |
注意:本手册基于华为昇腾910B3和DeepSeek-R1 671B模型的实际部署经验编写。具体版本和配置可能因实际环境有所不同,请根据实际情况进行调整。
昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链
更多推荐

所有评论(0)