Подтвердить что ты не робот

GPU PoolAllocator взрывает память процессора

Я сделал модель с тензорным потоком с относительно распространенными операциями (кроме пары tf.where и обработки индексов), но назовите ее с очень разными различными формами ввода (многие тензоры w90 > в модели).

Все работает отлично на процессоре. Но когда вы используете графический процессор, использование ОЗУ (а не память GPU, центральный процессор) неуклонно увеличивается, чтобы заполнить 256 ГБ машины и убить себя.

Во время процесса я получаю обычные сообщения:

2017-03-17 16:42:22.366601: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:247] PoolAllocator: After 18347 get requests, put_count=18345 evicted_count=1000 eviction_rate=0.0545108 and unsatisfied allocation rate=0.0763068
2017-03-17 16:42:22.366680: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:259] Raising pool_size_limit_ from 4385 to 4823

Что, насколько я понимаю, является распределителем пулов для некоторой памяти DMA для GPU. Проблема в том, что она никогда не удовлетворяет скорости выселения, которую она получает, и никогда не заканчивает выделять больше места для себя.

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

Примечание. Я использую версию TF для nigthly, из-за некоторых исправлений, необходимых для запуска текущей модели. Кроме того, никакие операции не добавляются во время обучения, потому что я назвал tf.get_default_graph().finalize()

EDIT: пытался работать с tcmalloc вместо malloc. Не помогло. Я также использовал профилировщик памяти, и он не говорит, что есть утечка памяти, а использование памяти стабилизируется на 500 Мб для tcmalloc, даже если использование памяти в top намного выше, а программа в конечном итоге запускает OOM. Итак, почему профилировщик tcmalloc не согласен с использованием памяти, которую я вижу в top?

РЕДАКТИРОВАТЬ 2: перекомпилировал TF с измененными параметрами hardcoded, чтобы заставить его работать. См. здесь

4b9b3361