入门 || 什么是 DDP || 单节点多 GPU 训练 || 容错性 || 多节点训练 || minGPT 训练
多节点训练¶
创建于:2022 年 9 月 27 日 | 最后更新于:2025 年 1 月 23 日 | 最后验证于:2024 年 11 月 5 日
请参照下方视频或在 YouTube 上观看视频。
多节点训练涉及将训练作业部署到多台机器上。有两种方法可以实现:
在每台机器上运行具有相同 rendezvous 参数的
torchrun
命令,或者使用工作负载管理器(如 SLURM)将其部署在计算集群上
在本视频中,我们将介绍从单节点多 GPU 迁移到多节点训练所需的(最少)代码修改,并以上述两种方式运行我们的训练脚本。
请注意,多节点训练的瓶颈在于节点间通信延迟。在单个节点上使用 4 个 GPU 运行训练作业将比在 4 个节点上每个节点使用 1 个 GPU 运行要快。
本地 Rank 和全局 Rank¶
在单节点设置中,我们跟踪运行训练进程的每个设备的 gpu_id
。torchrun
在环境变量 LOCAL_RANK
中跟踪此值,该值唯一标识节点上的每个 GPU 进程。为了在所有节点上获得唯一标识符,torchrun
提供了另一个变量 RANK
,它表示进程的全局 Rank。
警告
请勿在训练作业的关键逻辑中使用 RANK
。当 torchrun
在故障或成员变更后重启进程时,无法保证进程会保持相同的 LOCAL_RANK
和 RANKS
。
异构扩展¶
Torchrun 支持异构扩展,即您的每个多节点机器可以参与训练作业的 GPU 数量不同。在视频中,我在 2 台机器上部署了代码,其中一台有 4 个 GPU,另一台只使用了 2 个 GPU。
故障排除¶
确保您的节点可以通过 TCP 相互通信。
将环境变量
NCCL_DEBUG
设置为INFO
(使用export NCCL_DEBUG=INFO
)以打印详细日志,这有助于诊断问题。有时您可能需要显式设置分布式后端的网络接口(
export NCCL_SOCKET_IFNAME=eth0
)。在此处阅读更多相关信息。
延伸阅读¶
使用 DDP 训练 GPT 模型(本系列下一篇教程)
容错分布式训练(本系列上一篇教程)