¿Por qué obtengo CUDA sin memoria cuando ejecuto el modelo PyTorch [con suficiente memoria GPU]?

Aug 17 2020

Hago esta pregunta porque estoy entrenando con éxito una red de segmentación en mi GTX 2070 en una computadora portátil con 8GB VRAM y uso exactamente el mismo código y exactamente las mismas bibliotecas de software instaladas en mi PC de escritorio con una GTX 1080TI y todavía se pierde memoria.

¿Por qué sucede esto, considerando que:

  1. Los mismos Windows 10 + CUDA 10.1 + CUDNN 7.6.5.32 + Nvidia Driver 418.96 (viene junto con CUDA 10.1) están tanto en la computadora portátil como en la PC.

  2. El hecho de que el entrenamiento con TensorFlow 2.3 se ejecuta sin problemas en la GPU de mi PC, pero falla al asignar memoria para el entrenamiento solo con PyTorch.

  3. PyTorch reconoce la GPU (imprime GTX 1080 TI) a través del comando: print(torch.cuda.get_device_name(0))

  4. PyTorch asigna memoria al ejecutar este comando: torch.rand(20000, 20000).cuda() #allocated 1.5GB of VRAM.

¿Cuál es la solución a esto?

Respuestas

5 TimbusCalin Aug 17 2020 at 17:27

La mayoría de las personas (incluso en el hilo de abajo) saltan para sugerir que disminuir el tamaño de lote resolverá este problema. De hecho, no es así en este caso. Por ejemplo, habría sido ilógico que una red se entrenara con 8GB VRAM y aún no se entrenara con 11GB VRAM, considerando que no había otras aplicaciones consumiendo memoria de video en el sistema con 11GB VRAM y se instaló exactamente la misma configuración y usado.

La razón por la que esto sucedió en mi caso fue que, al usar el DataLoaderobjeto, establecí un valor muy alto (12) para el workersparámetro. Disminuir este valor a 4 en mi caso resolvió el problema.

De hecho, aunque al final del hilo, la respuesta proporcionada por Yurasyk en https://github.com/pytorch/pytorch/issues/16417#issuecomment-599137646 me señaló en la dirección correcta.

Solución: Disminuya el número de workersen PyTorch DataLoader. Aunque no entiendo exactamente por qué funciona esta solución, supongo que está relacionada con los hilos generados detrás de escena para la búsqueda de datos; puede darse el caso de que, en algunos procesadores, aparezca dicho error.