web-dev-qa-db-ja.com

TensorFlowを実行しようとしたときのCUDNN_STATUS_NOT_INITIALIZED

TensorFlow1.7をUbuntu16.04にCuda9.0とCuDNN7.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メッセージをオンにしても(これを行う方法については、以下のリンクを参照してください)、追加の関連メッセージは生成されませんでした。

ここでの重要なメッセージ可能性があります「デフォルトのDNNプラグイン、cuDNNを選択しています」、コードを見るとcuDNNライブラリモジュールをロードできないと思うかもしれませんが、実際には正常であることがわかっています(警告ではありません)そして問題は何か他のものである可能性があります。

たとえば、「CUDNN_STATUS_NOT_INITIALIZED」メッセージは、以前のバージョンではTFが事前にメモリを積極的に割り当てすぎたために発生したようです(これはTF GitHubの問題リストにあります)。そのため、CuDNNは初期化できませんでしたが、これらの解決策を試しました(リセットを含む)。 GPUと再起動)、しかし彼らは助けにはならなかった。

次に何を試すべきかについて何かアイデアはありますか?

5
Mike Wise

わかりました。これは、間違ったバージョンのcuDNNがインストールされていることが原因であることがわかりました。そのため、正しい共有ライブラリが実際に見つからなかったという私の疑いは真実でした。

基本的に、cuDNN v7.1.2 for Cuda 9.1の代わりにcuDNN v7.1.2 for Cuda 9.0をインストールしました。これにより、サイレントに失敗したようですが、この時点でエラーメッセージが表示されると予想していました。詳細なVLOGを実行していることに注意してください(これを行う方法の詳細については、この投稿の私の回答を参照してください TFログをオンにする ):

私がcuDNN v7.1.2 for Cuda 9.0をインストールしたとき、それは実際にそれを見つけて、そのバージョンが十分に新しくなかったと不平を言いました-実際の本当の問題はそれが十分に古くないということでしたが、少なくとも私は扱うべきいくつかの実際のデータを持っていました。

結局、cuDNN v7.0.5 for Cuda 9.0は私が必要としていたものであり、それはうまくいきました。

12
Mike Wise

以前にこのエラーが発生したことがありますか?

UnknownError(トレースバックについては上記を参照):畳み込みアルゴリズムの取得に失敗しました。これはおそらくcuDNNが初期化に失敗したためであるため、警告ログメッセージが上に出力されたかどうかを確認してみてください。 [[node 0-convolutional_2(D:\ patent-recognition-multi-GPU\darkflow\darkflow\net\ops\convolution.py:71で定義)= Conv2D [T = DT_FLOAT、_class = ["loc:@ 0- convolutional_3/cond/FusedBatchNorm_1/Switch "]、data_format =" NCHW "、dilations = [1、1、1、1]、padding =" VALID "、strides = [1、1、1、1]、use_cudnn_on_gpu = true、 _device = "/ job:localhost/reply:0/task:0/device:GPU:0"](0-convolutional_2-0-TransposeNHWCToNCHW-LayoutOptimizer、0-convolutional/kernel/read)]] [[{{node output/_89}} = _Recvclient_terinated = false、recv_device = "/ job:localhost/replica:0/task:0/device:CPU:0"、send_device = "/ job:localhost/reply:0/task:0/device: GPU:0 "、send_device_incarnation = 1、tensor_name =" Edge_676_output "、tensor_type = DT_FLOAT、_device ="/job:localhost/reply:0/task:0/device:CPU:0 "]]

0
James