To je spíš komentář, ale stojí za zmínku.
Důvod, proč obecně je opravdu to, co talonmies komentoval, ale ty jsou shrneme-li čísla nesprávně. Pojďme se podívat, co se stane, když tenzory jsou přesunuty do GPU (zkoušel jsem to na mém PC s RTX2060 s 5,8 G použitelné GPU paměť celkem):
Pojďme spusťte následující python příkazy interaktivně:
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()
Jsou následující výstupy watch -n.1 nvidia-smi
:
Hned po torch
import:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
Hned po vytvoření a
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 1251MiB |
Jak můžete vidět, budete potřebovat 1251MB
získat pytorch chcete-li začít používat CUDA, i když budete potřebovat pouze jeden vůz.
Hned po vytvoření b
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 3159MiB |
b
potřebuje 500000000*4 bytes = 1907MB
je to stejný jako přírůstek v paměti používá python proces.
Hned po vytvoření c
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 5067MiB |
Žádné překvapení zde.
Hned po vytvoření d
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 5067MiB |
Žádné další přidělení paměti a OOM chyba je vyvolána:
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)
Samozřejmě:
- "Již přidělené" část je zahrnuta v "vyhrazeno celkem PyTorch" část. Nemůžete shrnout, jinak částka vyšší než celková dostupná paměť.
- Minimální paměť zapotřebí, aby si pytorch běží na GPU (
1251M
) není zahrnuta do "vyhrazeno celkem" část.
Takže ve vašem případě, součet by se měl skládat z:
- 792MB (vyhrazeno celkem)
- 1251MB (minimum získat pytorch běží na GPU, za předpokladu, že je to stejné pro nás pro oba)
- 5.13 GB (zdarma)
- 168+363+161=692MB (další procesy)
Součet roven přibližně 7988MB=7.80 GB, což je přesně to jsi celkem GPU paměti.