【发布时间】:2020-12-15 16:39:31
【问题描述】:
如果我想训练 Keras 模型并有多个 GPU 可用,有几种方法可以有效地使用它们:
-
将每个 GPU 分配给不同的模型,并并行训练它们(例如,用于超参数调整或不同架构之间的比较)。例如,我将 model1 分配给 GPU1,将 model2 分配给 GPU2,在一次全局数据加载操作之后,Keras 将在每个 GPU 上为每个模型并行运行 model.fit()。
-
划分一个模型并在所有 GPU 上并行训练。这是通过将模型分成连续的块,然后计算整个模型的所有梯度来完成的。它的实现方式不适用于不同的独立模型。
-
潜水数据并将不同批次的数据输入不同 GPU 上的同一模型。
似乎有很多关于 2) 和 3) 的文档
https://keras.io/guides/distributed_training/
https://www.run.ai/guides/multi-gpu/keras-multi-gpu-a-practical-guide/
但我找不到 1) 的任何解决方案,并且要求它的帖子没有解决方案:
Train multiple keras/tensorflow models on different GPUs simultaneously
看起来,在这些选项已经可用的情况下,还可以选择为每个模型分配不同的 GPU 并进行并行训练,这应该是微不足道的。有什么我遗漏的吗?
编辑:一种建议的解决方案是运行不同的 python 脚本。但这并不是最优的,因为它是按脚本划分每个 GPU,而不是按模型划分,这意味着脚本的所有其他部分将需要运行两次,冗余。如果数据加载部分很昂贵,这将非常低效,因为两个脚本将竞争数据访问。
【问题讨论】:
-
在我看来 1) 可以通过两次执行 python 训练脚本来轻松实现,模型和 GPU 设备作为参数传递(或硬编码)。
-
@Tinu 是的,但是我没有将 GPU 分配给模型,而是将 GPU 分配给整个脚本。这意味着我必须为每个脚本加载相同的数据集。
-
你考虑过使用
TFRecords吗?我很高兴分享答案 -
@Proko 感谢您的建议,但这解决了另一个问题(如何有效地存储和读取数据)。我仍然认为将 GPU 分配给脚本中的模型并允许多重/并行训练有明显的优势,但我还不能相信这不是一件事
-
你找到解决办法了吗?
标签: python tensorflow keras deep-learning