当前位置:   article > 正文

R或Python在循环中释放显存

R或Python在循环中释放显存

当以keras进行深度学习的调参时,往往需要写循环进行。但在循环中,之前建立模型占用的显存往往不会释放,当模型深度足够大,batchsize设置过大而循环次数过多时,循环进行到一定程度时,往往会出现OOM(out of memory)状况而终止循环。

另一方面,显存不释放,可能会导致可供用的计算资源减少,从而出现模型训练越来越慢的情况。

因此,我找到了以下释放显存的方法:

1.Python中释放显存的方法:

我在网上查到可用以下代码释放全局状态达到释放显存的目的。

Python tf.keras.backend.clear_session实例讲解 - 码农教程​​​​​​

  1. reticulate::py_run_string("import tensorflow as tf")
  2. tf.keras.backend.clear_session()

2.R中释放显存的方法:

在R中,可通过reticulate包调用python中的命令:

 在使用前需先安装并加载reticulate包

  1. install packages('reticulate')
  2. library(reticulate)

加载reticulate包后可运行以下代码达到释放显存的目的:

  1. reticulate::py_run_string("import tensorflow as tf")
  2. reticulate::py_run_string("tf.keras.backend.clear_session()")

把以上代码插入到循环中,即可达到参数寻优时,定期释放显存的目的。

3.网上一些行不通的方法:

  1. from numba import cuda
  2. cuda.select_device(0);
  3. cuda.close()

以上代码通过调用cuda直接清空显存,但强制清空显存后,tensorflow无法再调用GPU,也就无法建模,因此本方法不可行。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/127433
推荐阅读
相关标签
  

闽ICP备14008679号