在this TensorFlow tutorial中,您可以使用N个GPU将N个小批量(每个包含M个训练样本)分配到每个GPU并同时计算渐变。
然后平均从N个GPU收集的渐变并更新模型参数。
但这与使用单个GPU计算N * M训练样本的梯度,然后更新参数具有相同的效果。
因此,我认为唯一的优势就是您可以在相同的时间内使用更大尺寸的小批量。
但较大尺寸的迷你批次必然会更好吗?
我认为你不应该使用大尺寸的小批量,以使优化对马鞍点更加稳健。
如果大尺寸的小批量确实不是更好,你为什么要关心多GPU学习,甚至是多服务器学习呢?
(上面的教程是同步训练。如果是异步训练,那么我可以看到优点,因为参数将在不平均每个GPU计算的梯度的情况下进行更新)
答案 0 :(得分:2)
多GPU学习的主要目的是让您能够在更短的时间内训练大型数据集。对于较大的小批量,它不一定更好,但至少你可以在更可行的时间内完成学习。
更确切地说,如果您使用异步SGD算法,那些N个小批量不会以同步方式进行训练。由于算法在使用多GPU时发生了变化,因此不等于使用SGD算法在单GPU上使用MxN大小的小批量。
如果您使用同步多GPU培训,其好处主要是减少时间。您可以使用M / N大小的迷你匹配来维持有效的小批量大小,当然可扩展性受到限制,因为较小的小批量大小会导致更多的开销。大量计算节点上的数据交换和同步也是灾难。
最后,为了解决可伸缩性问题,人们在同时使用大量GPU时转移到A-SGD。因此,您可能不会看到有人在数百个(甚至数十个)GPU上使用同步多GPU培训。
答案 1 :(得分:0)
更多的 gpu 意味着一批数据更多。并且批量数据的梯度被平均用于反向传播。
如果一个batch的学习率是固定的,那么一个数据的学习率就更小。
如果一个数据的学习率是固定的,那么一个batch的学习率就更大。