最近跑深度学习模型,就很邪门一直中断,跑到一半就停了然后报错 “cuda out of memory”,通过百度综合了很多大神的解决办法。
1. 处理 train.py 文件
在运行模型的地方,加上 torch.cuda.empty_cache() 删除一些不需要的变量。
原代码:
# Run model
pred = model(imgs)
修改之后:
# Run model
try:
pred = model(imgs)
except RuntimeError as exception:
if "out of memory" in str(exception):
print("WARNING: out of memory")
if hasattr(torch.cuda, 'empty_cache'):
torch.cuda.empty_cache()
else:
raise exception
2. 处理 test.py 文件
每次都是卡在处理完一个epoch,测试这一大批数据在测试集上的表现结果,计算 Precision、Recall、mAP值和F1 这些指标的时候,显存就爆了,可能是没有设置 with torch.no_grad(),在相应的地方加上:
3. 整合多个events文件
全部加上后恢复训练,跑了几个又断了,不死心继续恢复训练,就这样跑完80个epochs,生成了三个events文件,利用 tensorboard 可视化之后,我想要的直方图也变成了这样:
实惨,这样根本没法看整体稀疏训练的效果。愁的我又去找度娘,看到的全是提取数据重新绘制。不好意思,本人水平实在是太低,不会玩这些高大上的东西,就想到一个懒办法——我要是能把这三个文件整合到一起,可视化整合之后的event文件不就好了吗。
在此又要吹一下这个Ubuntu系统,太好用了!!!!!百度找到这篇文章https://blog.csdn.net/u010555688/article/details/51374502,介绍 Ubuntu系统如何将两个文件合并为一个文件。我用的是第二个方法,使用 cat 命令将其中一个文件追加到(>>)另一个文件末尾。
我现在有三个events文件,如下图:
所以思路就是首先将最后生成的events文件追加到第二个文件末尾,再把第二个events文件追加到第一个文件末尾。回车结束战斗!
(1)首先将这三个events文件放入一个文件夹中,然后进入该文件夹
cd /root/data/my_train/runs/logs
(2)将第三个文件追加到第二个文件末尾
cat events.out.tfevents.1615376699.b4286b4d32d0.7927.0 >> events.out.tfevents.1615375949.b4286b4d32d0.7468.0
(3)将追加好的第二个events文件继续追加到第一个文件末尾
cat events.out.tfevents.1615375949.b4286b4d32d0.7468.0 >> events.out.tfevents.1615368994.b4286b4d32d0.3145.0
最后将整合后的第一个events文件利用 tensorboard可视化,结果如图:
终于完整了,开心撒花~