Skip to content

deepspeed 多机多卡说明

使用 DeepSpeed 进行多机多卡训练的核心是通过指定主节点(master)的地址和端口,让所有机器在同一分布式环境中通信。

一、前提条件

  1. 机器网络互通:所有机器需在同一局域网内,能相互 ping 通(关闭防火墙或开放通信端口)。
  2. 环境一致:所有机器的 Python 环境、依赖库(DeepSpeed、PyTorch 等)版本完全一致。
  3. 代码和数据同步:train_all.py 脚本及训练数据在所有机器上的路径完全相同。
  4. 已知主节点信息:确定其中一台机器作为主节点(master),记录其局域网 IP(如 192.168.1.100),并指定一个空闲端口(如 29500,用于节点间通信)。

二、多机多卡训练步骤

假设我们有 2 台机器,每台机器有 4 张 GPU(总计 8 卡),主节点 IP 为 192.168.1.100,通信端口为 29500。

  1. 步骤 1:在主节点(第一台机器)上启动训练

主节点需要指定自身地址(--master_addr)和端口(--master_port),以及当前节点的 GPU 数量(--num_gpus)。

命令如下:

主节点(192.168.1.100)执行

bash
deepspeed --num_gpus=4 \
          --master_addr=192.168.1.100 \
          --master_port=29500 \
          --node_rank=0 \
          train_all.py

--node_rank=0:标记当前节点为主节点(rank 0 是默认主节点)。 --master_addr 和 --master_port:指定主节点的 IP 和通信端口,其他节点需要通过这个地址连接。

  1. 步骤 2:在从节点(第二台机器)上启动训练 从节点需要连接到主节点的地址和端口,同时指定自身的节点编号(--node_rank,从 1 开始递增)。 命令如下:

从节点(假设 IP 为 192.168.1.101)执行

bash
deepspeed --num_gpus=4 \
          --master_addr=192.168.1.100 \  # 必须与主节点的 IP 一致
          --master_port=29500 \          # 必须与主节点的端口一致
          --node_rank=1 \                # 从节点编号,依次为 1,2,...
          train_all.py

若有更多机器(如第 3 台),则 --node_rank=2,以此类推。

三、注意事项

  1. 端口冲突:--master_port 需确保在主节点上未被占用(可先用 netstat -tunlp | grep 29500 检查)。
  2. 网络性能:多机通信依赖网络带宽,建议用千兆以上以太网或 InfiniBand,避免训练速度瓶颈。
  3. 节点同步:所有节点的启动命令需在短时间内执行(建议先在从节点准备好命令,再启动主节点,最后快速启动从节点)。
  4. DeepSpeed 配置:若训练脚本中使用了 deepspeed_config.json,需确保所有节点的配置文件一致,且路径正确。