在这个 TensorFlow 教程中,您可以使用 N 个 GPU 将 N 个 mini-batch(每个包含 M 个训练样本)分配给每个 GPU,并同时计算梯度。
然后平均从 N 个 GPU 收集的梯度并更新模型参数。
但这与使用单个 GPU 计算 N*M 训练样本的梯度,然后更新参数的效果相同。
因此,在我看来,唯一的优势是您可以在相同的时间内使用更大的 mini-batch。
但是更大的 mini-batch 一定更好吗?
我认为您不应该使用大型 mini-batch,以使优化对鞍点更加稳健。
如果更大的 mini-batch 确实不是更好,为什么还要关心 Multi-GPU 学习,甚至是 Multi-server 学习?
(上面的教程是同步训练,如果是异步训练,那我可以看出优点了,因为参数会更新,不会平均每个GPU计算的梯度)