4

这个 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计算的梯度)

4

2 回答 2

2

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

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

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

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

于 2016-06-10T18:26:44.893 回答
0

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

如果一个批次的学习率是固定的,那么一个数据的学习率就更小。

如果一个数据的学习率是固定的,那么一个批次的学习率会更大。

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

于 2021-02-18T03:30:42.147 回答