Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
运行keras加载模型进行预测时,报错细节如下:
2020-04-01 16:06:28.485938: E tensorflow/stream_executor/cuda/cuda_dnn.cc:353]
Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
查找资料,我这里可用的办法是在代码加入下面的代码,意思是设置tf会话运行时GPU显存使用量,动态申请显存,设置按需增长。如果不行,还有其他解决办法,比如:调整cudnn版本适配cuda。加油!
import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
set_session(tf.Session(config=config))
验证:未加入修正代码前,加载模型、执行预测显存使用如下,直接冲爆显存,所以报错:
加入上述代码后,执行同样的操作,显卡使用如下,正常运行预测。但是,资源利用率太低。能运行,姑且这样。
---------------------------------分割线------------------------------------------
关于GPU的使用还可以设置GPU显存使用率,添加另外一版代码,通过per_process_gpu_memory_fraction = 0.8设置GPU显存使用率,如下:
import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.8
set_session(tf.Session(config=config))
再次运行相同的加载模型预测过程,显存使用如下。经验证,预测相同数量的样本,速度有提升。
执行下面代码每隔2秒钟监控一次显存使用情况。
watch -n 2 nvidia-smi