解决matplotlib导致内存泄漏问题

同样的深度学习模型在linux运行没有遇到内存泄漏的问题,迁移到Windows就出现了问题。

报错信息为:numpy.core._exceptions.memoryerror unable to allocate
查了一下GPU Memory使用量没有爆(爆也不是提示这个信息),使用率正常。开始查问题是不是出在CPU上。

观察发现随着代码的运行时长增加,CPU内存占用在持续地缓缓地上涨,内存占满时,则报错程序停止。
在这里插入图片描述设置断点进行观察,发现深度学习模型部分并不会造成内存的增加,引起内存上升的部分存在于对模型输出结果的后处理部分。再进一步定位发现问题存在于调用matplotlib进行结果图绘制和存图的部分。网上查了一下,有不少关于matplotlib引起内存泄漏的问题。主要时因为图像绘制大量占用内存但没有得到及时的释放,导致逐渐累积最终内存爆炸。

解决方案如下所示:(参考博文:https://www.codenong.com/7101404/

  1. 在不需要展示图片时,使用matplotlib 的非交互模式,如 agg;
  2. 图像保存后及时清理内存

代码参考:

import matplotlib
matplotlib.use('Agg') 
import matplotlib.pyplot as plt
import numpy as np      
import gc

a = np.arange(1000000)
b = np.random.randn(1000000)

fig = plt.figure(num=1, dpi=100, facecolor='w', edgecolor='w')
fig.set_size_inches(10,7)
ax = fig.add_subplot(111)
ax.plot(a, b)

fig.clf()
plt.close()
del a, b
gc.collect()

参考博文中提到:

  • .clf(): 解决循环绘制时,Matplotlib内存不足
  • close(): 解决指定图形大小时未释放内存

改进之后,代码运行时CPU内存占用约从3.6GB上升至6.3GB,之后稳定在6.3GB,内存爆炸问题解决。
在这里插入图片描述

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值