CUDA OOM-但数字不等一级?

0

的问题

我想火车模型的使用PyTorch. 开始的时候模型的培训,我得到的以下错误信息:

RuntimeError: CUDA out of memory. Tried to allocate 5.37 GiB (GPU 0; 7.79 GiB total capacity; 742.54 MiB already allocated; 5.13 GiB free; 792.00 MiB reserved in total by PyTorch)

我想知道为什么这一错误发生。 从我看来,我有7.79GiB总容量。 数字很说明(742MiB+5.13GiB+792库)不增加要大于7.79GiB. 当我检查 nvidia-smi 我看见这些过程在运行

|    0   N/A  N/A      1047      G   /usr/lib/xorg/Xorg                168MiB |
|    0   N/A  N/A      5521      G   /usr/lib/xorg/Xorg                363MiB |
|    0   N/A  N/A      5637      G   /usr/bin/gnome-shell              161MiB |

我认识到,总结所有这些数字可能会削减它靠近(168 + 363 + 161 + 742 + 792 + 5130 = 7356 库),但这仍然低于规定的能力,我GPU。

1

最好的答案

3

这是更多的评论,但值得指出的。

原因在一般的确实是什么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存储器。

2021-11-23 06:13:39

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................