[python][技巧] del的神奇功效

del 的神奇功效

众所周知,del在python可以删除变量,让这个变量无法重新使用。但是,实际上空间并没有释放,只是使得变量的引用次数变为-1,若恰好在循环外,内存会无法得到释放,这时就需要gc.collect()来帮忙:

a = range(1,1e8)
del a
import gc
gc.collect()

这样一来,大部分问题都能解决
但是!!!! 如果只是这样我也没必要写这篇文章特地记下来了
最近在用pyTorch运行网络的时候,发现没过几个epoch整个电脑就进入死机状态。
使用Ubuntu自带的系统资源监视器人肉跟踪发现,内存占用不断地上涨,虽然比较慢,但确实在上涨这种情况,难怪会死机,内存都爆掉了……
为了解决这个问题首先检查了代码问题,有没有会让内存溢出的操作(交叉引用),许久发现,并没有这个问题。
随后我发现代码有这么一段:

for data in dataloader:
	...
	_, feat = model(inputs)
	...
	_, preds = torch.max(ouput.data, 1)
	...

这个_引起了我的注意,这个变量始终没有被使用到,还被多次赋值
可能是由于pyTorch的缺陷,这个_后面所代表的Tensor被累积性的储存在内存中,并没有得到释放
于是改成这样,问题居然就解决了……

for data in dataloader:
	...
	_, feat = model(inputs)
	...
	_, preds = torch.max(ouput.data, 1)
	...
	del
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值