CUDA OOM - Ale čísla nepridávať upp?

0

Otázka

Snažím sa trénovať modelu pomocou PyTorch. Keď začiatku model príprave som sa dostať nasledujúce chybové hlásenie:

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)

Ja som premýšľal, prečo táto chyba sa vyskytuje. Z toho, ako to vidím ja, som 7.79 GiB celkovej kapacity. Čísla je udania (742 MiB + 5.13 GiB + 792 MiB) nesčítajú byť väčšia ako 7.79 GiB. Keď som kontrola nvidia-smi Vidím tieto procesy spustené

|    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 |

Uvedomujem si, že sčítanie všetky tieto čísla by mohli znížiť v blízkosti (168 + 363 + 161 + 742 + 792 + 5130 = 7356 MiB), ale je to stále menej, než sa uvádza môjho GPU.

1

Najlepšiu odpoveď

3

To je viac, komentár, ale stojí za to zdôrazniť.

Dôvod, prečo vo všeobecnosti je naozaj to, čo talonmies komentoval, ale ste sčítaním čísla nesprávne. Pozrime sa, čo sa stane, keď ansi sú presunuté na GPU (snažil som sa to na mojom PC s RTX2060 s 5.8 G použiteľné GPU pamäť celkom):

Poďme sa spustite nasledujúci python príkazy interaktívne:

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()

Tieto sú výstupov watch -n.1 nvidia-smi:

Hneď po torch import:

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

Hneď po tvorba a:

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

Ako môžete vidieť, musíte 1251MB ak chcete získať pytorch ak chcete začať používať CUDA, dokonca aj vtedy, ak potrebujete iba jeden plávať.

Hneď po tvorba b:

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

b potreby 500000000*4 bytes = 1907MBje to rovnaké ako prírastok v pamäti používa python procesu.

Hneď po tvorba c:

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

Žiadne prekvapenie tu.

Hneď po tvorba d:

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

Žiadne ďalšie alokácia pamäte, a OOM chyba je hodená:

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)

Samozrejme:

  • "Už pridelené" časť je zahrnuté v "vyhradené celkom od PyTorch" časť. Nemôžete súčet ich hore, inak súčet prekročí dostupnú pamäť.
  • Minimálna pamäť, musí dostať pytorch beh na GPU (1251M) nie je zahrnuté v "vyhradené celkom" časť.

Takže vo vašom prípade, suma by sa mal skladať z:

  • 792MB (vyhradené celkovo)
  • 1251MB (minimálne dostať pytorch beh na GPU, za predpokladu, že toto je rovnaké pre oboch z nás)
  • 5.13 GB (zdarma)
  • 168+363+161=692MB (iné procesy)

Ich súčet približne 7988MB=7.80 GB, čo je presne to si celkom GPU pamäť.

2021-11-23 06:13:39

V iných jazykoch

Táto stránka je v iných jazykoch

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