使用Keras如何使用多个GPU训练GANs?

6
有三个主要的挑战:a) 如何保存和加载优化器状态,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个回答

1
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执行相同的操作。

这是一种巧妙的重复使用multi_gpu_model API的方法,但它并不能解决优化器状态和CPU/GPU利用率的问题。 - Emil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接