【发布时间】:2020-07-17 03:41:25
【问题描述】:
我是 Pytorch DstributedDataParallel() 的新手,但我发现大多数教程在训练期间保存了 local rank 0 模型。这意味着,如果我得到 3 台机器,每台机器配备 4 个 GPU,那么在决赛中,我将得到 3 个模型,每台机器都可以节省。
例如在 pytorch ImageNet 教程第 252 行:
if not args.multiprocessing_distributed or (args.multiprocessing_distributed
and args.rank % ngpus_per_node == 0):
save_checkpoint({...})
如果rank % ngpus_per_node == 0,他们会保存模型。
据我所知,DistributedDataParallel() 会自动减少后端的损失,无需做任何进一步的工作,每个进程都可以在此基础上自动同步损失。 每个流程上的所有模型只会在流程结束时略有不同。这意味着我们只需要保存一个模型就足够了。
那么我们为什么不把模型保存在rank == 0,而是rank % ngpus_per_node == 0?
如果我有多个模型,我应该使用哪个模型?
如果这是在分布式学习中保存模型的正确方法,我应该合并它们,使用其中一个,还是根据所有三个模型推断结果?
如果我错了,请告诉我。
【问题讨论】:
-
你读过pytorch.org/tutorials/intermediate/…吗?我很好奇,哪一部分对你来说没有意义? (顺便说一句,我发现它也是一个非常令人困惑的教程)
-
@CharlieParker 教程很清楚。但从 ImageNet 示例代码中,他们为每台计算机保存了模型。所以我只是想知道从每台计算机保存的每个模型之间是否有任何不同。训练后我应该使用哪一个。 Szymon Maszke 的回答很棒。我明白了。
标签: pytorch distribute