【问题标题】:Multi-GPU training does not reduce training time多 GPU 训练不会减少训练时间
【发布时间】:2020-03-24 10:51:42
【问题描述】:

我曾尝试使用 keras 训练三个 UNet 模型进行图像分割,以评估多 GPU 训练的效果。

  1. 第一个模型在 1 个 GPU (P100) 上使用 1 个批量大小进行训练。每个训练步骤耗时约 254 毫秒。 (注意这是一步,而不是时代)。
  2. 使用 1 个 GPU (P100) 使用 2 个批量大小训练第二个模型。每个训练步骤耗时约 399 毫秒。
  3. 第三个模型使用 2 个批量大小和 2 个 GPU (P100) 进行了训练。每个训练步骤耗时约 370 毫秒。从逻辑上讲,它应该花费与第一种情况相同的时间,因为两个 GPU 并行处理 1 个批次,但花费了更多时间。

谁能判断多 GPU 训练是否会缩短训练时间?作为参考,我尝试了所有使用 keras 的模型。

【问题讨论】:

  • 你应该看看,给定相同的模型初始化,总收敛时间。否则对于multigpu模型的“什么是步骤”以及“什么是纪元”可能会有很多疑问。
  • @DanielMöller : 你能告诉我总收敛时间是什么意思吗?
  • 你的意思是最低验证错误吗?
  • 是的,模型达到预期效果所需的时间。 Srihari 在这里给出的答案似乎说了类似的话。

标签: tensorflow keras multi-gpu


【解决方案1】:

我认为这是由于您使用了非常小的 batch_size;在这种情况下,将梯度/计算分布在两个 GPU 上并将它们取回(以及 CPU 到 GPU(2) 数据分布)的成本超过了与顺序训练(在 1 个 GPU 上)相比可能获得的并行时间优势.

例如,对于 8/16 的批量大小,预计会有更大的差异。

【讨论】:

  • 你是对的。我刚刚尝试在 v100 GPU 上训练 8 个批量大小,在两个 v100 GPU 上训练 16 个批量大小,两者的每一步所花费的时间是相等的。这意味着多 GPU 训练的模型在一个训练步骤中所花费的时间与单 GPU 所花费的时间相同。但是对于较大的批量大小,差异会很明显。