Я использую 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)
Итак, вот вопросы:
- Что может быть причиной неэффективности графических процессоров? Я угадал?
- Как оптимизировать использование графических процессоров? Это ваше мнение?