#python #tensorflow #keras #deep-learning
#python #тензорный поток #keras #глубокое обучение
Вопрос:
У меня есть компьютер со следующими характеристиками:
- Процессор: AMD Ryzen Threadripper 2990wx (32 ядра)
- Оперативная память: 32 ГБ
- Видеокарты: (GPU: 1) GTX1080 Ti (11 ГБ), (GPU: 0) GTX1070 (8 ГБ)
- SSD: 2 ТБ Samsung Evo 890
Мой вопрос в том, что когда я запускаю свою обучающую программу с использованием Keras примерно на 60 тыс. изображений (GPU: 1), программа загружает изображения, а матрица данных составляет 12922,20 МБ
После этого программа ничего не делает в течение минуты и автоматически завершается. Тот же код, похоже, обучается на GPU: 1 и отлично работает с 10 тыс. изображений.
- Может ли это быть связано с тем, что мой GPU: 1 может хранить только 11 ГБ, а размер данных составляет около 12 ГБ?
- Решит ли мою проблему распараллеливание GPU: 1 и GPU: 0? Если да, будет ли это 16 ГБ видеопамяти (8 8) или 19 ГБ (11 8)?
- Я делаю что-то не так? Сообщение, на которое я ссылаюсь: https://www.pyimagesearch.com/2018/09/10/keras-tutorial-how-to-get-started-with-keras-deep-learning-and-python с некоторыми незначительными изменениями.
Я пытался искать в Интернете и на SO, но я не смог найти / понять много информации о том, как распределяется / масштабируется память GPU при использовании Multi-GPU с Keras.
Любая помощь будет оценена!
Комментарии:
1. Изображения, вероятно, загружаются не в видеопамять, а в вашу оперативную память. Вы проверяли использование оперативной памяти вашего ПК?
Ответ №1:
Я бы сначала рекомендовал вам проверить использование памяти при обучении на одном графическом процессоре; Я подозреваю, что ваш набор данных загружается не в память графического процессора, а в ОЗУ.
Вы можете попытаться установить:
1.
import os
#Enable system to see only one of the video cards
os.environ["CUDA_VISIBLE_DEVICES"] = "0"/"1"
Проверьте, чтобы увидеть точное отображение (что tensorflow видит ваш графический процессор):
tf.config.list_physical_devices('GPU')
- Теперь точно проверьте, сколько видеопамяти используется в этом случае:
Затем в терминале вы можете nvidia-smi
проверить, сколько памяти GPU было выделено; в то же время, используя watch -n K nvidia-smi
-
При использовании нескольких графических процессоров убедитесь, что вы используете
tf.distribute.MirroredStrategy()
и объявляете свою логику создания модели подгонки, как показано ниже:strategy = tf.distribute.MirroredStrategy() print('Number of devices: {}'.format(strategy.num_replicas_in_sync)) # Open a strategy scope. with strategy.scope(): # Everything that creates variables should be under the strategy scope. # In general this is only model construction amp; `compile()`. model = Model(...) model.compile(...)
Вне области стратегии
model.fit(train_dataset, validation_data=val_dataset, ...)
model.evaluate(test_dataset)
Комментарии:
1. Спасибо за ответ, у меня он работает и отлично тренируется на одном графическом процессоре, но с 10 тыс. образцов (3x классов)
2. Кроме того, несмотря на то, что используется видеопамять, даже если я обучаю небольшой набор данных, он по-прежнему использует всю оперативную память
3. Да, это хорошо, по крайней мере, он тренируется на GPU. И он терпит неудачу только при попытке использовать несколько графических процессоров? Вы использовали MirroredStrategy() для мульти-gpu или Keras multi_gpu_model?
4. Спасибо за ваш ответ. Нет, я еще не пробовал работать с мульти-графическим процессором. Я хотел быть уверенным в том, как будет работать распределение, прежде чем погрузиться в это. В настоящее время я смог обучить гораздо больший набор данных, увеличив объем памяти подкачки на 64 ГБ, поэтому я думаю, что в настоящее время это решило мою проблему, но я бы очень хотел начать с обучения с несколькими графическими процессорами и поиграю с MirroredStrategy() и посмотрю, как ведет себя машина: D
5. Что-то здесь не так; вам не нужно увеличивать объем памяти подкачки, чтобы иметь возможность тренироваться. Если это происходит, то это означает, что графический процессор используется неправильно, хотя на уровне выделения Tensorflow может это видеть.