【问题标题】:How do you train GANs using multiple GPUs with Keras?如何使用 Keras 的多个 GPU 训练 GAN?
【发布时间】:2018-12-03 19:42:02
【问题描述】:

面临三个主要挑战:a) 你如何save and load the optimizer state,b) 你如何使用多个 GPU 和嵌套模型,见下文,以及 c) 你如何创建工作流来优化 GPU 和 CPU 利用率?

上下文

我们有三个组件:

  1. 鉴别器
  2. 生成器和
  3. 同时具有判别器和生成器的 GAN。

优化器状态

由于鉴别器包含在 GAN 中,并且它们也需要在训练期间单独使用 - 如何保存和加载 GAN?现在,我分别保存生成器和判别器,并为每个训练集重新编译 GAN,但是这样会丢失优化器状态。

多个 GPU

这是 API 的样子:

from keras.utils import multi_gpu_model
parallel_model = multi_gpu_model(model, gpus=8)

这里的挑战与优化器相同。由于鉴别器包含在 GAN 中,因此您不能将 multi_gpu_model 同时应用于鉴别器和 GAN。您可以在创建 GAN 之前将multi_gpu_model 添加到鉴别器和生成器,但根据我的经验,它不能很好地扩展并导致 GPU 利用率低下。

GPU 和 CPU 利用率

可以使用多处理对数据进行预处理和排队。由于multi_gpu_model API 不支持 GAN,因此您需要经常合并权重并在 CPU 和 GPU 之间跳跃。因此,我还没有找到一种干净的方式来利用 GPU 和 CPU。

【问题讨论】:

    标签: python tensorflow keras deep-learning


    【解决方案1】:

    multi_gpu_model 可用于 generator、discriminator 和 gan 的每个函数中

    def create_generator():
      #network architecture 
      generator = Model(inputs=input, outputs=output)
      generator = multi_gpu_model(generator, gpus=2)
      generator.compile()
      return generator
    

    判别器和 gan 也可以这样做。

    【讨论】:

    • 这是复用multi_gpu_model api的一种巧妙方法,但它并没有解决优化器状态和cpu/gpu利用率的问题。
    猜你喜欢
    • 2021-06-13
    • 2018-12-06
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多