CUDA_ERROR_OUT_OF_MEMORY в Tensorflow#object_detection/train.py

Я запускаю Tensorflow Object Detection API для обучения собственного детектора с помощью скрипта object_detection/train.py, найденного здесь. Проблема в том, что я постоянно получаю CUDA_ERROR_OUT_OF_MEMORY.

Я нашел несколько предложений по уменьшению размера пакета, чтобы тренер потреблял меньше памяти, но я уменьшил с 16 до 4, но все равно получаю ту же ошибку. Разница в том, что при использовании batch_size=16 ошибка возникала на шаге ~18, а теперь на шаге ~70. РЕДАКТИРОВАТЬ: установка batch_size=1 не решила проблему, так как я все еще получал ошибку на шаге ~2700.

Что я могу сделать, чтобы он работал гладко, пока я не остановлю процесс обучения? Мне не нужно быстро тренироваться.

EDIT: сейчас я использую для этого GTX 750 Ti 2 ГБ. Графический процессор не используется ни для чего другого, кроме как для обучения и предоставления изображения на мониторе. В настоящее время я использую только 80 изображений для обучения и 20 изображений для оценки.


person Minoru    schedule 27.11.2017    source источник
comment
добавьте дополнительную информацию о размере вашего графического процессора, размере тренировочных данных и используете ли вы одновременно GPU где-либо еще?   -  person Smit Shilu    schedule 27.11.2017
comment
@SmitShilu Добавлена ​​запрошенная информация. Спасибо за помощь!   -  person Minoru    schedule 28.11.2017
comment
Извините, я не могу воспроизвести у себя, но это может быть проблема с размером изображения, если каждое изображение имеет высокое разрешение, или обратитесь к этой ссылке github.com/tensorflow/models/issues/1854   -  person Smit Shilu    schedule 28.11.2017


Ответы (2)


Я думаю дело не в batch_size, потому что можно начинать обучение на первом месте.

открыть терминал и запустить

нвидиа-сми -л

чтобы проверить, есть ли другие процессы, когда возникает эта ошибка. если вы установите batch_size = 16, вы можете узнать это довольно быстро.

person scott huang    schedule 29.11.2017

Нашел решение своей проблемы. batch_size не было проблемой, но чем выше batch_size, тем быстрее увеличивалось потребление тренировочной памяти, потому что я использовал конфигурацию config.gpu_options.allow_growth = True. Этот параметр позволяет Tensorflow увеличивать потребление памяти при необходимости и пытается использовать до 100% памяти графического процессора.

Проблема заключалась в том, что я одновременно запускал скрипт eval.py (как рекомендовано в их руководстве), и он использовал часть памяти графического процессора. Когда скрипт train.py пытался использовать все 100%, вылетала ошибка.

Я решил это, установив максимальный процент использования на 70% для тренировочного процесса. Это также решило проблему заикания во время тренировок. Возможно, это не оптимальное значение для моего графического процессора, но его можно настроить, например, с помощью параметра config.gpu_options.per_process_gpu_memory_fraction = 0.7.

person Minoru    schedule 29.11.2017
comment
Здравствуйте @Minoru, вы ставите config.gpu_options.per_process_gpu_memory_fraction = 0.7 в train.py после session_config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=False)? Спасибо. - person willSapgreen; 03.04.2018
comment
@willSapgreen Я ничего не заметил в переменной session_config. Просто использовал config.gpu_options.per_process_gpu_memory_fraction = 0.7 сразу после строки config.gpu_options.allow_growth = True. - person Minoru; 04.04.2018