多 GPU 训练不会减少训练时间
Multi-GPU training does not reduce training time
我尝试使用keras训练了三个UNet模型进行图像分割,以评估多GPU训练的效果。
- 第一个模型是在 1 个 GPU (P100) 上使用 1 个批量大小训练的。每个训练步骤大约需要 254 毫秒。 (注意是step,不是epoch)。
- 第二个模型是使用 1 个 GPU (P100) 使用 2 个批量大小训练的。每个训练步骤耗时约 399 毫秒。
- 第三个模型是使用 2 个 GPU (P100) 使用 2 个批量大小训练的。每个训练步骤大约需要 370 毫秒。从逻辑上讲,它应该与第一种情况花费相同的时间,因为两个 GPU 并行处理 1 个批次但花费了更多时间。
谁能说出多 GPU 训练是否会缩短训练时间?作为参考,我尝试了所有使用keras的模型。
我推测这是因为您使用了非常小的batch_size;在这种情况下,将 gradients/computations 分布在两个 GPU 上并将它们取回(以及 CPU 到 GPU(2) 数据分布)的成本超过了您可能获得的并行时间优势与顺序训练(在 1 个 GPU 上)。
例如,对于 8/16 的批量大小,预计会有更大的差异。
我尝试使用keras训练了三个UNet模型进行图像分割,以评估多GPU训练的效果。
- 第一个模型是在 1 个 GPU (P100) 上使用 1 个批量大小训练的。每个训练步骤大约需要 254 毫秒。 (注意是step,不是epoch)。
- 第二个模型是使用 1 个 GPU (P100) 使用 2 个批量大小训练的。每个训练步骤耗时约 399 毫秒。
- 第三个模型是使用 2 个 GPU (P100) 使用 2 个批量大小训练的。每个训练步骤大约需要 370 毫秒。从逻辑上讲,它应该与第一种情况花费相同的时间,因为两个 GPU 并行处理 1 个批次但花费了更多时间。
谁能说出多 GPU 训练是否会缩短训练时间?作为参考,我尝试了所有使用keras的模型。
我推测这是因为您使用了非常小的batch_size;在这种情况下,将 gradients/computations 分布在两个 GPU 上并将它们取回(以及 CPU 到 GPU(2) 数据分布)的成本超过了您可能获得的并行时间优势与顺序训练(在 1 个 GPU 上)。
例如,对于 8/16 的批量大小,预计会有更大的差异。