SLURM和Pytorch如何共同处理多节点多gpu训练的问题

问题描述 投票:0回答:1

我想问一下,在使用Slurm管理工作负载的集群中,使用多节点多gpu进行训练时,梯度是如何聚合的。代码是用Pytorch写的。

例如,当启动一个脚本时 train.py 在Slurm中,在4个节点上训练一个模型,每个节点使用4GPU,如下图所示。srun 命令到底是干什么的?

srun python train.py

文档中写道 srun 是用来在Slurm管理的集群上运行一个并行作业。然而,我想知道它执行了哪些步骤。我想象它将脚本复制到16个GPU上,每个GPU将同时运行脚本。是这样吗?

如果我使用 torch.distributed.init_process_group() 在我处理多GPU训练的脚本中,Slurm将如何与Pytorch一起处理从每个GPU收集的梯度?我假设有一个主端口(就是Slurm分配给一个节点的GPU设备)来收集梯度。4个节点中的16个GPU将把梯度传输到这个主端口,这要归功于Pytorch的 torch.distributed 包? Slurm可以帮助分配资源,但它对梯度的聚合没有任何作用?

我也不知道我是否应该只使用 srun 如上所述,或者我应该指定 torch.distributed.launch 在我的命令中,如下所示。我想确保正确收集梯度。

# NGPU equals to number of GPUs/node
export NGPU=4
srun python -m torch.distributed.launch --nproc_per_node=$NGPU train.py

预先感谢您的帮助!我想问一下,在使用Slurm管理工作负载的集群中,当使用多节点多GPU进行训练时,梯度是如何聚集的。

pytorch distributed-computing distributed-system slurm
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.