在玩了一段时间当前的分布式训练实现之后,我认为它将每个 GPU 视为一个单独的工作人员。但是,现在一个盒子中有 2~4 个 GPU 很常见。采用单盒多 GPU 方法先计算单盒中的平均梯度,然后跨多个节点同步不是更好吗?这种方式大大减轻了 I/O 流量,这一直是数据并行的瓶颈。
有人告诉我,当前的实现可以通过将所有 GPU 放在单个盒子中作为工作人员,但我无法弄清楚如何将平均梯度与 SyncReplicasOptimizer 联系起来,因为 SyncReplicasOptimizer 直接将优化器作为输入。
任何人的任何想法?