Как рассчитать использование памяти процессором fit_generator в Keras? - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь обучить сеть с использованием Keras, и у меня проблема с fit_generator и чрезмерным использованием памяти.

В настоящее время у меня 128 ГБ ОЗУ, и мой набор данных занимает 20 ГБ (сжато). Я загружаю сжатый набор данных в ОЗУ, а затем использую генератор Sequence, чтобы распаковать пакеты данных для подачи в сеть. Каждый из моих образцов имеет размер 100x100x100 пикселей и хранится как float32, я использую batch_size из 64, queue_size из 5 и 27 рабочих с multiprocessing=True. По идее у меня должно быть всего 100 * 100 * 100 * 4 * 64 * 5 * 27 = ~ 35 ГБ. Однако, когда я запускаю свой сценарий, он отключается системой очередей из-за чрезмерного использования памяти:

slurmstepd: error: Job XXXX exceeded memory limit (1192359452 > 131072000), being killed

Я даже пытался использовать max_queue_size всего за 2, и процесс все еще превышает максимальный объем памяти. Чтобы сделать вещи еще более трудными для понимания, иногда , совершенно случайно, процесс выполняется должным образом (даже с max_queue_size из 30!).

Я проверяю перед запуском моего скрипта, что память фактически свободна, используя free -m, и все выглядит нормально. Я также попытался профилировать свой скрипт с memory-profiler, хотя результаты довольно странные: enter image description here

Похоже, мой сценарий производит 54 (?) Разных детей и использует 1200 ГБ (!) Оперативной памяти. Это явно не имеет никакого смысла ...

Я неправильно вычисляю использование памяти fit_generator? Из того, что я понимаю из документации, похоже, что данные должны быть разделены между рабочими, поэтому большая часть памяти должна использоваться пакетами в очереди. Я что-то пропустил?

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