我应该 运行 训练过程是串行还是并行?

Should I run the training process serially or parallelly?

我有 21 个 ANN 训练过程 运行。

我手上有四台电脑。其中三个配备了 GPU(每个两个 GPU)。

运行 在最短时间内启动培训的最佳方法是什么?

我建议你使用多GPU训练,一次训练一个模型。所以用两个 gpus 在每台计算机上训练一个模型。

os.environ["CUDA_VISIBLE_DEVICES"] = "0,1" # 使用两个 gpus 进行训练。

这里有一个如何使用多个 GPU 的例子:

strategy = tf.distribute.MirroredStrategy(devices=["/device:GPU:0","/device:GPU:1"])
with strategy.scope():
    model = get_model()
    model.compile()
    model.fit()

使用镜像策略,batch size 会被拆分。所以你可以使用更大的批量大小。

要明确回答这个问题是不可能的。在方向上,您需要考虑的一些事情是:

您是否将模型调整为 GPU 瓶颈而不是 CPU?这是 DL 训练的最佳实践。

你有一套调整好的训练超参数吗?通过适当的调整,您可以显着降低训练速度 - 就像数量级一样。 (有可能在 V100 上训练 34 秒后在 CIFAR10 上获得 SOTA 性能。如果你自己摸索几天,可能需要 30 分钟的训练才能获得 SOTA 精度)。

你们有能力扩展批量大小吗? “在 76 分钟内训练 Bert”论文谈到了一些技术,从热身到基本上是 LARS + Adam 的新优化器。

您是否有在一台机器上扩展到多个 GPU 的经验?在 TF2/Keras 中通常没有那么难。您有扩展到多台机器的经验吗?我还没有做过,但假设它有点难。

TLDR 如果您对以上所有内容都没有太大信心,那么 运行 并行 7 个模型在方向上会更好。

如果您对以上内容很有信心,可以尝试扩展到所有 7 个 GPU。

如果您介于两者之间,您可以尝试 运行 4 个并行训练作业,每台机器一个,其中三个使用双 GPU。