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 = 1907MB
je 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äť.