GPU PoolAllocator explota la memoria de la CPU

Hice un modelo de tensorflow con operaciones relativamente comunes (aparte de un par detf.where y manejo de índices), pero llámelo con formas de entrada muy diferentes (muchas formas de tensor indefinidas en el modelo).

Todo funciona bien en la CPU.Pero cuando usas la GPU, el uso de RAM (no la memoria de la GPU, la CPU) aumenta constantemente hasta llenar los 256 GB de la máquina y se suicida.

Durante el proceso, recibo los mensajes habituales:

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

Que, por lo que yo entiendo, es el asignador de grupo para alguna memoria DMA para la GPU. El problema es que parece nunca estar satisfecho con la tasa de desalojo que obtiene y nunca termina de asignar más espacio para sí mismo.

¿Es este comportamiento normal? ¿Son formas de controlar esto? Ahora mismo,No puedo entrenar a un modelo por más de 1 hora antes de que se quede sin memoria.

Nota: Uso la versión de compilación nocturna de TF, debido a algunas correcciones de errores necesarias para que se ejecute mi modelo actual. Además, no se agregan operaciones durante el entrenamiento porque llamétf.get_default_graph().finalize()

EDITAR: trató de correr contcmalloc en lugar demalloc. No ayudó. También utilicé el generador de perfiles de memoria y no dice que haya una pérdida de memoria, el uso de la memoria se estabiliza a 500 MB para tcmalloc, incluso si el uso de la memoria entop es mucho más alto y el programa finalmente ejecuta OOM. Entonces, ¿por qué es eltcmalloc Profiler no está de acuerdo con el uso de memoria que veo entop?

EDITAR 2: TF compilado con parámetros modificados codificados para que "funcione". Veraquí

Respuestas a la pregunta(1)

Su respuesta a la pregunta