gpt4 book ai didi

python - 是否可以在单个 python 脚本中在多个 GPU 上并行训练多个 Keras 模型?

转载 作者:行者123 更新时间:2023-12-04 03:45:07 24 4
gpt4 key购买 nike

如果我想训练 Keras 模型并有多个可用的 GPU,有几种方法可以有效地使用它们:

  • 将每个 GPU 分配给不同的模型,并并行训练它们(例如,用于超参数调整或不同架构之间的比较)。例如,我将模型 1 分配给 GPU1,将模型 2 分配给 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/
    https://www.pyimagesearch.com/2017/10/30/how-to-multi-gpu-training-with-keras-python-and-deep-learning/
    但是我找不到 1) 的任何解决方案,并且要求它的帖子没有解决方案:
    Train multiple keras/tensorflow models on different GPUs simultaneously
    看起来,在这些选项已经可用的情况下,还可以选择为每个模型分配不同的 GPU 并并行训练应该是微不足道的。有什么我想念的吗?
    编辑:一个提议的解决方案是运行不同的 python 脚本。但这并不是最优的,因为它是按脚本而不是按模型划分每个 GPU,这意味着脚本的所有其他部分都需要重复运行两次。如果数据加载部分很昂贵,这将非常低效,因为两个脚本都将竞争数据访问。

    最佳答案

    一种解决方案,虽然我知道这并不是我们想要的,但使用 TFRecords .这是 OP 描述的场景,我们将在哪里运行不同的 python 脚本——每个脚本对应于同一模型的一些变体。关于训练 ANN,您应该意识到的是,在大多数情况下,当 GPU 忙碌时,CPU 相对空闲。在加载数据集时,有两种情况:

  • 在开始时加载整个数据集(使用 n 同一模型的不同变体 - 即内存中相同数据集的 n 倍,这对于大数据可能是致命的,我们花费了 n 倍的时间来加载数据)
  • 创建为每个批次查询的数据训练/测试生成器(内存问题部分解决,但我们可能会花更多时间等待数据 - 从不同的磁盘位置读取等...)

  • 2. 场景的问题在于,在每批之后,我们必须等待下一批加载、准备(如增强等)并传输到 GPU。 TensorFlow 提供了 TFRecords,它是一种用于存储数据的二进制格式。除了格式本身,还有用于查询以这种格式存储的数据的 API,其想法是当 GPU 忙时,我们可以异步准备下一批与 CPU,从而解决瓶颈。这在这里得到了很好的描述:
    https://www.tensorflow.org/guide/data_performance
    当然,这里没有一个全局加载功能,但这是低内存使用和快速数据集访问之间的一个很好的折衷。取决于 CPU 与 GPU 相比需要做多少工作,这可能是您问题的部分解决方案。

    关于python - 是否可以在单个 python 脚本中在多个 GPU 上并行训练多个 Keras 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65310020/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com