Sep*_*ari 5 out-of-memory spyder keras tensorflow
我正在 for 循环中拟合模型,但收到一条错误消息,指出我的 GPU 内存已满。我在 Anaconda Spyder IDE 中使用 Keras。我的 GPU 是华硕 GTX 1060 6GB。
我还使用过以下代码:K.clear_session()、gc.collect()、tf.reset_default_graph()del custom_model 但它们都不起作用。GPU 属性表明 98% 的内存已满:

没有什么会刷新 GPU 内存,除了numba.cuda.close()但不允许我再次使用我的 GPU。清除它的唯一方法是重新启动内核并重新运行我的代码。
我正在寻找任何脚本代码来添加我的代码,允许我在 for 循环中使用我的代码并在每个循环中清除 GPU。
将模型创建和训练部分封装在一个函数中,然后使用子流程来完成主要工作。训练完成后,子进程将终止,GPU 内存将释放。
就像是:
import multiprocessing
def create_model_and_train( ):
.....
.....
p = multiprocessing.Process(target=create_model_and_train)
p.start()
p.join()
Run Code Online (Sandbox Code Playgroud)
或者您可以创建以下函数并在每次运行之前调用它:
from keras.backend.tensorflow_backend import set_session
from keras.backend.tensorflow_backend import clear_session
from keras.backend.tensorflow_backend import get_session
import tensorflow
import gc
# Reset Keras Session
def reset_keras():
sess = get_session()
clear_session()
sess.close()
sess = get_session()
try:
del classifier # this is from global space - change this as you need
except:
pass
print(gc.collect()) # if it does something you should see a number as output
# use the same config as you used to create the session
config = tensorflow.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 1
config.gpu_options.visible_device_list = "0"
set_session(tensorflow.Session(config=config))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8340 次 |
| 最近记录: |