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模型的实际部署经验编写。具体版本和配置可能因实际环境有所不同,请根据实际情况进行调整。

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐