optimization - 在 TensorFlow 中进行多 GPU 训练有什么优势?

标签 optimization gpu tensorflow multi-gpu

this TensorFlow tutorial ,您可以使用 N 个 GPU 将 N 个小批量(每个包含 M 个训练样本)分发到每个 GPU 并同时计算梯度。

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

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

所以在我看来唯一的优势是你可以在相同的时间内使用更大尺寸的 mini-batch。

但是,更大尺寸的小批量就一定更好吗?

我认为您不应该使用大型小批量,以便使优化对鞍点更加稳健。

如果更大尺寸的 mini-batch 确实不是更好,你为什么要关心多 GPU 学习,甚至多服务器学习?

(上面的教程是同步训练。如果是异步训练,那么我可以看到优点,因为参数会更新,而不会对每个GPU计算的梯度进行平均)

最佳答案

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

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

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

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

关于optimization - 在 TensorFlow 中进行多 GPU 训练有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37754828/

相关文章:

python - 为什么tensorflow中的 `tf.nn.nce_loss`无法在GPU上运行?

machine-learning - 用于(转换)神经网络计算的CPU与GPU

python - 我们可以用 TensorFlow 严格复现 Alexnet 网络架构吗?

machine-learning - tf.gradients 在 TensorFlow 中如何工作

c# - Crm 2011 实体集合查询和性能问题

c++ - 如何有效地比较包含 double 的 std::tuple 是否相等

c# - StringBuilder ToString() 性能

c++ - C/C++ 的 JIT 优化器

python - 新的曼巴环境强制 torch CPU,我不知道为什么

python - 使用 tf.optimizers.Adam.minimize() 时,对象不可调用