Ошибка памяти (OOM) при тестировании API обнаружения объектов Tensorflow - PullRequest
1 голос
/ 20 марта 2020

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

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

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

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

ResourceExhaustedError: 2 root найдено ошибок. (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 для информации о текущем распределении.

[SecondStagePostMaxProcessSupSecutor/SecormSupSecressProcessSupServer_ProcessSupSecutor/ / 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_alloca tions_upon_oom для RunOptions для информации о текущем распределении.

0 успешных операций. 0 полученных ошибок игнорируется.

1 Ответ

1 голос
/ 08 апреля 2020

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

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

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

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

При тестировании или выводе data_length обычно произвольно , вы можете проверить это, когда 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 по этой ссылке .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...