【问题标题】:What is the advantage of doing a Multi-GPU training in TensorFlow?在 TensorFlow 中进行多 GPU 训练有什么优势?
【发布时间】:2016-10-11 19:27:11
【问题描述】:

this TensorFlow tutorial 中,您可以使用 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计算的梯度)

【问题讨论】:

  • 更大的小批量不一定更好,但更小的小批量也不是必须的。批量大小的最佳选择很大程度上取决于各种因素。
  • 假设由于 VRAM 大小,每个 GPU 的样本数限制为 1,000 个。让我们假设最佳的小批量大小是 2,000。那么在这种同步多 GPU 设置中,使用超过 2 个 GPU 应该没有任何优势。对吗?
  • 相反,我认为理论上(但实际上不是)您可以从 2000 个 GPU 中受益,每个 GPU 都计算单个示例的梯度。实际上,GPU 一开始就利用了大量的并行性,但是,我希望通过在(例如)4 个 GPU(每个负责计算每批 500 个样本的梯度)之间分配计算来提高性能。跨度>
  • 这是一个有效的观点。运行 500 个训练样本将比运行 1000 个样本快得多。
  • 为什么要平均梯度?

标签: optimization gpu tensorflow multi-gpu


【解决方案1】:

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

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

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

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

【讨论】:

  • 因此,在您拥有无限数量的 GPU 的极端情况下,您可以将整个训练样本分成小批量并将它们分发到无限数量的 GPU。然后,对无限 GPU 计算的梯度进行平均并更新参数将与“批量学习”完全相同。这没有任何随机性。但这没关系,因为我们仍然可以在可行的时间内训练模型,即使我们有非常大的训练样本。我的理解正确吗?
  • 我知道异步多 GPU 训练是另一回事。在这篇文章中,我将重点介绍同步多 GPU 训练。
  • @mp2893,好的,对于同步多GPU训练,好处是减少了时间。但是你可以使用 M/N-size mini-match 来保持有效的 mini-batch 大小,当然扩展性是有限的。
  • 是的,这是有道理的。我想现在我对这个问题有了更好的理解。感谢@Aenimated1 和@Eric!!
  • @kangshiyin,如果你能看看这个,我将不胜感激,感谢你的时间。 stackoverflow.com/questions/45643375/…
【解决方案2】:

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

如果一个batch的学习率是固定的,那么一个数据的学习率会更小。

如果一个数据的学习率是固定的,那么一个batch的学习率就比较大。

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

【讨论】:

    猜你喜欢
    • 2017-09-10
    • 2018-03-03
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 2017-01-12
    相关资源
    最近更新 更多