前言
深度学习训练模型时,总是出现显存和内存爆满的现象,导致训练中断,这里总结几个好用的方法:
- 代码添加指令
- 手动释放内存/缓存
- 自动定时释放内存/缓存
- 代码释放显存(torch)
1. 代码添加指令
代码中存在一些临时变量或者缓存,使用del进行删除,del ***是python删除变量的一种方式,可以尽可能减少不必要的临时变量。
只需在运行代码末尾加入:
del ***gc.collect() #内存回收,释放,代码开头记得import gc
2. 手动释放内存/缓存:
进入终端,写如下任一指令即可:
echo 1 > /proc/sys/vm/drop_cachesecho 2 > /proc/sys/vm/drop_cachesecho 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 -eno crontab for root - using an empty oneSelect 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/edChoose 1-5 [1]:
选择编辑器,我选的vim.basic,也就是输入2,回车:
Choose 1-5 [1]: 2crontab: installing new crontab
再次进入:
crontab -e
输入以下内容,并保存退出(5分钟自动调用一次):
*/05 * * * * /home/xzy/freex.sh
如图:
查看状态和启动:
service cron statusservice 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()
来源地址:https://blog.csdn.net/Ayu147258/article/details/129857191