Ошибка памяти (OOM) при тестировании API обнаружения объектов Tensorflow

Я натренировал модель fast_rcnn_nas с моим настраиваемым набором данных (изображения с измененным размером 1280x1080). Мой графический процессор - Nvidia Quadro P5000, и я могу протестировать модель на этом компьютере. Когда я тестирую с GTX 1060, он вылетает и выдает ошибку памяти. Но когда я тестирую предварительно обученный fast_rcnn_nas, он работает нормально.

В чем разница между предварительно обученной и настраиваемой моделью? Есть ли возможность запустить модель с 1060? Или есть какие-то параметры batch_size или аналогичные, которые нужно изменить для тестирования?

Что я сделал: я ограничил свой графический процессор и обнаружил, что мне нужно минимум 8 ГБ графического процессора для тестирования моей модели.

Полная ошибка:

ResourceExhaustedError: обнаружены 2 корневые ошибки. (0) Ресурсы исчерпаны: OOM при выделении тензора с формой [500,4032,17,17] и типом float on / job: localhost / replica: 0 / task: 0 / device: GPU: 0 с помощью распределителя GPU_0_bfc [[{{ node MaxPool2D / MaxPool-0-TransposeNHWCToNCHW-LayoutOptimizer}}]] Подсказка: если вы хотите видеть список выделенных тензоров, когда происходит OOM, добавьте report_tensor_allocations_upon_oom в RunOptions для получения информации о текущем распределении.

[[SecondStagePostprocessor / BatchMultiClassNonMaxSuppression / map / while / MultiClassNonMaxSuppression / Sum / _275]] Подсказка: если вы хотите видеть список выделенных тензоров, когда происходит OOM, добавьте report_tensor_allocations_upon_oom в RunOptions для получения информации о текущем распределении.

(1) Ресурсы исчерпаны: OOM при выделении тензора с формой [500,4032,17,17] и типом float on / job: localhost / replica: 0 / task: 0 / device: GPU: 0 с помощью распределителя GPU_0_bfc [[{{ node MaxPool2D / MaxPool-0-TransposeNHWCToNCHW-LayoutOptimizer}}]] Подсказка: если вы хотите видеть список выделенных тензоров, когда происходит OOM, добавьте report_tensor_allocations_upon_oom в RunOptions для получения информации о текущем распределении.

0 успешных операций. 0 производных ошибок игнорируются.


person Emre Tatbak    schedule 20.03.2020    source источник


Ответы (1)


Для вашего вопроса 1: в чем разница между предварительно обученными и пользовательскими моделями?

Это зависит от того, будете ли вы обучать модель или использовать ее только для вывода.
Следовательно, когда вы используете модель для вывода, она потребуется очень мало памяти по сравнению с обучением модели.
Но когда вы обучаете модель с помощью Tensorflow GPU, для этого требуется больше памяти по сравнению с обучением только ЦП, но с более быстрым временем выполнения, особенно при работе с сложной архитектурой модели (т. е. более быстрым RCNN ) ,.

Это также заметно, когда в модели используются тяжелые для вычислений слои, например сверточные слои, так как ускорение вычислений будет более резким для стоимость дополнительной памяти.

Вопрос 2: Есть ли возможность запустить модель с 1060? Или есть какие-то параметры batch_size или аналогичные, которые нужно изменить для тестирования?

При тестировании или выводе длина_данных обычно произвольная, вы можете проверить это, если input_shape = (None, ##,##) первым параметром является None. Это означает, что модель будет принимать данные любой разной длины lowest data_length = 1.

Это означает, что вы можете использовать batch_size только в том случае, если оно явно определено в форме ввода ie. (None, BATCH_SIZE, ##, ##), или загружать в модель данные с длиной batch_size ie. (BATCH_SIZE, ##, ##).

Один из способов избежать ошибки памяти - изменить batch_size параметр в model.predict и model.train на более низкое значение, это также увеличит ваша модель точность, но будет тренироваться дольше.

Другой способ - преобразовать ваш набор данных в генератор наборов данных, который кэширует ваши данные, а не загружает их непосредственно в вашу память.

Вы можете узнать больше о построении входных конвейеров в Tensorflow по этой ссылке. .

person TF_Support    schedule 08.04.2020
comment
На самом деле у меня есть предсказания по времени и тренировки. Мне нужна как можно более высокая точность, по этой причине я тренировал fast_rcnn_nas. Я вижу, я пытался найти model.predict в файлах обнаружения объектов, чтобы уменьшить batch_size для прогнозирования, но не смог его найти. Это файл или параметр? - person Emre Tatbak; 08.04.2020
comment
Привет, @EmreTatbak, я предлагаю вам открыть новый вопрос с вашим образцом воспроизводимого кода, который позволит нам также устранить проблему. - person TF_Support; 09.04.2020