评价此页

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

多节点训练#

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

作者: Suraj Subramanian

您将学到什么
  • 使用 torchrun 启动多节点训练作业

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

GitHub 上查看此教程使用的代码

先决条件
  • 熟悉 多 GPU 训练torchrun

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

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

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

多节点训练涉及跨多台机器部署训练作业。有两种方法可以做到这一点:

  • 在每台机器上运行带有相同 rendezvous 参数的 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_DEBUG 设置为 INFO(使用 export NCCL_DEBUG=INFO),以打印详细日志来帮助诊断问题。

  • 有时您可能需要显式设置分布式后端网络接口(export NCCL_SOCKET_IFNAME=eth0)。在此 阅读更多信息。

进一步阅读#