介绍 || 什么是DDP || 单节点多GPU训练 || 容错 || 多节点训练 || minGPT训练
多节点训练¶
创建日期:2022年9月27日 | 最后更新:2024年7月10日 | 最后验证:2024年11月5日
跟随下面的视频或在youtube上观看。
多节点训练涉及在多台机器上部署训练任务。有两种方法可以实现这一点:
在每台机器上运行一个
torchrun命令,并使用相同的集合参数,或者使用工作负载管理器(如SLURM)将其部署在计算集群上
在本视频中,我们将介绍从单节点多GPU转移到多节点训练所需的(最小)代码更改,并以上述两种方式运行我们的训练脚本。
请注意,多节点训练受限于节点间通信延迟。在单个节点上使用4个GPU运行训练任务将比在4个节点上每个节点使用1个GPU运行更快。
本地和全局排名¶
在单节点设置中,我们正在跟踪运行我们训练过程的每个设备的gpu_id。torchrun在环境变量LOCAL_RANK中跟踪这个值,它唯一地标识节点上的每个GPU进程。对于所有节点的唯一标识符,torchrun提供了另一个变量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模型(本系列的下一个教程)
Fault Tolerant distributed training(本系列的前一个教程)