快捷方式

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

多节点训练

作者:Suraj Subramanian

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

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

查看本教程中使用的代码,地址:GitHub

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

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

  • 在所有机器上 安装 PyTorch,并包含 CUDA

按照下面的视频或 youtube 上的视频进行操作。

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

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

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

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

请注意,多节点训练受到节点间通信延迟的限制。在单个节点上使用 4 个 GPU 运行训练作业会比在 4 个节点上(每个节点使用 1 个 GPU)运行训练作业更快。

本地秩和全局秩

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

警告

不要在训练作业的关键逻辑中使用 RANK。 当 torchrun 在故障或成员资格更改后重新启动进程时,无法保证进程将保持相同的 LOCAL_RANKRANKS

异构扩展

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

故障排除

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

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

  • 有时您可能需要显式设置分布式后端的网络接口(export NCCL_SOCKET_IFNAME=eth0)。 阅读更多关于 这里

进一步阅读

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获得针对初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源