简介 || DDP 是什么 || 单节点多 GPU 训练 || 容错 || 多节点训练 || minGPT 训练
多节点训练#
创建于:2022 年 9 月 27 日 | 最后更新:2025 年 1 月 23 日 | 最后验证:2024 年 11 月 5 日
请跟随下面的视频或在 youtube 上观看。
多节点训练涉及将训练任务部署到多台机器上。有两种方法可以实现:
在每台机器上运行带有相同 rendezvous 参数的
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 模型(本系列的下一个教程)
容错分布式训练(本系列的前一个教程)