在这个 TensorFlow 教程中,您可以使用 N 个 GPU 将 N 个小批量(每个小批量包含 M 个训练样本)分配给每个 GPU 并同时计算梯度。
然后,您需要对从 N 个 GPU 收集的梯度进行平均,并更新模型参数。
但是,这与使用单个 GPU 计算 N*M 个训练样本的梯度并更新参数具有相同的效果。
因此,唯一的优势似乎是您可以在相同的时间内使用更大的小批量。
但更大的小批量是否一定更好呢?
我认为您不应该使用更大的小批量,以使优化对鞍点更加稳健。
如果更大的小批量确实没有更好的效果,那么为什么要关心多 GPU 学习,甚至多服务器学习呢?
(上面的教程是同步训练。如果是异步训练,那么我可以看到其优点,因为参数将在不对每个 GPU 计算的梯度进行平均的情况下更新)
然后,您需要对从 N 个 GPU 收集的梯度进行平均,并更新模型参数。
但是,这与使用单个 GPU 计算 N*M 个训练样本的梯度并更新参数具有相同的效果。
因此,唯一的优势似乎是您可以在相同的时间内使用更大的小批量。
但更大的小批量是否一定更好呢?
我认为您不应该使用更大的小批量,以使优化对鞍点更加稳健。
如果更大的小批量确实没有更好的效果,那么为什么要关心多 GPU 学习,甚至多服务器学习呢?
(上面的教程是同步训练。如果是异步训练,那么我可以看到其优点,因为参数将在不对每个 GPU 计算的梯度进行平均的情况下更新)