2016-06-10 158 views
2

this TensorFlow tutorial中,您可以使用N个GPU将N个小批量(每个包含M个训练样本)分配给每个GPU并同时计算梯度。在TensorFlow中进行多GPU训练的优势是什么?

然后,您对从N个GPU中收集的渐变进行平均并更新模型参数。

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

因此,我认为唯一的优点是可以在相同的时间内使用更大尺寸的微型批次。

但是大型小批量一定更好吗?

我以为你不应该使用一个大型的小批量,为了使优化更强大的鞍点。

如果大尺寸微型批次确实不是更好,为什么你会关心多GPU学习,甚至是多服务器学习?

(上面的教程是一个同步的训练。如果是异步的训练,然后我可以看到的优点,因为参数将在不平均由每个GPU计算出的梯度来更新)

+0

较大的小批量不是更好,但也不是较小的小批量。批量大小的最佳选择严重依赖于各种因素。 – Aenimated1

+0

假设由于VRAM尺寸的原因,每GPU有1000个采样。假设最佳的最小批量为2000。然后在这个同步多GPU设置中,使用两个以上的GPU应该没有任何优势。对? – mp2893

+0

我认为,相反,理论上(但不是实际上),您可以从2000个GPU中受益,每个GPU都可以计算单个示例的渐变。实际上,GPU开始使用相当多的并行性,但是我希望通过在(例如)4个GPU(每个负责计算每批500个样本的梯度)之间分配计算来看到性能的提高。 – Aenimated1

回答

2

主要目的多-GPU学习是为了让您在更短的时间内训练大型数据集。对于较大批量的小批量生产不一定更好,但至少您可以在更可行的时间内完成学习。

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

如果您使用同步多GPU训练,好处主要是缩短时间。您可以使用M/N大小迷你匹配来保持有效的最小批量大小,当然由于较小的批量大小会导致更多开销,因此可扩展性受到限制。大量计算节点上的数据交换和同步也是灾难。

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

+0

因此,在极端情况下,您拥有无限数量的GPU,您可以将整个训练样本分成小批量并将其分发给无限GPU。然后,平均由无限GPU计算出的梯度和更新参数将与“批量学习”完全相同。对此没有任何随机性。但这是可以的,因为即使我们有非常大的训练样本,我们仍然可以在可行的时间训练模型。我的理解是否正确? – mp2893

+0

我知道异步多GPU训练是一个不同的故事。在这篇文章中,我关注同步多GPU训练。 – mp2893

+0

@ mp2893,好吧,对于同步多GPU训练,好处是时间减少。但是,您可以使用M/N大小的迷你匹配来保持有效的最小批量大小,当然可扩展性是有限的。 – kangshiyin

相关问题