Appearance
deepspeed 多机多卡说明
使用 DeepSpeed 进行多机多卡训练的核心是通过指定主节点(master)的地址和端口,让所有机器在同一分布式环境中通信。
一、前提条件
- 机器网络互通:所有机器需在同一局域网内,能相互 ping 通(关闭防火墙或开放通信端口)。
- 环境一致:所有机器的 Python 环境、依赖库(DeepSpeed、PyTorch 等)版本完全一致。
- 代码和数据同步:train_all.py 脚本及训练数据在所有机器上的路径完全相同。
- 已知主节点信息:确定其中一台机器作为主节点(master),记录其局域网 IP(如 192.168.1.100),并指定一个空闲端口(如 29500,用于节点间通信)。
二、多机多卡训练步骤
假设我们有 2 台机器,每台机器有 4 张 GPU(总计 8 卡),主节点 IP 为 192.168.1.100,通信端口为 29500。
- 步骤 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 和通信端口,其他节点需要通过这个地址连接。
- 步骤 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,以此类推。
三、注意事项
- 端口冲突:--master_port 需确保在主节点上未被占用(可先用 netstat -tunlp | grep 29500 检查)。
- 网络性能:多机通信依赖网络带宽,建议用千兆以上以太网或 InfiniBand,避免训练速度瓶颈。
- 节点同步:所有节点的启动命令需在短时间内执行(建议先在从节点准备好命令,再启动主节点,最后快速启动从节点)。
- DeepSpeed 配置:若训练脚本中使用了 deepspeed_config.json,需确保所有节点的配置文件一致,且路径正确。