pytorch:运行时错误:CUDA内存不足。有足够的GPU内存

pytorch:运行时错误:CUDA内存不足。有足够的GPU内存,pytorch,Pytorch,火炬错误: RuntimeError: CUDA out of memory. Tried to allocate 392.00 MiB (GPU 0; 10.73 GiB total capacity; 9.47 GiB already allocated; 347.56 MiB free; 9.51 GiB reserved in total by PyTorch) 我通过nvidia smi检查了GPU资源,显示没有其他正在运行的进程和内存使用情况:10/10989MiB +------

火炬错误:

RuntimeError: CUDA out of memory. Tried to allocate 392.00 MiB (GPU 0; 10.73 GiB total capacity; 9.47 GiB already allocated; 347.56 MiB free; 9.51 GiB reserved in total by PyTorch)
我通过nvidia smi检查了GPU资源,显示没有其他正在运行的进程和内存使用情况:10/10989MiB

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.56       Driver Version: 418.56       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| 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 RTX 208...  On   | 00000000:04:00.0 Off |                  N/A |
| 22%   30C    P8    10W / 230W |     10MiB / 10989MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
我尝试了以下三种方法:

  • 用手电筒。无梯度()
  • torch.cuda.empty_cache()
  • 减少批量
    所有这些都不起作用。

    我假设您已经检查了GPU分配,并发布了错误“CUDA内存不足”。还有torch.不,grad()与cuda内存无关。这取决于你定义和解决的问题


    尝试使用
    watch-n1 nvidia smi
    监视cuda内存,如果您可以发布数据加载程序的代码和您的训练循环。所以,我们可以帮助你。但总体而言,减少批处理大小和分离不必要的张量可以改善这一点。

    显然,您的代码占用的内存比可用内存多。在另一个终端窗口中使用
    观看nvidia smi
    ,如下面的回答所示,可以确认这一点。至于什么会消耗内存,您需要查看代码。如果将批处理大小减小到非常小的值没有帮助,则可能是内存泄漏,如果需要更具体的帮助,则需要显示代码。我将代码添加到:中,这是一个重复项目。我从未遇到过这样的内存泄漏问题。非常感谢你的帮助!