我需要并行计算多个深度模型并平均其结果 . 用 GPU 0
完成计算后,我的工作永远运行 .
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
我的主要方法如下 . In this case I have 2 GPUs
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 回答
在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个均匀分布的小批量
它将每个较小的批次传递到相应的模型中
它连接模型的输出
请参考多GPU TensorFlow教程作为参考 .
https://github.com/tensorflow/tensorflow/blob/r0.7/tensorflow/models/image/cifar10/cifar10_multi_gpu_train.py