Machine learning Pytorch Lightning为每个gpu重复主脚本

Machine learning Pytorch Lightning为每个gpu重复主脚本,machine-learning,pytorch,gpu,pytorch-lightning,Machine Learning,Pytorch,Gpu,Pytorch Lightning,我有一台有两张显卡的机器。我想用两者来训练我的模特。为了让我的生活更轻松,我正在使用pytorch lightning 当我在没有GPU的情况下运行脚本时,一切正常: trainer = Trainer(gpus=None) 但我想在多个GPU上运行它。令人困惑的是,第一条规定,对于具有多个GPU的一台机器,您应该使用“dp”加速器: trainer = Trainer(gpus=2, accelerator='dp') 这将启动培训课程,但会给我一个错误,我只有在尝试使用dp加速器时才会遇

我有一台有两张显卡的机器。我想用两者来训练我的模特。为了让我的生活更轻松,我正在使用pytorch lightning

当我在没有GPU的情况下运行脚本时,一切正常:

trainer = Trainer(gpus=None)
但我想在多个GPU上运行它。令人困惑的是,第一条规定,对于具有多个GPU的一台机器,您应该使用“dp”加速器:

trainer = Trainer(gpus=2, accelerator='dp')
这将启动培训课程,但会给我一个错误,我只有在尝试使用dp加速器时才会遇到这个错误(详细信息如下)

然而,手册继续说

Pyrotch和Lightning不鼓励使用DP。使用DDP哪一种更有效 稳定且至少快3倍

听起来很棒!因此,我:

trainer = Trainer(gpus=2, accelerator='ddp')
但是现在,当我运行
trainer.fit
时,培训师在ddp\u accelerator.py中启动第二个进程(
proc=subprocess.Popen(命令,env=env\u copy,cwd=cwd)

一方面,这是预期的行为(每个gpu一个进程),但另一方面,它确实会重新运行我的主脚本(它不仅是重新导入的,所以如果uuuu name uuu==“uuu main uuuu”:没有帮助,则使用
进行保护)。我的脚本是一个优化方案,具有以下流程:

  • 生成超参数(基于早期运行的结果)
  • 建立、培训、评估模型:回报绩效衡量
  • 从1开始重复
  • 这意味着第二个进程得到的超参数与第一个不同,这显然会抛出一个错误

    顺便说一下,在1个gpu上运行效果很好(培训完成时没有错误):

    我应该如何解决这个问题?坚持使用“dp”并修复我的向后错误?或者坚持使用ddp,但我如何才能修复脚本复制错误?

    dp错误详细信息:

    在文件X的X行中,在forward self.RMr.lerp_(Mr.squeak(),exponential_average_factor)运行时错误中: BroadcastBackward的输出0是一个视图,正在原地修改。 此视图是返回多个视图的函数的输出。 此类函数不允许在原地修改输出视图。 您应该用一个不合适的操作替换原地操作

    系统详细信息: ubuntu、python:3.8、pytorch lightning:1.0.7、pytorch:1.6.0

    trainer = Trainer(gpus=1, accelerator='ddp')