Pytorch内存泄漏Memory Leak

1. 问题描述

  1. 在运行程序是,通过要进行压力测试,在程序的各项性能稳定时才可以进行上线,其中主要的性能指标包含cup,内存,显存,这里遇到的问题就是内存不断飙升的问题,在程序中手动加入del删除变量,在接口处执行gc.collect()进行手动的内存回收,并且加入torch.cuda.empty_cache()清除gpu的显存。压测了一个多小时,发现内存已经相对稳定了,就想着进行服务的上线。
  2. 实际上这种方式只是缓解了内存爆炸的速度而已,抱着侥幸心理不去找到内存泄漏的点的话,线上服务也会早晚出问题。
    实际上另一个坑正在慢慢的酝酿,通过单独测试gc.collect()指令,发现程序在压测20分钟后,仅仅执行gc.collect()这一条指令,就使用了整整10s的时间!!太恐怖了,后面就想到了定时执行gc.collect(),在内存和时间上进行折中,实际上这种方式还是没有真正的解决问题。
  3. 不出所料,在上线后的第一晚上服务就挂了,凌晨四点进行的报警。
    在这里插入图片描述
    在这里插入图片描述
    每一个小时进行内存的监控,内存泄漏的问题正在一点一点的榨干服务器的内存空间,直到服务挂掉。

2. 问题排查

最难的可能就是进行内存泄漏点的排查了,百度加谷歌都尝试了一下pytorch内存泄漏,大概掌握了一下情况,后来使用了内存分析的火焰图cProfilememory profiler,使用memory profiler这种装饰器的方式真的是香,将每一行的代码都进行了内存的分析,最终定位了内存泄漏的代码段。
在这里插入图片描述

3. 参考

  1. 使用 cProfile 和火焰图调优 Python 程序性能
  2. 记一次Pytorch内存泄露的排查与处理
  3. python内存诊断工具pympler
  4. pytorch内存泄漏分析案例 | list转tensor
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值