我想同时使用模型并行和数据并行,并从官方网站上阅读了许多文档和教程。我面临的一个令人困惑的问题是,如何在每个过程中收集各种仪表值?
Question1:在官方教程中,它们只记录每个进程中的仪表值。但是在我的代码中,我在每个进程中打印损失值,它们是不同的。所以,我认为其他仪表的价值也是不同的。是错的吗?在我看来,我认为正确的方法应该是先同步丢失,acc和其他仪表,然后所有进程保持相同的值,之后我只需要在一个进程中打印仪表信息。
Question2:在官方教程中,他们说‘DistributedDataParallel模块也处理世界各地梯度的平均值,所以我们不必在训练步骤中显式地平均梯度’。但是,由于question1,API实际上是否像教程中所说的那样工作呢?,因为每个过程都有不同的损失值,虽然它们从相同的初始权重开始,但会在不同的方向上对每个进程的权重进行优化吗?
发布于 2020-04-01 16:30:03
分布式采样器为每个过程提供了不同的训练数据子集,因此每个过程中估计的损失是不同的。如果您只是计算每个进程中没有分布式采样器的测试集的损失,您将看到所有进程都报告相同的数目。
https://stackoverflow.com/questions/56205691
复制相似问题