pytorch使用过程中遇到的错误处理之内存溢出问题

 更新时间:2023年09月08日 09:04:59   作者:great-wind  
这篇文章主要介绍了pytorch使用过程中遇到的错误处理之内存溢出问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

内存溢出

在使用 pytorch 训练的模型进行推理操作时,

出现以下错误:

RuntimeError: CUDA out of memory. Tried to allocate 416.00 MiB (GPU 0; 2.00 GiB total capacity; 1.32 GiB already allocated; 0 bytes free; 1.34 GiB reserved in total by PyTorch)

从上述报错信息中可以看出, GPU0 共有 2GiB 容量,已经分配出去 1.32 GiB 0 bytes 可用,PyTorch占用 1.34 GiB

使用下述命令查看GPU的使用情况:

> nvidia-smi
Wed Jul 13 15:20:18 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 512.95       Driver Version: 512.95       CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ... WDDM  | 00000000:01:00.0 Off |                  N/A |
| N/A   39C    P0    N/A /  N/A |      0MiB /  2048MiB |      2%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

发现并没有进程占用GPU资源。

然后使用 torch 包内的命令查看内存占用情况,

结果如下:

> print(torch.cuda.memory.memory_summary())
|===========================================================================|
|                  PyTorch CUDA memory summary, device ID 0                 |
|---------------------------------------------------------------------------|
|            CUDA OOMs: 0            |        cudaMalloc retries: 0         |
|===========================================================================|
|        Metric         | Cur Usage  | Peak Usage | Tot Alloc  | Tot Freed  |
|---------------------------------------------------------------------------|
| Allocated memory      |       0 B  |       0 B  |       0 B  |       0 B  |
|       from large pool |       0 B  |       0 B  |       0 B  |       0 B  |
|       from small pool |       0 B  |       0 B  |       0 B  |       0 B  |
|---------------------------------------------------------------------------|
| Active memory         |       0 B  |       0 B  |       0 B  |       0 B  |
|       from large pool |       0 B  |       0 B  |       0 B  |       0 B  |
|       from small pool |       0 B  |       0 B  |       0 B  |       0 B  |
|---------------------------------------------------------------------------|
| GPU reserved memory   |       0 B  |       0 B  |       0 B  |       0 B  |
|       from large pool |       0 B  |       0 B  |       0 B  |       0 B  |
|       from small pool |       0 B  |       0 B  |       0 B  |       0 B  |
|---------------------------------------------------------------------------|
| Non-releasable memory |       0 B  |       0 B  |       0 B  |       0 B  |
|       from large pool |       0 B  |       0 B  |       0 B  |       0 B  |
|       from small pool |       0 B  |       0 B  |       0 B  |       0 B  |
|---------------------------------------------------------------------------|
| Allocations           |       0    |       0    |       0    |       0    |
|       from large pool |       0    |       0    |       0    |       0    |
|       from small pool |       0    |       0    |       0    |       0    |
|---------------------------------------------------------------------------|
| Active allocs         |       0    |       0    |       0    |       0    |
|       from large pool |       0    |       0    |       0    |       0    |
|       from small pool |       0    |       0    |       0    |       0    |
|---------------------------------------------------------------------------|
| GPU reserved segments |       0    |       0    |       0    |       0    |
|       from large pool |       0    |       0    |       0    |       0    |
|       from small pool |       0    |       0    |       0    |       0    |
|---------------------------------------------------------------------------|
| Non-releasable allocs |       0    |       0    |       0    |       0    |
|       from large pool |       0    |       0    |       0    |       0    |
|       from small pool |       0    |       0    |       0    |       0    |
|===========================================================================|

从结果中看到,没有内存被占用。

再次运行代码依旧报错,难道是代码自身所需的内存过大而导致失败?

但是我们的代码只是推理代码,不应该占用这么高的内存,经过查询,发现在推理模型时,应该在主代码部分添加torch.no_grad()以防止推理过程中对梯度进行追踪。

追踪梯度时会占用大量的内存。

解决办法

如下:

with torch.no_grad():
    outputs = model(samples) #主代码

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python中的subprocess.Popen()使用详解

    python中的subprocess.Popen()使用详解

    今天小编就为大家分享一篇python中的subprocess.Popen()使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 详解Python如何制作自动发送微信的程序

    详解Python如何制作自动发送微信的程序

    这篇文章主要介绍了如何利用Python中的apscheduler和pyautogui模块,制作一个自动发送微信的程序。感兴趣的小伙伴可以跟随小编一起动手试一试
    2022-01-01
  • OpenCV+face++实现实时人脸识别解锁功能

    OpenCV+face++实现实时人脸识别解锁功能

    这篇文章主要为大家详细介绍了OpenCV+face++实现实时人脸识别解锁功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • python列表与列表算法详解(2)

    python列表与列表算法详解(2)

    这篇文章主要介绍了Python的列表和列表算法,小编感觉这篇文章具有一定参考价值,需要的朋友可以了解下,希望能给你带来帮助
    2021-08-08
  • python实现学生管理系统开发

    python实现学生管理系统开发

    这篇文章主要为大家详细介绍了python实现学生管理系统开发,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例

    python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例

    今天小编就为大家分享一篇python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 利用Python改正excel表格数据

    利用Python改正excel表格数据

    这篇文章主要介绍了利用Python改正excel表格数据,运用面向过程写的,将每一步都放在了不同的函数中,下文详细过程介绍需要的小伙伴可以参考一下
    2022-06-06
  • Django 设置多环境配置文件载入问题

    Django 设置多环境配置文件载入问题

    这篇文章主要介绍了Django 设置多环境配置文件载入问题,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 利用python实现命令行有道词典的方法示例

    利用python实现命令行有道词典的方法示例

    平常都是用终端敲, 有时候不会的词语也懒得打开词典了,干脆搞了个简单的查词命令。下面这篇文章主要给大家介绍了利用python实现命令行有道词典的方法示例,需要的朋友可以参考借鉴,一起来看看吧。
    2017-01-01
  • Pytorch深度学习经典卷积神经网络resnet模块训练

    Pytorch深度学习经典卷积神经网络resnet模块训练

    这篇文章主要介绍了Pytorch深度学习经典卷积神经网络resnet模块训练,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论