这是更多的评论,但值得指出的。
原因在一般的确实是什么talonmies评论,但是总的数字不正确。 让我们看看会发生什么当张量都转移到GPU(我想这个我的电脑上RTX2060与5.8G可使用的GPU内存在的总数):
让我们运行以下蟒蛇命令以交互方式:
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()
下面的产出 watch -n.1 nvidia-smi
:
右后 torch
进口:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
之后创作的 a
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 1251MiB |
正如你可以看到,你需要 1251MB
获得pytorch开始使用CUDA,甚至如果你仅仅需要一个单浮动。
之后创作的 b
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 3159MiB |
b
需要 500000000*4 bytes = 1907MB
这是相同的增量存储器使用的蟒蛇的过程。
之后创作的 c
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 5067MiB |
毫不奇怪这里。
之后创作的 d
:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 5067MiB |
没有进一步的存分配,并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)
很显然:
- "已经分配的"的一部分包含在"保留在总PyTorch"的一部分。 你不能总和起来,否则的总和超过总可用的存储器。
- 最少存储需要得到pytorch上运行GPU(
1251M
)是不包含在"保留在总"的一部分。
所以你的情况,总结应包括:
- 792MB(保留在总)
- 1251MB(最低,获得pytorch上运行GPU,假定这是一样的对我们两个都)
- 5.13GB(免费)
- 168+363+161=692MB(其他进程)
他们总结了大约7988MB=7.80GB,这正是你总GPU存储器。