【发布时间】:2021-05-21 12:13:46
【问题描述】:
当我使用 ddp 模式(2 个 GPU)在集群上启动我的主脚本时,Pytorch Lightning 会复制主脚本中执行的任何内容,例如打印或其他逻辑。我需要一些扩展的训练逻辑,我想自己处理。例如。在Trainer.fit() 之后做某事(一次!)。但是由于主脚本的重复,这并不像我想要的那样工作。我还尝试将其包装在 if __name__ == "__main__" 中,但它不会改变行为。如何解决这个问题?或者,我怎样才能在我的 Trainer 对象周围使用一些逻辑而不重复?
【问题讨论】:
-
你能提供一些代码吗?由于 ddp 强制所有节点对模型进行初始化,因此 fit 范围内的所有内容都应执行多次,但我认为这不是您的问题? pytorch-lightning.readthedocs.io/en/stable/advanced/…
-
感谢您的回答。是的,这也是我所期望的。然而,似乎不仅“.fit()”中的内容是并行发生的,而且它周围的所有代码也是并行发生的。例如。当我运行脚本“main.py”时,我在其中按顺序打印一些内容并调用 Trainer.fit(),打印结果与进程数(GPU)重复。这显然不是我所期望的。也许有一个 hack 解决这个问题,但与此同时我发现,在 PyTorch 中使用 ddp 进行本地多处理要好几光年(至少对于研究而言),请参阅我自己的答案。
标签: pytorch multi-gpu ddp pytorch-lightning