Как оптимизировать использование графических процессоров Keras при обучении imag enet? - PullRequest
0 голосов
/ 13 июля 2020

Я использую Tensorflow-gpu = 2.0, CUDA = 10.0, Keras = 2.1.6

В настоящее время я пытаюсь обучить архитектурную модель Keras re snet -56 на наборе данных Imag enet . Хотя я мог бы сделать это довольно легко на наборе данных CIFAR-10, Imag enet ... более проблематичен.

Таким образом, у меня есть вопрос относительно обучения Imag enet с использованием Keras.

Я знаю из надежного источника в своей лаборатории, что с моими графическими процессорами я смогу обучить модель re snet -56 за 6-10 дней (имейте в виду, что человек делал это год а go) означает, что на тренировку одной эпохи должно уйти примерно 1-2 часа, НО, и это моя проблема: на тренировку одной эпохи у меня уходит от 25 до 33 часов. Каждый шаг обучения занимает 8 секунд; как видите; 8 с на шаг Когда я проверяю использование графических процессоров с помощью команды nvidia-smi, я замечаю, что GPUS имеет тенденцию «скачивать» каждые 8 ​​секунд. Они будут работать по 1 секунде каждые 8 ​​секунд, и все. использование графических процессоров в данный момент -> обратите внимание на неиспользование графических процессоров использование графических процессоров на секунду позже -> обратите внимание, что на этот раз используются все они графические процессоры использование через одну секунду -> обратите внимание, что теперь ни один из них не используется

Я следил за рекомендациями keras о том, как распространять мой графический процессор, поэтому я не уверен, почему он делает это На данный момент лучшее предположение после чтения нескольких веб-сайтов inte rnet состоит в том, что временные потери (связанные с неправильным использованием графических процессоров) могут возникать из-за использования процессоров для загрузки данных. Итак, для 7s скрипт будет использовать CPU для загрузки данных и, возможно, их предварительной обработки, затем он будет использовать графические процессоры в течение 1 секунды для обучения модели и так далее ... Это мое предположение, поэтому я пытаюсь реализовать следующие помощники из тензорный поток; https://www.tensorflow.org/guide/data_performance#optimize_performance Но я не уверен, поможет ли. Я также включаю часть скрипта, поскольку это может быть причиной;

training_dir = ['path/to/imagenet/training/set/']
validation_dir = ['path/to/imagenet/validation/set/']

strategy = tf.distribute.MirroredStrategy(devices=["/gpu:0","    gpu:1","gpu:2","gpu:3","gpu:4","gpu:5","gpu:6","gpu:7"])
with strategy.scope():
    model = get_compiled_model()

train_datagen = ImageDataGenerator(rotation_range=80,
                                   width_shift_range=0.25,
                                   fill_mode='nearest',
                                   rescale = (1.0/255.0),
                                   horizontal_flip=True,
                                   data_format='channels_first')

valid_datagen = ImageDataGenerator(data_format='channels_first',
                                   rescale = (1.0/255.0))

ds = tf.data.Dataset.from_generator(lambda:train_datagen.flow_from_directory(training_dir,
                                    target_size=(224,224),
                                    class_mode='categorical',
                                    batch_size=16*strategy.num_replicas_in_sync,
                                    shuffle=True),
                                    output_types=(tf.float32,tf.float32),
                                    output_shapes=([None,3,224,224],[None,1000])

val = tf.data.Dataset.from_generator(lambda:train_datagen.flow_from_directory(validation_dir,
                                     target_size=(224,224),
                                     class_mode='categorical',
                                     batch_size=16*strategy.num_replicas_in_sync,
                                     shuffle=True),
                                     output_types=(tf.float32,tf.float32),
                                     output_shapes=([None,3,224,224],[None,1000])

callbacks = [lr_reducer, lr_scheduler]
history = model.fit(ds,
                    epochs=200,
                    callbacks=callbacks)

Итак, вот вопросы:

  1. Что может быть причиной неэффективности графических процессоров? Я угадал?
  2. Как оптимизировать использование графических процессоров? Это ваше мнение?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...