5Ke*_*5Ke 5 gpu machine-learning pytorch pytorch-lightning
我有一台带有两个显卡的机器。我想用两者来训练我的模型。为了让我的生活更轻松,我正在使用 pytorch lighting。
当我在没有 GPU 的情况下运行脚本时,一切正常:
trainer = Trainer(gpus=None)
Run Code Online (Sandbox Code Playgroud)
但我想在多个 GPU 上运行它。令人困惑的是,手册首先指出,对于一台具有多个 GPU 的机器,您应该使用“dp”加速器:
trainer = Trainer(gpus=2, accelerator='dp')
Run Code Online (Sandbox Code Playgroud)
这会启动训练课程,但会出现一个 BroadcastBackward 错误,只有当我尝试使用 dp 加速器时才会出现该错误(详细信息如下)。
然而手册继续说
PyTorch 和 Lightning 不鼓励使用 DP。使用更稳定且至少快 3 倍的 DDP
听起来很棒!所以我这样做:
trainer = Trainer(gpus=2, accelerator='ddp')
Run Code Online (Sandbox Code Playgroud)
但现在当我运行时trainer.fit,训练器启动第二个进程(proc = subprocess.Popen(command, env=env_copy, cwd=cwd)在 ddp_accelerator.py 中)。
一方面,这是预期的行为(每个 GPU 一个进程),但另一方面,它确实重新运行了我的主脚本(它不仅仅是重新导入,因此保护并if __name__ == "__main__":没有帮助)。我的脚本是一个优化方案,流程如下:
这意味着第二个进程获得的超参数与第一个进程不同,这显然会引发错误。
顺便说一句,在 1 个 GPU 上运行效果很好(训练完成且没有错误):
trainer = Trainer(gpus=1, accelerator='ddp')
Run Code Online (Sandbox Code Playgroud)
我应该如何解决这个问题?坚持使用“dp”并修复我的 BroadcastBackward 错误?或者坚持使用 ddp,但是如何修复脚本重复错误呢?
dp错误详细信息:
在文件 X,第 X 行,向前 self.RMr.lerp_(Mr.squeeze(),exponential_average_factor) 运行时错误:BroadcastBackward 的输出 0 是一个视图,正在就地修改。该视图是返回多个视图的函数的输出。此类函数不允许就地修改输出视图。您应该将就地操作替换为异地操作。
系统详细信息:ubuntu、python:3.8、pytorch-lightning:1.0.7、pytorch:1.6.0
| 归档时间: |
|
| 查看次数: |
1060 次 |
| 最近记录: |