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

时间:2021-04-24 07:12:48

标签: 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。

+-----------------------------------------------------------------------------+
| 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                                                 |
+-----------------------------------------------------------------------------+

我尝试了以下 3 种方法:

  1. 使用 torch.no_grad();
  2. torch.cuda.empty_cache();
  3. 减少batch_size;

所有这些都不起作用。

1 个答案:

答案 0 :(得分:0)

我假设您已经在错误“CUDA 内存不足”后检查了 GPU 分配。和 torch.no_grad() 与 cuda 内存没有任何关系。这取决于您定义和解决的问题。

尝试使用 watch -n1 nvidia-smi 监控 cuda 内存,如果您可以发布数据加载器和训练循环的代码。因此,我们可以为您提供帮助。但总的来说,减少批量大小和分离不必要的张量应该会改善这一点。