我在keras中尝试multi_gpu_model。除了Xception示例之外,multi-gpu版本总是比单gpu慢。
with tf.device('/cpu:0'):
model = Sequential()
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1],
border_mode='valid',
input_shape=input_shape))
model.add(Activation('relu'))
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=pool_size))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes))
model.add(Activation('softmax'))
model = multi_gpu_model(model, 4)
model.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,
verbose=1, validation_data=(X_test, Y_test))
score = model.evaluate(X_test, Y_test, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])
对于其他示例,4-gpu版本较慢。对于mnist_cnn.py,单gpu版本每个纪元大约需要3s,而4-gpu版本每个纪元大约需要4s。
我使用1台GTX1080和3台GTX1070。在Windows 10和Ubuntu 18上使用tensorflow和mxnet后端尝试使用它。使用keras 2.2.0和tensorflow-gpu 1.8.0
那么,如何正确使用multi_gpu_model来提高培训速度呢?
{{1}}