CUDNN_STATUS_NOT_INITIALIZED 尝试 运行 TensorFlow

CUDNN_STATUS_NOT_INITIALIZED when trying to run TensorFlow

我已经在 Ubuntu 16.04 上安装了 TensorFlow 1.7,带有 Cuda 9.0 和 CuDNN 7.0.5 以及 vanilla Python 2.7,尽管它们对 CUDA 和 CuDNN 运行 进行了采样,并且 TensorFlow 可以看到 GPU(因此一些 TensorFlow 示例 运行),那些使用 CuDNN 的示例(如大多数 CNN 示例)则不会。他们失败并显示这些信息性消息:

2018-04-10 16:14:17.013026: I tensorflow/stream_executor/plugin_registry.cc:243] Selecting default DNN plugin, cuDNN
25428 2018-04-10 16:14:17.013100: E tensorflow/stream_executor/cuda/cuda_dnn.cc:403] could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED
25429 2018-04-10 16:14:17.013119: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:369] driver version file contents: """NVRM version: NVIDIA UNIX x86_64 Kernel Module  384.130  Wed Mar 21 03:37:26 PDT 2018
25430 GCC version:  gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9)
25431 """
25432 2018-04-10 16:14:17.013131: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:112] version string "384.130" made value 384.130.0
25433 2018-04-10 16:14:17.013135: E tensorflow/stream_executor/cuda/cuda_dnn.cc:411] possibly insufficient driver version: 384.130.0
25434 2018-04-10 16:14:17.013139: E tensorflow/stream_executor/cuda/cuda_dnn.cc:370] could not destroy cudnn handle: CUDNN_STATUS_BAD_PARAM
25435 2018-04-10 16:14:17.013143: F tensorflow/core/kernels/conv_ops.cc:712] Check failed: stream->parent()->GetConvolveAlgorithms( conv_parameters.ShouldIncludeWinogradNonfusedAlgo<T>(), &algorithms)

打开大量 VLOG 消息(请参阅下面我的 link 如何执行此操作)没有产生任何其他相关消息。

这里的关键信息可能是"Selecting default DNN plugin, cuDNN",因为看代码我可能会认为它不能加载cuDNN库模块,但总的来说我知道这实际上是正常的(因此不是警告)并且问题可能是其他原因。

例如,"CUDNN_STATUS_NOT_INITIALIZED" 消息似乎是由于 TF 在早期版本中过于积极地提前分配内存(在 TF GitHub 问题列表中发现的)导致的,因此 CuDNN 无法初始化,但我尝试了那些补救措施(包括重置 GPU 和重新启动),但它们没有帮助。

关于我接下来应该尝试什么有什么想法吗?

好的,我发现了这个,这是因为我安装了错误版本的 cuDNN,所以我怀疑它实际上没有找到正确的共享库是正确的。

基本上我安装了 cuDNN v7.1.2 for Cuda 9.1 而不是 cuDNN v7.1.2 for Cuda 9.0,这似乎导致它无声地失败 - 虽然我本以为此时会出现错误消息。请注意,我有详细的 VLOG 运行,(请参阅我对此 post 的回答以获取有关如何做到这一点的更多信息 Turning on TF Logs):

当我安装 cuDNN v7.1.2 for Cuda 9.0 时,它确实找到了它并抱怨那个版本不够新 - 实际上真正的问题是它不够旧,但至少我有一些真正的要使用的数据。

最终 cuDNN v7.0.5 for Cuda 9.0 是我所需要的,并且奏效了。