Optimization 在TensorFlow中进行多GPU培训的优势是什么?

Optimization 在TensorFlow中进行多GPU培训的优势是什么?,optimization,gpu,tensorflow,multi-gpu,Optimization,Gpu,Tensorflow,Multi Gpu,在中,您可以使用N个GPU将N个小批次(每个小批次包含M个训练样本)分配到每个GPU,并同时计算梯度 然后平均从N个GPU收集的梯度并更新模型参数 但这与使用单个GPU计算N*M训练样本的梯度,然后更新参数的效果相同 所以在我看来,唯一的优势是,你可以在同样的时间内使用一个更大尺寸的小批量 但规模越大的迷你批次是否一定越好 我认为您不应该使用大尺寸的小批量,以便使优化对鞍点更加健壮 如果规模更大的迷你批处理确实不是更好,那么为什么您会关心多GPU学习,甚至多服务器学习 (上面的教程是同步培训。如

在中,您可以使用N个GPU将N个小批次(每个小批次包含M个训练样本)分配到每个GPU,并同时计算梯度

然后平均从N个GPU收集的梯度并更新模型参数

但这与使用单个GPU计算N*M训练样本的梯度,然后更新参数的效果相同

所以在我看来,唯一的优势是,你可以在同样的时间内使用一个更大尺寸的小批量

但规模越大的迷你批次是否一定越好

我认为您不应该使用大尺寸的小批量,以便使优化对鞍点更加健壮

如果规模更大的迷你批处理确实不是更好,那么为什么您会关心多GPU学习,甚至多服务器学习


(上面的教程是同步培训。如果是异步培训,那么我可以看到它的优点,因为参数将在不平均每个GPU计算的梯度的情况下进行更新)

多GPU学习的主要目的是使您能够在较短的时间内对大数据集进行培训。使用更大的小批量并不一定更好,但至少您可以在更可行的时间内完成学习

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

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


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

更多GPU意味着批处理中的数据更多。并对批处理数据的梯度进行平均以进行反向传播

如果批次的学习率是固定的,则数据的学习率较小

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


小批量生产不一定比小批量生产更好,但小批量生产也不一定比小批量生产更好。批量大小的最佳选择在很大程度上取决于各种因素。假设由于VRAM的大小,每个GPU有1000个样本。让我们假设最佳的小批量是2000。那么在这个同步多gpu设置中,使用超过2个gpu应该没有任何优势。对吗?我认为,与此相反,从理论上(但实际上)你可以从2000个GPU中获益,每个GPU计算一个示例的梯度。实际上,GPU从一开始就利用了相当多的并行性,但尽管如此,我希望通过在(例如)4个GPU(每个GPU负责计算每批500个样本的梯度)之间分配计算来提高性能。这是一个有效点。运行500个训练样本将比运行1000个样本快得多。为什么要平均梯度?因此,在极端情况下,如果您有无限多个GPU,您可以将整个训练样本分解为小批量,并将其分发到无限多个GPU。然后,对无限GPU计算的梯度求平均值并更新参数将与“批量学习”完全相同。这并不是随机的。但这没关系,因为我们仍然可以在可行的时间内训练模型,即使我们有非常大的训练样本。我的理解正确吗?我知道异步多gpu培训是另一回事。在本文中,我将重点介绍同步多gpu培训。@mp2893,好的,对于同步多gpu培训,好处是减少时间。但是您可以使用M/N-size mini-match来保持有效的mini-batch大小,当然可伸缩性是有限的。是的,这是有意义的。我想现在我对这个问题有了更好的了解。感谢@Aenimated1和@Eric@康世音,如果你能看一下这个,我将不胜感激,谢谢你抽出时间。