To raczej komentarz, ale na niego warto zwrócić uwagę.
Powód w całości naprawdę w tym, że wypowiadał się Тэлонмис, ale źle zsumujesz cyfry. Zobaczmy, co się dzieje, gdy тензоры są przenoszone na procesor graficzny (próbowałem to na KOMPUTERZE z RTX2060 głównych używanej pamięci karty graficznej 5,8 G):
Przyjrzyjmy się następujące polecenia pythona w trybie interaktywnym:
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()
Poniżej znajdują się wyniki watch -n.1 nvidia-smi
:
Raz po torch
import:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
Natychmiast po utworzeniu a
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 1251MiB |
Jak widać, trzeba 1251MB
aby pytorch zacząć korzystać z CUDA, nawet jeśli potrzebny jest tylko jeden pływak.
Natychmiast po utworzeniu b
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 3159MiB |
b
potrzeby 500000000*4 bytes = 1907MB
to to samo, co i zwiększenie ilości pamięci używanej przez proces python.
Natychmiast po utworzeniu c
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 5067MiB |
Tu nie ma nic dziwnego.
Natychmiast po utworzeniu d
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 5067MiB |
Dalsza alokacja pamięci nie jest wymagane, i występuje błąd OOM:
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)
Oczywiście:
- Część "już przydzielone" jest włączona w część "zarezerwowane w sumie PyTorch". Nie można podsumować je, w przeciwnym razie kwota przekroczy całkowitą dostępną pamięć.
- Minimalna pamięć, niezbędne do uruchomienia pytorch na GPU (
1251M
) nie wchodzi w sekcji "zarezerwowane tylko".
Tak więc w twoim przypadku kwota powinna składać się z:
- 792 MB (jest zarezerwowane)
- 1251 MB (minimum do uruchomienia pytorch na GPU, jeśli założyć, że jest to tak samo dla nas obu)
- 5.13 GB (za darmo)
- 168+363+161=692 MB (inne procesy)
Stanowią one około 7988 MB=7,80 GB, co dokładnie odpowiada całkowitej pamięci procesora graficznego.