使用GPU在keras中进行多进程处理

3

我需要并行计算多个深度模型并平均它们的结果。在使用GPU0完成计算后,我的工作会一直运行。

def model_train(self, params):
    from nn_arch import nn_models
    X, y, gpu_no = params
    print("GPU NO ", gpu_no)
    with tf.device('/gpu:' + str(gpu_no)):
        model1 = nn_models.lenet5()
        early_callback = CustomCallback()
        model1.fit(X, y, batch_size=256, validation_split=0.2, callbacks=[early_callback],
                   verbose=1,
                   epochs=1)
    return model1

以下是我的主要方法。 在这个例子中,我有两个GPU

def main(self, X_train, y_train, X_test, y_test):
    random_buckets = self.get_random()
    X = [X_train[random_buckets[k]] for k in sorted(random_buckets)]
    y = [y_train[random_buckets[j]] for j in sorted(random_buckets)]

    params = zip(X, y, [0, 1])
    models = pool1.map(self.model_train, params)

如何使用Keras并行训练多个模型(采用数据并行方法)。

2个回答

4
在Keras中编译模型之前,请添加以下行:
model = make_parallel(model, 2)
其中2是可用的GPU数量。
make_parallel函数在此文件中可用。只需在您的代码中导入该文件,您的代码将在多个GPU上执行。

https://github.com/kuza55/keras-extras/blob/master/utils/multi_gpu.py

make_parallel是一个简单的函数,它可以:

  • 在你指定的N个GPU上实例化模型的副本
  • 将批次分成N个大小相等的小批次
  • 将每个小批次传递到相应的模型中
  • 连接模型的输出


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