赞
踩
当以keras进行深度学习的调参时,往往需要写循环进行。但在循环中,之前建立模型占用的显存往往不会释放,当模型深度足够大,batchsize设置过大而循环次数过多时,循环进行到一定程度时,往往会出现OOM(out of memory)状况而终止循环。
另一方面,显存不释放,可能会导致可供用的计算资源减少,从而出现模型训练越来越慢的情况。
因此,我找到了以下释放显存的方法:
1.Python中释放显存的方法:
我在网上查到可用以下代码释放全局状态达到释放显存的目的。
Python tf.keras.backend.clear_session实例讲解 - 码农教程
- reticulate::py_run_string("import tensorflow as tf")
- tf.keras.backend.clear_session()
2.R中释放显存的方法:
在R中,可通过reticulate包调用python中的命令:
在使用前需先安装并加载reticulate包
- install packages('reticulate')
- library(reticulate)
加载reticulate包后可运行以下代码达到释放显存的目的:
- reticulate::py_run_string("import tensorflow as tf")
- reticulate::py_run_string("tf.keras.backend.clear_session()")
把以上代码插入到循环中,即可达到参数寻优时,定期释放显存的目的。
3.网上一些行不通的方法:
- from numba import cuda
- cuda.select_device(0);
- cuda.close()
以上代码通过调用cuda直接清空显存,但强制清空显存后,tensorflow无法再调用GPU,也就无法建模,因此本方法不可行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。