在 TensorFlow 中进行多 GPU 训练有什么好处?

What is the advantage of doing a Multi-GPU training in TensorFlow?

this TensorFlow tutorial中,您可以使用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计算的梯度进行平均)

多 GPU 学习的主要目的是使您能够在更短的时间内训练大数据集。更大的 mini-batch 不一定更好,但至少你可以在更可行的时间内完成学习。

更准确地说,如果您使用异步 SGD 算法,那 N 个小批量不会以同步方式训练。由于使用多GPU时算法会发生变化,因此不等于在单GPU上使用SGD算法使用MxN大小的mini-batch。

如果使用同步多GPU训练,好处主要是减少时间。您可以使用 M/N-size mini-match 来维持有效的 mini-batch 大小,当然可扩展性是有限的,因为较小的 mini-batch 大小会导致更多的开销。大量计算节点上的数据交换和同步也是灾难。

最后,为了解决可扩展性问题,人们在同时使用大量 GPU 时转向 A-SGD。所以你可能不会看到有人在数百个(甚至数十个)GPU 上使用同步多 GPU 训练。

更多的 gpu 意味着更多的批处理数据。并且批量数据的梯度被平均用于反向传播。

如果一个batch的学习率是固定的,那么一个数据的学习率就小

如果一个数据的学习率是固定的,那么一个batch的学习率就大

https://github.com/guotong1988/BERT-GPU