在Windows上无法预测CUDNN_STATUS_NOT_INITIALIZED

时间:2017-07-11 16:36:02

标签: windows tensorflow keras cudnn

我正在Windows 10上运行GTX 1070上的keras神经网络训练和预测。大多数时候它都在工作,但不时会抱怨

E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_dnn.cc:359] could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_dnn.cc:366] error retrieving driver version: Unimplemented: kernel reported driver version not implemented on Windows
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_dnn.cc:326] could not destroy cudnn handle: CUDNN_STATUS_BAD_PARAM
F c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\kernels\conv_ops.cc:659] Check failed: stream->parent()->GetConvolveAlgorithms(&algorithms)

无论是字面上的错误含义还是OOM错误都无法解释。

如何解决?

6 个答案:

答案 0 :(得分:3)

尝试使用set gpu选项per_process_gpu_memory_fraction限制您的gpu使用。

弄清楚它是什么有效,什么无效。

我建议使用.7作为起始基线。

答案 1 :(得分:3)

解决了这个问题。 我在使用Nvidia GEforce 920M的Windows 10上遇到了同样的问题。 搜索cudnn库的正确版本。如果版本与CUDA版本不兼容,它将不会在tensorflow安装时抛出错误,但会在GPU内存分配期间产生干扰。 请检查您的CUDA和CUDNN版本。另请遵循上述会话创建的说明。

答案 2 :(得分:3)

与其他人所说的类似,启用 GPU 的内存增长可以解决此问题。

通过添加到训练脚本的开头,以下对我有用:

# Using Tensorflow-2.4.x
import tensorflow as tf
try:
    tf_gpus = tf.config.list_physical_devices('GPU')
    for gpu in tf_gpus:
        tf.config.experimental.set_memory_growth(gpu, True)
except:
    pass 

答案 3 :(得分:2)

我有时在Windows10和Keras上遇到了这个问题。 重启会在短时间内解决问题,但会再次发生。

我指的是https://github.com/fchollet/keras/issues/1538

import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.3
set_session(tf.Session(config=config))

设置解决了暂停问题。

答案 4 :(得分:2)

最后,这个问题现在已经为我解决了,我花了很多时间努力解决这个问题。

我建议按照以下说明正确执行所有安装步骤 链接

TensorFlow- https://www.tensorflow.org/install/install_windows

以及对于CuDNN-

https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#install-windows

这对我来说还不够,我尝试从GeForce Experience窗口更新我的GeForce Game Ready驱动程序,然后在重新启动后开始为我工作。

GeForce Experience

也可以从链接https://www.geforce.com/drivers下载驱动程序

答案 5 :(得分:0)

tf doku帮我很多Allowing GPU memory growth

第一个是allow_growth选项,它尝试根据运行时分配仅分配尽可能多的GPU内存:它开始分配非常少的内存,并且当Sessions运行并需要更多GPU内存时,我们扩展GPU内存区域TensorFlow流程需要。请注意,我们不释放内存,因为这可能导致更糟糕的内存碎片。要打开此选项,请在ConfigProto中设置选项:

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config, ...)

with tf.Session(graph=graph_node, config=config) as sess:
     ...

第二种方法是per_process_gpu_memory_fraction选项,它确定应分配每个可见GPU的总内存量的分数。例如,您可以通过以下方式告诉TensorFlow仅分配每个GPU总内存的40%:

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
session = tf.Session(config=config, ...)