训练一段事件后,显存不足
收藏
最近比赛,用2080ti训练模型,发现一个情况,查了两天没解决
训练过程中,每个epoch跟一个val,验证精度
每2000个iter保存一次模型和opt(admin)参数
在训练4到10个epoch后,报显存不足的错误
所有变量都有归零操作,所有积累变量用类似loss.item()的方式取值
疑惑,有哪些变量是积累的,不释放而且占用显存?
多进程引起的或者是其他引起的?
我怎么才能追出来?
没思路,痛苦
0
收藏
请登录后评论
显存有没有基本占满呢? 降低bs试一次。
没有占满,如果沾满了启动或者第一次验证的时候会卡住
运行到第四个epoch,显然不是初始设定的问题
那不一定的。你占用多少?比如24G你占用23G?
可能是eval时候出现的?
paddlex现在每次训练完要重启内核,不然显存释放不了
没有用框架,用的paddlepaddle API
第一次eval的时候也没出现,这正是我迷惑的地方,按道理讲,train和eval都过去之后,不应该出现缓存不足的情况
每一个epoch都val一次,但是运行到第四个epoch才报错。
我现在怀疑,adam的opt,随着训练,里面内容是累计的
保存了从训练开始的动量和二阶动量
但不知道怎样验证,也不知道怎么解决
看起来是显存没有合理的释放。检查一下代码里面看看吧。
我之前也在pytorch里遇到同样的问题,大概是因为验证的时候用testdataload导致内存炸了,解决办法可以尝试下:https://aistudio.baidu.com/aistudio/projectdetail/3465771
将中间过程变量删除,然后清除内存,pytorch里就可以解决了。paddle里我还没遇到过这种问题。
是在notebook里面吗? 可以试试改成终端里运行试试,notebook下可能会有忽略的变量占用。
另外是不是计算梯度的时候,有些变量的梯度没有释放?
还有极小的概率是飞桨自己的bug,但一般不会碰到。
可能是多进程引起的,找到多进程读文件参数,我用paddleocr 默认1000 在平台上内存溢出 后来改成30了。。。。batch_size 20 ~
1
我去试试多线程设置为0
是离线环境,在pycharm里面
在aistudio上也遇到过,现在训练时都会预留一些显存