Как отладить проблемы с нехваткой памяти при активном выполнении на TensorFlow 2? - PullRequest
1 голос
/ 21 июня 2020

Я пытаюсь подогнать модель под TensorFlow 2.2. Написал кастомный тренинг l oop. Однако обучение довольно быстро завершается сбоем, когда у графического процессора заканчивается память. Модель отлично работает с теми же параметрами при использовании API-интерфейса model.fit (), но я хочу использовать индивидуальное обучение l oop, поскольку оно обеспечивает большую гибкость для моих нужд.

Каков общий способ Отладка таких проблем с памятью?

Я искал, но официальные документы TF в основном говорят о том, как отлаживать логические ошибки. На многих страницах рассказывается об отладке, основанной на режиме графика.

Любые советы приветствуются! Заранее спасибо!

ОБНОВЛЕНИЕ 1 Используемый код находится здесь на Colab Входные данные взяты из набора данных UCF-Crime, они были предварительно обработаны в jpeg и хранятся как сегменты в TFRecord. Пример TFRecord из того же здесь , каждый TFRecord содержит 500 сегментов, где каждый сегмент представляет собой 16 последовательных кадров видео в формате jpeg, уменьшенных до 128x128 изображений RGB.

Для воспроизведения проблему, вы можете создать набор данных, поместив путь к файлу TFRecord в mod_build_dataset()

. Код немедленно взломает sh на ЦП в Colab (поскольку максимальный доступный объем ОЗУ составляет ~ 13 ГБ), то же самое для графического процессора .

На Kaggle он будет нормально работать на ЦП (максимальное использование ОЗУ составляет 14,2 ГБ), но будет трещать sh на графическом процессоре (использует все 16 ГБ графической памяти)

Я предполагаю, что это это связано с тем, что ЦП выполняет вычисления медленнее, поэтому G C успевает включиться до того, как исчерпает память, тогда как на GPU этого не происходит.

1 Ответ

1 голос
/ 23 июня 2020

Tensorflow Profiler должно вам помочь.

Profiling поможет вам понять потребление аппаратных ресурсов (time и memory) различных TensorFlow operations (ops) в вашем model и разрешить узкие места производительности и, в конечном итоге, ускоряет выполнение модели .

Tensorflow Profiler значительно упрощает определение bottleneck из training process, поэтому вы можете решить, где необходимо приложить усилия по оптимизации.

Он также дает вам рекомендации относительно возможных следующих шагов, которые вы можете предпринять для оптимизации производительности вашей модели.

Шаги по использованию Tensorflow Profiler для пользовательских циклов обучения показаны ниже :

from tensorflow.python.profiler import profiler_v2 as profiler
profiler.warmup()
profiler.start(logdir='logdir')
# Train the model here
profiler.stop()

См. эту статью о том, как использовать Tensorflow Profiler для Custom Training.

Для получения дополнительной информации о Tensorflow Profiler обратитесь к этот учебник , это руководство и эта документация .

...