【发布时间】: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