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