compartida - ¿Cómo puedo resolver ''se quedó sin memoria gpu'' en TensorFlow?
memoria compartida del sistema (3)
Ejecuté la demostración MNIST en TensorFlow con 2 capas conv y una capa de conexión completa, recibí un mensaje que "se me acabó la memoria al intentar asignar 2.59GiB '', pero muestra que la memoria total es 4.69GiB y la memoria libre es 3.22 GiB, ¿cómo puede detenerse con 2.59GiB? Y con una red más grande, ¿cómo puedo administrar la memoria gpu? Solo me preocupa cómo hacer un mejor uso de la memoria gpu y quiero saber cómo sucedió, no cómo pre-asignar memoria
De forma predeterminada, TensorFlow asigna casi toda la memoria de GPU de todas las GPU (sujetas a CUDA_VISIBLE_DEVICES) visibles para el proceso. Esto se hace para utilizar de manera más eficiente los recursos de memoria GPU relativamente valiosos en los dispositivos al reducir la fragmentación de la memoria.
TensorFlow proporciona dos opciones de configuración en la sesión para controlar esto.
La primera es la opción allow_growth, que intenta asignar solo la cantidad de memoria de GPU basada en asignaciones de tiempo de ejecución:
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config)
El segundo método es la opción per_process_gpu_memory_fraction, que determina la fracción de la cantidad total de memoria que se debe asignar a cada GPU visible. Por ejemplo, puede decirle a TensorFlow que solo asigne el 40% de la memoria total de cada GPU de la siguiente manera:
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
session = tf.Session(config=config)
Me encontré con errores de memoria al entrenar una CNN pequeña en una GTX 970. A través de una casualidad, descubrí que decirle a TensorFlow que asignara memoria en la GPU según fuera necesario (en lugar de hacerlo por adelantado) resolví todos mis problemas. Esto se puede lograr usando el siguiente código de Python:
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
Anteriormente, TensorFlow asignaba previamente ~ 90% de la memoria de la GPU. Por alguna razón desconocida, esto más tarde resultaría en errores de falta de memoria, aunque el modelo podría caber completamente en la memoria de la GPU. Al utilizar el código anterior, ya no tengo errores de OOM.
Nota: Si el modelo es demasiado grande para caber en la memoria de la GPU, ¡probablemente esto no ayude!
No se trata de eso. En primer lugar, puede ver cuánta memoria recibe cuando se ejecuta al monitorear su gpu. por ejemplo, si tiene un nvidia gpu u puede verificarlo con el comando watch -n 1 nvidia-smi
. Pero en la mayoría de los casos, si no configuró la fracción máxima de la memoria gpu, asigna casi toda la memoria libre. su problema es la falta de memoria suficiente para su gpu. Las redes cnn son totalmente pesadas. Cuando intente alimentar su red, NO lo haga con todos sus datos. HAGA este procedimiento de alimentación en tamaños de lotes bajos.