web-dev-qa-db-ja.com

cudnnハンドルを作成できませんでした:CUDNN_STATUS_INTERNAL_ERROR

GeForce GT 750Mを搭載したMacbook Proにtensorflow 1.0.1 GPUバージョンをインストールしました。 CUDA 8.0.71およびcuDNN 5.1もインストールされています。私は非CPUテンソルフローで正常に動作するtfコードを実行していますが、GPUバージョンではこのエラーが発生します(しばらく動作します):

name: GeForce GT 750M
major: 3 minor: 0 memoryClockRate (GHz) 0.9255
pciBusID 0000:01:00.0
Total memory: 2.00GiB
Free memory: 67.48MiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:01:00.0)
E tensorflow/stream_executor/cuda/cuda_driver.cc:1002] failed to allocate 67.48M (70754304 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY
Training...

E tensorflow/stream_executor/cuda/cuda_dnn.cc:397] could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
E tensorflow/stream_executor/cuda/cuda_dnn.cc:364] could not destroy cudnn handle: CUDNN_STATUS_BAD_PARAM
F tensorflow/core/kernels/conv_ops.cc:605] Check failed: stream->parent()->GetConvolveAlgorithms(&algorithms) 
Abort trap: 6

ここで何が起きてるの?これはテンソルフローのバグですか?助けてください。

pythonコードを実行したときのGPUメモリ空間は次のとおりです。

Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 83.477 of 2047.6 MB (i.e. 4.08%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 83.477 of 2047.6 MB (i.e. 4.08%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 83.477 of 2047.6 MB (i.e. 4.08%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 1.1016 of 2047.6 MB (i.e. 0.0538%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 1.1016 of 2047.6 MB (i.e. 0.0538%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 1.1016 of 2047.6 MB (i.e. 0.0538%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 1.1016 of 2047.6 MB (i.e. 0.0538%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 91.477 of 2047.6 MB (i.e. 4.47%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 22.852 of 2047.6 MB (i.e. 1.12%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 22.852 of 2047.6 MB (i.e. 1.12%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 36.121 of 2047.6 MB (i.e. 1.76%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 71.477 of 2047.6 MB (i.e. 3.49%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 67.477 of 2047.6 MB (i.e. 3.3%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 67.477 of 2047.6 MB (i.e. 3.3%) Free
MacBook-Pro:cuda-smi-master xxxxxx$ ./cuda-smi
Device 0 [PCIe 0:1:0.0]: GeForce GT 750M (CC 3.0): 67.477 of 2047.6 MB (i.e. 3.3%) Free
10
Shimano

ホームフォルダーの.nvフォルダーを削除することで、正常に機能するようになりました。

Sudo rm -rf ~/.nv/
15
Félix Fu

私の場合、cuDNNとCUDAのバージョンを確認した後、GPUのメモリが不足していることがわかりました。別のbashターミナルでwatch -n 0.1 nvidia-smiを使用すると、2019-07-16 19:54:05.122224: E tensorflow/stream_executor/cuda/cuda_dnn.cc:334] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR onsetの瞬間はGPUメモリがほぼいっぱいになる瞬間です。 スクリーンショット

そこで、私はgnsを使用するためにtnsorflowの制限を構成します。 tf.kerasモジュールを使用するときに、プログラムの先頭に次のコードを追加します。

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.9
tf.keras.backend.set_session(tf.Session(config=config));

その後、問題は解決しました!

batch_sizeを変更するか、よりスマートな方法でトレーニングデータを入力できます(tf.data.Datasetやキャッシュの使用など)。私の答えが他の誰かを助けることを願っています。

6
Zhao Kuangshi

奇妙に聞こえるかもしれませんが、コンピューターを再起動して、モデルを再実行してください。モデルが正常に動作する場合、問題はGPUのメモリ割り当てとその利用可能なメモリのテンソルフロー管理にあります。 Windows 10では、2つのターミナルを開いて、1つを閉じて問題を解決しました。まだメモリを保持しているオープンスレッド(ゾンビ)が存在する可能性があります。

5
ksooklall

私の場合、問題はテンソルフローとcudnnバージョンの不一致によって引き起こされたようです。以下は私を助けてくれました(私はGoogle Cloud上でNVidia Tesla K80を使ってUbuntu 16.04で作業していましたが、最終的にtensorflow 1.5はcudnn 7.0.4およびcuda 9.0で動作しました)。

  1. CuDNNを完全に削除します。

    Sudo rm /usr/local/cuda/include/cudnn.h
    Sudo rm /usr/local/cuda/lib64/libcudnn*
    

    そうすると、インポートテンソルフローはエラーを引き起こすはずです。

  2. 適切なcuDNNバージョンをダウンロードします。 CUDA 9.0にはcuDNN 7.0.4があり、CUDA 8.0にはcuDNN 7.0.4があることに注意してください。 CUDAバージョンに対応するものを選択する必要があります。このステップに注意してください。そうしないと、同様の問題が再び発生します。通常どおりcuDNNをインストールします。

    tar -xzvf cudnn-9.0-linux-x64-v7.tgz
    cd cuda
    Sudo cp -P include/cudnn.h /usr/include
    Sudo cp -P lib64/libcudnn* /usr/lib/x86_64-linux-gnu/
    Sudo chmod a+r /usr/lib/x86_64-linux-gnu/libcudnn*
    

    この例では、CUDA 9.0用にcuDNN 7.0.xをインストールしました(xは実際には関係ありません)。 CUDAバージョンと一致するように注意してください。

  3. コンピューターを再起動します。私の場合、問題はなくなりました。それでもエラーが発生する場合は、テンソルフローの別のバージョンをインストールすることを検討してください。

これが誰かを助けることを願っています。

3
Danila Savenkov

私も同じエラーを受け取り、問題を解決しました。私のシステムプロパティは次のとおりです。

  • オペレーティングシステム:Ubuntu 14.04
  • GPU:GTX 1050Ti
  • Nvidiaドライバー:375.66
  • テンソルフロー:1.3.0
  • Cudnn:6.0.21(cudnn-8.0-linux-x64-v6.0.deb)
  • Cuda:8.0.61
  • ケラス:2.0.8

問題の解決方法は次のとおりです。

  1. Cudnnファイルを適切な場所にコピーしました(/ usr/local/cuda/includeおよび/ usr/local/cuda/lib64
  2. 環境変数を次のように設定します。

    * export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64"
    * export CUDA_HOME=/usr/local/cuda
    
  3. Sudo ldconfig -v commandも実行して、実行時リンカー用の共有ライブラリをキャッシュします。

これらの手順が、これから夢中になる人を助けることを願っています。

2

これはcudnn互換性の問題です。たとえば、GPUを使用しているインストール済みのものを確認します。tensorflow-gpu。バージョンは何ですか?バージョンはcudnnのバージョンと互換性があり、cudnnはcudaに適切なバージョンをインストールしていますか?.

私はそれを観察しました:cuDNN v7.0.3 にとって Cuda 7.*cuDNN v7.1.2 にとって Cuda 9.0cuDNN v7.3.1 にとって Cuda 9.1 等々。

そのため、お使いのcuda構成のTensorFlowの正しいバージョンも確認してください。例えば-using tensorflow-gpuTF v1.4 にとって cudnn 7.0.*TF v1.7以上cudnn 9.0.*など.

したがって、必要なのは、適切なcudnnバージョンを再インストールすることだけです。それが役に立てば幸い!

1
Nwoye CID

Jupyterノートブックでこの問題が発生する場合:

2台のjupyterノートブックを実行していました。それらの1つを閉じた後、問題は解決しました。

1

次のコードを追加するとうまくいきました:

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)

私の環境では、CuDNNとCudaのバージョンに不一致はありません。 OS:ubuntu-18.04;テンソルフロー:1.14; CuDNN:7.6; cuda:10.1(418.87.00)。

1
Neeraj

テンソルボードのterminal/cmdまたはディレクトリとやり取りする他の端末を忘れずに閉じてください。その後、トレーニングが再開できるようになります。

0
JTIM

CUDA 9.0がインストールされたシステムにlibcudnn7_7.0.5.15-1 + cuda9.0_AMD64.debの代わりにCUDA 9.2 libcudnn7_7.2.1.38-1 + cuda9.2_AMD64.debを誤ってインストールしたときに、この問題が発生しました。

CUDA 9.2がインストールされていて、CUDA 9.0にダウングレードされたため、そこに到達しました。明らかにlibcudnnはバージョンに固有です。

0
jrounds

GPUリソ​​ースをロードしてcudnnハンドル(per_process_gpu_memory_fractionとも呼ばれる)を作成するために使用できるメモリ部分と関係があります。このメモリの割合を自分で減らすと、エラーが解決します。

> sess_config = tf.ConfigProto(gpu_options =
> tf.GPUOptions(per_process_gpu_memory_fraction=0.7),
> allow_soft_placement = True)
> 
> with tf.Session(config=sess_config) as sess:
>      sess.run([whatever])

あなたの記憶に収まるように小さな断片として使用してください。 (コードでは、0.7を使用します。0.3以下から始めて、同じエラーが発生するまで増やしていきます。これが制限です。)tf.Session()またはtf.train.MonitoredTrainingSession()に渡すか、構成としてのスーパーバイザーのsv.managed_session()

これにより、GPUがTensorFlowコードのcudnnハンドルを作成できるようになります。

0
Nwoye CID

私のために、説明されているようにCUDAインストールを再実行します here 問題を解決しました:

_# Add NVIDIA package repository
Sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_AMD64.deb
Sudo apt install ./cuda-repo-ubuntu1604_9.1.85-1_AMD64.deb
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_AMD64.deb
Sudo apt install ./nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_AMD64.deb
Sudo apt update

# Install CUDA and tools. Include optional NCCL 2.x
Sudo apt install cuda9.0 cuda-cublas-9-0 cuda-cufft-9-0 cuda-curand-9-0 \
    cuda-cusolver-9-0 cuda-cusparse-9-0 libcudnn7=7.2.1.38-1+cuda9.0 \
    libnccl2=2.2.13-1+cuda9.0 cuda-command-line-tools-9-0

_

インストール中に_apt-get_がダウングレードされた_cudnn7_が原因だと思います。おそらく、それは_apt-get upgrade_で誤ってシステムの他の部分と互換性のないバージョンに更新されました。

0
Francesco Pasa

私も同じ問題に遭遇しました:

Using TensorFlow backend.
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties: 
name: GeForce GTX 1050
major: 6 minor: 1 memoryClockRate (GHz) 1.493 pciBusID 0000:01:00.0
Total memory: 3.95GiB
Free memory: 3.60GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1050, pci bus id: 0000:01:00.0)
E tensorflow/stream_executor/cuda/cuda_dnn.cc:385] could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
E tensorflow/stream_executor/cuda/cuda_dnn.cc:352] could not destroy cudnn handle: CUDNN_STATUS_BAD_PARAM
F tensorflow/core/kernels/conv_ops.cc:532] Check failed:  stream->parent()->GetConvolveAlgorithms(&algorithms)

Aborted (core dumped)

しかし、私の場合、コマンドでSudoを使用すると完全にうまく機能しました。

0