Shortcuts

介绍 || 什么是DDP || 单节点多GPU训练 || 容错 || 多节点训练 || minGPT训练

多节点训练

创建日期:2022年9月27日 | 最后更新:2024年7月10日 | 最后验证:2024年11月5日

作者: Suraj Subramanian

What you will learn
  • 使用torchrun启动多节点训练任务

  • 从单节点训练迁移到多节点训练时的代码更改(以及需要注意的事项)。

查看本教程中使用的代码在 GitHub

Prerequisites
  • 熟悉多GPU训练torchrun

  • 2台或更多可通过TCP访问的GPU机器(本教程使用AWS p3.2xlarge实例)

  • PyTorch installed 在所有机器上安装了CUDA

跟随下面的视频或在youtube上观看。

多节点训练涉及在多台机器上部署训练任务。有两种方法可以实现这一点:

  • 在每台机器上运行一个torchrun命令,并使用相同的集合参数,或者

  • 使用工作负载管理器(如SLURM)将其部署在计算集群上

在本视频中,我们将介绍从单节点多GPU转移到多节点训练所需的(最小)代码更改,并以上述两种方式运行我们的训练脚本。

请注意,多节点训练受限于节点间通信延迟。在单个节点上使用4个GPU运行训练任务将比在4个节点上每个节点使用1个GPU运行更快。

本地和全局排名

在单节点设置中,我们正在跟踪运行我们训练过程的每个设备的gpu_idtorchrun在环境变量LOCAL_RANK中跟踪这个值,它唯一地标识节点上的每个GPU进程。对于所有节点的唯一标识符,torchrun提供了另一个变量RANK,它指的是进程的全局排名。

警告

不要在你的训练任务中使用RANK作为关键逻辑。当torchrun在失败或成员变更后重新启动进程时,不能保证进程会保持相同的LOCAL_RANKRANKS

异构扩展

Torchrun 支持异构扩展,即您的多节点机器中的每一台都可以有不同数量的 GPU 参与训练任务。在视频中,我将代码部署在 2 台机器上,其中一台机器有 4 个 GPU,另一台只使用了 2 个 GPU。

故障排除

  • 确保您的节点能够通过TCP相互通信。

  • 设置环境变量 NCCL_DEBUGINFO(使用 export NCCL_DEBUG=INFO)以打印详细的日志,这些日志可以帮助 诊断问题。

  • 有时您可能需要为分布式后端显式设置网络接口(export NCCL_SOCKET_IFNAME=eth0)。了解更多信息,请点击这里

进一步阅读

优云智算