Trabajo en un entorno en el que se comparten recursos computacionales, es decir, tenemos algunas máquinas de servidor equipadas con algunas GPU Nvidia Titan X cada una.
Para modelos de tamaño pequeño a moderado, los 12 GB del Titan X suelen ser suficientes para que 2–3 personas realicen un entrenamiento al mismo tiempo en la misma GPU. Si los modelos son lo suficientemente pequeños como para que un solo modelo no aproveche al máximo todas las unidades computacionales de la GPU, esto puede resultar en una aceleración en comparación con la ejecución de un proceso de entrenamiento después del otro. Incluso en los casos en que el acceso concurrente a la GPU ralentiza el tiempo de entrenamiento individual, es bueno tener la flexibilidad de tener múltiples usuarios entrenándose simultáneamente en la GPU.
El problema con TensorFlow es que, de forma predeterminada, asigna la cantidad total de memoria de GPU disponible cuando se inicia. Incluso para una pequeña red neuronal de dos capas, veo que los 12 GB de memoria de la GPU están agotados.
¿Hay alguna manera de hacer que TensorFlow solo asigne, por ejemplo, 4 GB de memoria de GPU, si se sabe que esto es suficiente para un modelo dado?
fuente
MonitoredTrainingSession
https://github.com/tensorflow/tensorflow/issues/1578
fuente
from keras import backend as K
yK.set_session(sess)
a las limitaciones de memoria EvitaAquí hay un extracto del libro.
Deep Learning with TensorFlow
1) Permitir crecimiento: (más flexible)
El segundo método es la
per_process_gpu_memory_fraction
opción, que determina la fracción de la cantidad total de memoria que seeach
debe asignar a la GPU visible. Nota: No se necesita liberar memoria, incluso puede empeorar la fragmentación de la memoria cuando se hace.2) Asignar memoria fija :
Para asignar solo
40%
la memoria total de cada GPU por:Nota: Eso solo es útil si realmente desea vincular la cantidad de memoria de GPU disponible en el proceso TensorFlow.
fuente
Actualizado para TensorFlow 2.0 Alpha y más allá
De los documentos 2.0 Alpha, la respuesta ahora es solo una línea antes de hacer algo con TensorFlow:
fuente
Todas las respuestas anteriores suponen la ejecución con una
sess.run()
llamada, que se está convirtiendo en la excepción en lugar de la regla en las versiones recientes de TensorFlow.Al usar el
tf.Estimator
marco (TensorFlow 1.4 y superior), la forma de pasar la fracción a lo creado implícitamenteMonitoredTrainingSession
es,Del mismo modo, en el modo Eager (TensorFlow 1.5 y superior),
Editar: 11-04-2018 Como ejemplo, si va a usar
tf.contrib.gan.train
, puede usar algo similar a lo siguiente:fuente
Para Tensorflow versión 2.0 y 2.1, use el siguiente fragmento :
Para versiones anteriores , el siguiente fragmento solía funcionar para mí:
fuente
Tensorflow 2.0 Beta y (probablemente) más allá
La API cambió de nuevo. Ahora se puede encontrar en:
Alias
Referencias
Consulte también: Tensorflow: use una GPU : https://www.tensorflow.org/guide/gpu
para Tensorflow 2.0 Alpha ver: esta respuesta
fuente
Puedes usar
en sus variables de entorno
En el código de tensorflow :
fuente
Enchufe desvergonzado: si instala el Tensorflow compatible con GPU, la sesión primero asignará todas las GPU, ya sea que configure que use solo CPU o GPU. Puedo agregar mi consejo de que incluso si configura el gráfico para usar CPU solo debe establecer la misma configuración (como se respondió anteriormente :)) para evitar la ocupación de GPU no deseada.
Y en una interfaz interactiva como IPython, también debe configurar esa configuración, de lo contrario, asignará toda la memoria y dejará casi ninguna para los demás. Esto a veces es difícil de notar.
fuente
Para Tensorflow 2.0, esta solución funcionó para mí. (TF-GPU 2.0, Windows 10, GeForce RTX 2070)
fuente
Si está utilizando Tensorflow 2 intente lo siguiente:
fuente
Traté de entrenar unet en el conjunto de datos voc pero debido al gran tamaño de la imagen, la memoria termina. Probé todos los consejos anteriores, incluso probé con el tamaño del lote == 1, pero no obtuve ninguna mejora. a veces la versión TensorFlow también causa problemas de memoria intente usando
fuente
Bueno, soy nuevo en tensorflow, tengo Geforce 740m o algo GPU con 2GB de RAM, estaba ejecutando un ejemplo escrito a mano mnist para un idioma nativo con datos de entrenamiento que contienen 38700 imágenes y 4300 imágenes de prueba y estaba tratando de obtener precisión, recordar, F1 usando el siguiente código como sklearn no me estaba dando resultados precisos. Una vez que agregué esto a mi código existente, comencé a recibir errores de GPU.
Además, supongo que mi modelo era pesado, estaba recibiendo un error de memoria después de 147, 148 épocas, y luego pensé por qué no crear funciones para las tareas, así que no sé si funciona de esta manera en el flujo de tensión, pero pensé si una variable local es utilizado y cuando está fuera del alcance puede liberar memoria y definí los elementos anteriores para la capacitación y las pruebas en los módulos, pude lograr 10000 épocas sin ningún problema, espero que esto ayude.
fuente
fuente