在Windows上无法预测CUDNN_STATUS_NOT_INITIALIZED

问题描述 投票:5回答:5

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

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错误来解释。

怎么修?

windows tensorflow keras cudnn
5个回答
3
投票

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

摆弄它,看看哪些有效,哪些无效。

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


3
投票

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


2
投票

我有时在Windows 10和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))

设置解决了暂停问题。


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下载


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, ...)
© www.soinside.com 2019 - 2024. All rights reserved.