deep-learning - 使 CUDA 内存不足

标签 deep-learning gpu pytorch nvidia

我试图训练一个网络,但我明白了,
我将批量大小设置为 300 并收到此错误,但即使我将其减少到 100,我仍然会收到此错误,更令人沮丧的是,在 ~1200 张图像上运行 10 个 epoch 需要大约 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。如果这解决了问题,您可以尝试找到最佳批量大小。

如果即使对于 bs=1你得到“运行时错误:cuda 运行时错误(2):内存不足”:

  • 不要使用太大的线性层。
    线性层 nn.Linear(m, n) 使用 O(nm)O(nm)O(nm) 内存:也就是说,权重的内存要求与考虑梯度的特征数量成二次方比例。
  • 不要在整个训练循环中积累历史。
    如果您在循环中递归地总结损失 10000 或更多,您的反向传播评估将是巨大的;占用大量内存。
  • 使用 del 删除不需要的张量明确 .
  • 运行 ps -elf | grep python和 GPU 上的 Python 进程 kill -9 [pid] 如果您怀疑其他 Python 进程正在占用您的内存。
  • 关于deep-learning - 使 CUDA 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48473573/

    相关文章:

    matlab - 矢量化代码的 GPU 优化

    python - Torch 在 PyTorch 上分配零 GPU 内存

    pytorch - 如何在 PyTorch 中向张量添加一些高斯噪声?

    machine-learning - Word2Vec 和 Glove 向量适合实体识别吗?

    machine-learning - 如何解决问题 "Testing accuracy reduce during iterations"?

    python - 损失 : NaN in Keras while performing regression

    python - 大矩阵上的余弦相似度

    machine-learning - 预测 Bash 命令的深度学习算法

    parallel-processing - 为什么相同的 OpenCL 代码在 Intel Xeon CPU 和 NVIDIA GTX 1080 Ti GPU 上有不同的输出?

    c++ - 我可以在进入 gpu 之前从视频游戏中记录图形数据吗?