После следования совету @Frederik Bode и создания реплики ВМ с установленным TF 1.15 и соответствующими драйверами мне удалось решить мою проблему.
Вместо того, чтобы использовать вызов функции multi_gpu_model
в tf.keras, на самом деле лучше использовать распределенную стратегию и запустить модель в этой области.
Существует руководство, описывающее, как это сделать. это здесь .
По сути, теперь мой код выглядит следующим образом:
mirrored_strategy = tf.distribute.MirroredStrategy()
with mirrored_strategy.scope():
training_dataset, validation_dataset = get_datasets()
model = setup_model()
# Don't do this, it's not necessary!
#### NOT NEEDED model = tf.keras.utils.multi_gpu_model(model, 4)
opt = tf.keras.optimizers.Adam(learning_rate=args.learning_rate)
model.compile(loss='sparse_categorical_crossentropy',
optimizer=opt,
metrics=['accuracy'])
steps_per_epoch = args.steps_per_epoch
validation_steps = args.validation_steps
model.fit(training_dataset, steps_per_epoch=steps_per_epoch, epochs=args.num_epochs,
validation_data=validation_dataset, validation_steps=validation_steps)
Я настроил небольшой набор данных, чтобы быстро создать прототип.
При использовании одного графического процессора P100 время эпохи составляет в среднем 66 секунд.
При использовании 4 графических процессоров с использованием приведенного выше кода среднее время эпохи составило 19 секунд.