您如何通过Keras使用多个GPU训练GAN?

时间:2018-09-23 06:21:31

标签: python tensorflow keras deep-learning

存在三个主要挑战: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的干净方法。

1 个答案:

答案 0 :(得分:0)

multi_gpu_model可以在生成器,鉴别器和gan的每个函数中使用

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

对于鉴别器和gan也可以这样做。