教程介绍 || 什么是DDP || 单节点多GPU训练 || 容错机制 || 多节点训练 || minGPT训练
多节点训练¶
Created On: Sep 27, 2022 | Last Updated: Jan 23, 2025 | Last Verified: Nov 05, 2024
使用``torchrun``启动多节点训练任务
从单节点到多节点训练时需要的代码更改(以及需要注意的地方)。
查看此教程中使用的代码,请访问`GitHub <https://github.com/pytorch/examples/blob/main/distributed/ddp-tutorial-series/multinode.py>`__
熟悉`多GPU训练 <../beginner/ddp_series_multigpu.html>`__和`torchrun <../beginner/ddp_series_fault_tolerance.html>`__
2台或以上通过TCP连接的GPU机器(此教程使用了AWS p3.2xlarge实例)
所有机器上安装了支持CUDA的PyTorch 安装教程
可以跟随以下视频,或者访问`youtube <https://www.youtube.com/watch/KaAJtI1T2x4>`__。
多节点训练涉及将一个训练任务部署到多台机器上。有两种实现方式:
在每台机器上运行带有相同集合参数的``torchrun``命令,或者
使用工作负载管理器(例如SLURM)在计算集群上部署。
在视频中,我们将讨论从单节点多GPU训练到多节点训练所需的代码更改,并以以上两种方式运行我们的训练脚本。
请注意,多节点训练的瓶颈在于节点间的通信延迟。在单台节点上的4个GPU上运行训练任务将比在4台节点上每台1个GPU速度更快。
本地和全局等级¶
在单节点设置中,我们追踪每个运行训练过程的设备的``gpu_id``。torchrun``通过环境变量``LOCAL_RANK``追踪每个节点上唯一标识的GPU进程。对于跨所有节点的唯一标识符,``torchrun``提供了另一个变量``RANK
,指代全局等级。
警告
不要在训练任务中的关键逻辑中使用``RANK``。当``torchrun``在故障或成员变化后重新启动进程时,不能保证进程会保持相同的``LOCAL_RANK``和``RANK``。
异构扩展¶
Torchrun支持*异构扩展*,即每台多节点机器在训练任务中可以有不同数量的参与GPU。在视频中,我将代码部署到两台机器上,其中一台有4个GPU,另一个只使用了2个GPU。
故障排除¶
确保你的节点可以通过TCP互相通信。
将环境变量``NCCL_DEBUG``设置为``INFO``(使用``export NCCL_DEBUG=INFO``),以打印能够帮助诊断问题的详细日志。
有时需要显式设置分布式后端的网络接口(
export NCCL_SOCKET_IFNAME=eth0
)。更多信息请阅读`这里 <https://pytorch.org/docs/stable/distributed.html#choosing-the-network-interface-to-use>`__。
进一步阅读¶
使用DDP训练GPT模型 (本系列教程的下一个部分)
`容错分布式训练 <../beginner/ddp_series_fault_tolerance.html>`__(本系列的上一个教程)