Pytorch Lightning 在 ddp 模式下复制主脚本

dls*_*lsf 11 multi-gpu ddp pytorch pytorch-lightning

当我使用 ddp 模式(2 个 GPU)在集群上启动主脚本时,Pytorch Lightning 会复制主脚本中执行的任何内容,例如打印或其他逻辑。我需要一些扩展的训练逻辑,我想自己处理。例如,在之后做某事(一次!)Trainer.fit()。但随着主脚本的重复,这并不能按我的预期工作。我也尝试将其包装在 中if __name__ == "__main__",但它不会改变行为。如何解决这个问题呢?或者,如何在 Trainer 对象周围使用一些逻辑,而无需重复?

dls*_*lsf 8

此后,我开始在 PyTorch 中使用本机“ddp”进行多处理。据我了解,PytorchLightning (PTL) 只是在多个 GPU 上多次运行主脚本。如果您只想在脚本的一次调用中适应您的模型,那么这很好。然而,我认为一个巨大的缺点是在训练过程中失去了灵活性。与实验交互的唯一方法是通过这些(记录不良的)回调。老实说,在 PyTorch 中使用本机多处理更加灵活和方便。最后,它的实现速度更快、更容易,而且您不必通过 PTL 文档搜索很长时间来实现简单的事情。我认为 PTL 正在朝着一个好的方向发展,删除了大部分样板,但是,在我看来,Trainer 概念需要进行一些认真的修改。在我看来它太封闭了,违反了 PTL 自己的“重组 PyTorch 代码,保留原生 PyTorch 代码”的理念。如果你想使用 PTL 进行简单的多 GPU 训练,我个人强烈建议不要使用它,对我来说这是浪费时间,最好学习原生 PyTorch 多处理。