将CUDA内存释放

5

我正在尝试训练神经网络,但是我得到了这个错误信息:即使我将批次大小减小到100,仍然会出现这个错误。更加令人沮丧的是,对于大约1200张图片进行10轮迭代,需要40分钟左右的时间。您有什么建议吗?如何加速这个过程!任何提示都将非常有帮助,谢谢。

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-31-3b43ff4eea72> in <module>()
      5         labels = Variable(labels).cuda()
      6 
----> 7         optimizer.zero_grad()
      8         outputs = cnn(images)
      9         loss = criterion(outputs, labels)

/usr/local/lib/python3.5/dist-packages/torch/optim/optimizer.py in     zero_grad(self)
    114                 if p.grad is not None:
    115                     if p.grad.volatile:
--> 116                         p.grad.data.zero_()
    117                     else:
    118                         data = p.grad.data

RuntimeError: cuda runtime error (2) : out of memory at /pytorch  /torch/lib/THC/generic/THCTensorMath.cu:35`

即使我的GPU是免费的
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111                Driver Version: 384.111                       |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:05:00.0 Off |                   N/A |
| 23%   18C    P8    15W / 250W |  10864MiB / 11172MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+

|   1  GeForce GTX 108...  Off  | 00000000:08:00.0 Off |                  N/A |    
 | 23%   20C    P8    15W / 250W |     10MiB / 11172MiB |          0%      Default
+-------------------------------+----------------------+---------------

1
由于您没有提供代码,人们只能猜测出错的原因。何不尝试提供一个MCVE呢? - jdhao
由于我不知道你的代码,所以我唯一能给你的建议就是尝试减少批量大小。 - Rishabh Agrahari
1个回答

3

一般的问题。我会这样考虑这个问题:

尝试将批量大小(批数)设置为1。如果这样可以解决问题,您可以尝试找到最佳批量大小。

即使对于bs=1,您仍然遇到“RuntimeError:cuda runtime error (2) : out of memory”的错误:

  • 不要使用太大的线性层。 线性层nn.Linear(m, n)使用O(nm)O(nm)O(nm)内存:也就是说,权重的内存需求随着特征数量的增加呈二次比例增长,同时也要考虑梯度。

  • 不要在训练循环中累积历史记录。 如果你在一个循环中递归地累加损失10000次或更多次,那么你的反向传播评估会非常巨大;需要大量的内存。

  • 显式删除不需要的张量使用 del

  • 运行ps -elf | grep python和在GPU上的python进程kill -9 [pid]如果你怀疑其他Python进程正在消耗你的内存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接