Deep learning 如何在pytorch中正确使用分布式数据并行

Deep learning 如何在pytorch中正确使用分布式数据并行,deep-learning,pytorch,lstm,Deep Learning,Pytorch,Lstm,我对PyTorch比较陌生,但我对Keras&TensorFlow有很好的经验。我遵循这一点在我自己的培训脚本中使用DDP。然而,出于某种原因,我最终总是得到: 进程0已终止,退出状态为1 我曾尝试在多个GPU平台(Google Colab、Kaggle、Floyd Hub)上运行相同的代码,但所有这些平台几乎都给我带来了相同的错误 我还尝试禁用了join=True选项,但是培训过程甚至没有开始 DDP相关代码: def设置(排名、世界大小): os.environ['MASTER\u ADDR

我对PyTorch比较陌生,但我对Keras&TensorFlow有很好的经验。我遵循这一点在我自己的培训脚本中使用DDP。然而,出于某种原因,我最终总是得到:

进程0已终止,退出状态为1

我曾尝试在多个GPU平台(Google Colab、Kaggle、Floyd Hub)上运行相同的代码,但所有这些平台几乎都给我带来了相同的错误

我还尝试禁用了
join=True
选项,但是培训过程甚至没有开始

DDP相关代码:

def设置(排名、世界大小):
os.environ['MASTER\u ADDR']='localhost'
操作系统环境['MASTER_PORT']='12355'
#初始化进程组
dist.init\u进程组(“gloo”,等级=等级,世界大小=世界大小)
#显式设置种子以确保在两个进程中创建模型
#从相同的随机权重和偏差开始。
手电筒。手动种子(42)
def cleanup():
地区销毁处理组()
def运行演示(fn,*参数):
下院议员(
fn,
args=(args[0]、args[1]、args[2]、args[3]、args[4]),
nprocs=1,#也尝试了2次,但没有区别
join=True
)
以及我的培训代码:

def系列(型号,X,批次尺寸=32,历次=75,坡度=0):
设置(1,2)
设备=模型。获取默认设备()
model=model.to(设备,非阻塞=True)
ddp_model=ddp(model,device_id=[0])#只有一个GPU
# ...
ddp_model.hidden_enc=ddp_model.init_hidden_enc()
ddp_model.hidden_dec=ddp_model.init_hidden_dec()
ddp_模型列车()
对于范围内的ep(历次):
损失br=0;nb_批量_步骤=0
对于步骤,枚举中的批处理(数据加载程序):
batch=batch.to(设备,非阻塞=True)
nb_批量_步骤+=1
损耗=ddp_型号(批次)
# ...
清理()
呼叫培训代码:

如果名称=“\uuuuu main\uuuuuuuu”:
运行演示(
火车,
模型
持有人[:],#X
32, 
75,
3.
)
我希望模型使用分布式并行包在多个进程上运行。有趣的是,有时我在不使用DDP的情况下运行CUDA时,会出现内存不足的异常。我知道
spawn.py
终止所有进程,如果任何可用进程存在
status code>1
,但我似乎还不知道如何避免这个问题。非常感谢您的帮助。

根据pytorch的说法

在整个过程中,DDP在向前传球时插入必要的参数同步,在向后传球时插入梯度同步。只要进程不共享GPU设备,用户就可以将进程映射到可用资源

我认为当每个进程都需要共享这个GPU设备时,您不能在一个GPU上用DDP初始化模型