Acest lucru este mai mult de un comentariu, dar merită subliniat.
Motivul, în general, este într-adevăr ceea ce talonmies comentat, dar sunt însumarea numere incorect. Să vedem ce se întâmplă atunci când tensorii sunt mutate de la GPU (am incercat acest lucru pe PC-ul meu cu RTX2060 cu 5.8 G utilizabil memorie GPU în total):
Hai să executați următoarele comenzi python în mod interactiv:
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()
Următoarele sunt ieșiri de watch -n.1 nvidia-smi
:
Imediat după torch
import:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
Imediat după crearea a
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 1251MiB |
După cum puteți vedea, aveți nevoie de 1251MB
pentru a obține pytorch pentru a începe folosind CUDA, chiar dacă aveți nevoie doar de un singur flotor.
Imediat după crearea b
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 3159MiB |
b
are nevoie de 500000000*4 bytes = 1907MB
, aceasta este la fel ca la creștere în memoria utilizată de python proces.
Imediat după crearea c
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 5067MiB |
Nici o surpriza aici.
Imediat după crearea d
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 5067MiB |
Nu mai departe de alocare de memorie, și OOM eroare este aruncat:
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)
Evident:
- "Deja alocate" parte este inclusă în "rezervate în total de PyTorch" parte. Nu te poti rezuma-le, în caz contrar suma depășește total memorie disponibilă.
- Minimul de memorie necesar pentru a obține pytorch rulează pe GPU (
1251M
) nu este inclus în "rezervate în total" parte.
Deci, în cazul dumneavoastră, suma ar trebui să constea din:
- 792MB (rezervate în total)
- 1251MB (minim pentru a obține pytorch rulează pe GPU, presupunând că acest lucru este același pentru amândoi)
- 5.13 GB (gratuit)
- 168+363+161=692MB (alte procese)
Acestea se ridică la suma de aproximativ 7988MB=7.80 GB, care este exact totală GPU-ului de memorie.