CUDA OOM - Pero los números no salen upp?

0

Pregunta

Estoy tratando de entrenar a un modelo de uso de la PyTorch. Al comenzar el entrenamiento del modelo me sale el siguiente mensaje de error:

RuntimeError: CUDA out of memory. Tried to allocate 5.37 GiB (GPU 0; 7.79 GiB total capacity; 742.54 MiB already allocated; 5.13 GiB free; 792.00 MiB reserved in total by PyTorch)

Me pregunto por qué se está produciendo este error. De la forma en que lo veo, tengo 7.79 Gb capacidad total. Los números que se está declarando (742 MiB + 5.13 GiB + 792 MiB) no se suman a ser mayor que 7.79 Gb. Cuando me registre nvidia-smi Veo a estos procesos que se ejecutan

|    0   N/A  N/A      1047      G   /usr/lib/xorg/Xorg                168MiB |
|    0   N/A  N/A      5521      G   /usr/lib/xorg/Xorg                363MiB |
|    0   N/A  N/A      5637      G   /usr/bin/gnome-shell              161MiB |

Me doy cuenta de que la suma de todos estos números podrían cortar cerca de (168 + 363 + 161 + 742 + 792 + 5130 = 7356 MiB), pero esto es todavía inferior a la capacidad declarada de mi GPU.

1

Mejor respuesta

3

Esto es más de un comentario, pero vale la pena señalar.

La razón, en general, es de hecho lo que talonmies comentó, pero se suma los números de forma incorrecta. Vamos a ver qué pasa cuando los tensores, se trasladó a la GPU (lo probé en mi PC con RTX2060 con 5.8 G utilizable memoria de la GPU en total):

Vamos a ejecutar los siguientes comandos de python de forma interactiva:

Python 3.8.10 (default, Sep 28 2021, 16:10:42) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> a = torch.zeros(1).cuda()
>>> b = torch.zeros(500000000).cuda()
>>> c = torch.zeros(500000000).cuda()
>>> d = torch.zeros(500000000).cuda()

Los siguientes son los resultados de watch -n.1 nvidia-smi:

Justo después de torch importación:

|    0   N/A  N/A      1121      G   /usr/lib/xorg/Xorg                  4MiB |

Inmediatamente después de la creación de a:

|    0   N/A  N/A      1121      G   /usr/lib/xorg/Xorg                  4MiB |
|    0   N/A  N/A     14701      C   python                           1251MiB |

Como usted puede ver, usted necesita 1251MB para obtener pytorch para empezar a usar CUDA, incluso si usted sólo necesita una boya.

Inmediatamente después de la creación de b:

|    0   N/A  N/A      1121      G   /usr/lib/xorg/Xorg                  4MiB |
|    0   N/A  N/A     14701      C   python                           3159MiB |

b necesidades 500000000*4 bytes = 1907MBeste es el mismo como el incremento de la memoria utilizada por el pitón proceso.

Inmediatamente después de la creación de c:

|    0   N/A  N/A      1121      G   /usr/lib/xorg/Xorg                  4MiB |
|    0   N/A  N/A     14701      C   python                           5067MiB |

No hay ninguna sorpresa aquí.

Inmediatamente después de la creación de d:

|    0   N/A  N/A      1121      G   /usr/lib/xorg/Xorg                  4MiB |
|    0   N/A  N/A     14701      C   python                           5067MiB |

No más allá de la asignación de memoria, y el OOM se genera un error:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: CUDA out of memory. Tried to allocate 1.86 GiB (GPU 0; 5.80 GiB total capacity; 3.73 GiB already allocated; 858.81 MiB free; 3.73 GiB reserved in total by PyTorch)

Obviamente:

  • El "ya asignados a" la parte incluida en el "reservado en total por PyTorch" parte. Usted no puede sumarlos, de lo contrario la suma supera el total de memoria disponible.
  • La memoria mínima necesaria para obtener pytorch que se ejecutan en la GPU (1251Mno está incluido en el "reservado" de la parte.

Así que, en su caso, la suma debe constar de:

  • 792MB (reservado)
  • 1251MB (mínimo para obtener pytorch que se ejecutan en la GPU, asumiendo que este es el mismo para los dos)
  • 5.13 GB (gratis)
  • 168+363+161=692MB (otros procesos)

Que la suma de hasta aproximadamente 7988MB=7.80 GB, que es exactamente lo que el total de memoria de la GPU.

2021-11-23 06:13:39

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................