前言
深度学习训练模型时,总是出现显存和内存爆满的现象,导致训练中断,这里总结几个好用的方法:
- 代码添加指令
- 手动释放内存/缓存
- 自动定时释放内存/缓存
- 代码释放显存(torch)
1. 代码添加指令
代码中存在一些临时变量或者缓存,使用del进行删除,del ***是python删除变量的一种方式,可以尽可能减少不必要的临时变量。
只需在运行代码末尾加入:
del***gc.collect()#内存回收,释放,代码开头记得import gc
2. 手动释放内存/缓存:
进入终端,写如下任一指令即可:
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
用free -h检查是否成功清除缓存。
3. 自动定时释放内存/缓存:
注:这个是我比较推荐的,建议在root权限下去做:
在自定义的一个路径下(我的是/home/xzy/)建立一个freex.h文件:
vim freex.sh
然后写入如下指令(输入i进行编辑),并保存退出(ESC + : + w + q):
sync;echo 1 > /proc/sys/vm/drop_caches
sync;echo 2 > /proc/sys/vm/drop_caches
sync;echo 3 > /proc/sys/vm/drop_caches
swapoff -a && swapon -a
赋权:
chmod 777 freex.sh
设置定时:
crontab -e
但是第一次进入可能会出现这样的情况:
root@shige-System-Product-Name:/home/xzy# crontab -e
no crontab for root -using an empty one
Select an editor. To change later, run 'select-editor'.
1./bin/nano <---- easiest
2./usr/bin/vim.basic
3./usr/bin/vim.tiny
4./usr/bin/emacs25
5./bin/ed
Choose 1-5 [1]:
选择编辑器,我选的vim.basic,也就是输入2,回车:
Choose 1-5 [1]: 2
crontab: installing new crontab
再次进入:
crontab -e
输入以下内容,并保存退出(5分钟自动调用一次):
*/05 ****/home/xzy/freex.sh
如图:
查看状态和启动:
service cron status
service cron start
注释:
service cron start # 开启服务
service cron stop # 关闭服务
service cron reload # 重新载入配置
service cron restart # 重启服务
就是有个小疑问,就是图中存在一个:(CRON) info (No MTA installed, discarding output)。
不知道是个啥,不过不影响功能,有知道的可以评论区指导下哈,我搜了一些去除这个问题的博客,感兴趣的可以参考:
博客1
博客2
博客3
Ok!
完成,亲测有效!!!
4. 代码释放显存(torch):
如果显存资源比较紧缺,可以在每个epoch开始时释放下不用的显存资源:
torch.cuda.empty_cache()
版权归原作者 習澤宇 所有, 如有侵权,请联系我们删除。