【pytorch训练过程中服务器内存逐渐增加至process killed】

本文探讨了PyTorch训练过程中服务器内存逐渐增加导致进程被kill的问题,通过使用memory_profiler找出内存泄漏源,并尝试了dataloader优化、numpy运算转换和断开计算图等解决方法,最终发现detach()操作有效释放内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pytorch训练过程中服务器内存逐渐增加至process killed

背景说明

之前写过一篇帖子是显存占用逐渐增加到爆,同样的代码,最近又出现一个问题:服务器的RAM在训练过程中,mem used这一项逐渐增加,直到进程被killed。原因还是代码中有一个memory bank,需要把深度模型提取到的特征全部保存下来,进一步分析处理。

解决过程
分析

看帖子其他人讲到使用memory_profiler来分析每行代码的内存使用情况。这个工具很好用,可以统计每行代码执行后使用内存增加/减少数目,帮助锁定内存泄漏位置。发现就是生成了高维tensor但是计算完没有释放掉内存,del、gc.collect这些一通操作还是不行

尝试方案1

搜索关键词:内存泄漏
首先怀疑是有两个dataloader的问题,看别人讲两个datasets长度不一样的,因为每次训练要源域取一个batch数据,目标域取一个batch数据,叭叭叭,就造成内存泄漏,改代码的方案为知乎看到的一个帖子,里面银色的太阳的回复。很不幸没解决。

尝试方案2

看到优快云上一个帖子讲,实在没有办法的话,把tensor转化为ndarray,在numpy库上计算,但是我现在找不到这个帖子了(抱歉)。然后就试了一下,把torch.mul改成np.dot等等类似操作改一通,MEM used不涨了,每个进程的%MEM也不涨了,我以为问题已经解决了,还挺高效的。后来又发现:训练速度慢了3、4倍,从原来的2h到8h,简直接受不了,因为numpy实在cpu上运算?没有cuda加速,还得改

最终方案

在特征存入memory bank前加一个features.detach()操作,断了计算图,运算完内存就释放掉了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值