Paddle 训练过程中无法自动回收显存

ne5o7dgx  于 2021-11-30  发布在  Java
关注(0)|答案(7)|浏览(855)

将每一轮训练、验证的过程分别封装到函数中,但是训练使用的显存在训练结束后不释放:

第一次执行完train_epoch后,显存占用7.5G,执行valid_epoch后显存占用12G,感觉是train_epoch的显存没有释放?

类似的代码在Pytorch中的实现没有这个问题,执行valid_epoch时不会多分配显存

6ovsh4lw

6ovsh4lw1#

您好,我们已经收到了您的问题,会安排技术人员尽快解答您的问题,请耐心等待。请您再次检查是否提供了清晰的问题描述、复现代码、环境&版本、报错信息等。同时,您也可以通过查看官网API文档常见问题历史IssueAI社区来寻求解答。祝您生活愉快~

Hi! We've received your issue and please be patient to get responded. We will arrange technicians to answer your questions as soon as possible. Please make sure that you have posted enough message to demo your request. You may also check out the APIFAQGithub Issue and AI community to get the answer.Have a nice day!

8oomwypt

8oomwypt2#

在validation的过程中,按照上述的代码也会生成反向的过程,显存不会释放,如果想在validation的过程中释放显存,需要加一个no_grad操作,这样就不会生成反向过程, 具体的api如下
https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/no_grad_cn.html#no-grad

a1o7rhls

a1o7rhls3#

哦哦明白了,您这个解答了我另一个问题;
还有就是,我其实想问的是,train的过程封装到函数里,函数结束了,里面变量生命周期结束后,会自动释放吗,能否通过某种方式,使得这样写train的过程时,调用完一次这个函数,GPU就释放掉,下个epoch调用train时再分配?

snvhrwxg

snvhrwxg4#

这里的显存主要是包括了三个方面的显存开销

  1. parameter
  2. 前向变量
  3. 反向变量

parameter是全局的变量,因此是在整个程序结束后才释放;前向变量是反向执行完的时候会释放,反向变量是在下一轮前向开始的时候才会释放

u2nhd7ah

u2nhd7ah5#

好的明白了,谢谢您哈

bvpmtnay

bvpmtnay6#

你好,最近刚开始使用paddlepaddle,也遇到这样的问题,使用paddle训练结束发现显卡显存还被占用着,并未释放,请问是什么原因导致,怎样解决?

zqry0prt

zqry0prt7#

有可能是任务异常退出,显存没有来得及释放

相关问题