我想同时使用并行模型和并行数据,并从官方网站上阅读了许多文档和教程。 我面临的一个令人困惑的问题是如何在每个过程中收集各种仪表值?
问题1 :在official tutorial中,他们只记录每个过程中的仪表值。 但是在我的代码中,我在每个过程中打印损失值,它们是不同的。因此,我认为其他仪表的价值也有所不同。 该教程是否错误?我认为,正确的方法应该首先同步损耗,acc和其他电表,然后所有过程保持相同的值,之后我只需要将电表信息打印到一个处理。
Question2 :在official tutorial中,他们说'DistributedDataParallel模块还处理世界范围内的梯度平均,因此我们不必在训练步骤中明确地对梯度进行平均'。 但是,由于问题1, API确实按照教程中的说明工作吗?由于每个过程都有不同的损失值,尽管它们从相同的初始权重开始,所以将对权重进行建模每个过程中的优化方向都不同?
答案 0 :(得分:0)
分布式采样器为每个过程提供了不同的训练数据子集,因此在每个过程中评估的损失将有所不同。如果仅在没有分布式采样器的情况下计算每个过程中测试集的损失,就会看到所有过程报告的数字相同。