Ubuntu 18.04 のCUDA周り(CuDnn)で苦戦したので,簡単にまとめておきます.比較的,初学者向けです.
エラー文は以下
UnknownError: Failed to get convolution algorithm.
This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.[Op:Conv2D]
先に結論
CuDnnを再インストールしただけ.
cudnn7.4.1.5-1+cuda10.0 → cudnn7.6.5.32-1+cuda10.0
以前の環境
- Ubuntu 18.04
- NVIDIA GeForce GTX 1080
- nvidia-driver 440
- CUDA 10.0
- cudnn 7.4
- Tensorflow-GPU = 2.0.0
解決後の環境
- Ubuntu 18.04
- NVIDIA GeForce GTX 1080
- nvidia-driver 440
- CUDA 10.0
- cudnn 7.6
- Tensorflow-GPU = 2.0.0
流れ
- TensorFlow GPUサポート テスト済みビルド設定を参考に環境構築し,問題なく動作していた
- 2020/04/10頃,同じPCにUbuntuを再インストールし,同じように環境構築
- keras.layers.Conv2Dを使用したモデルを動かそうとするとエラー(上記のエラー文)
- GithubやStackOverflowにて,"CuDnnのバージョンを合わせろ"という議論を見つけたので,それに従う
やったこと
1. CuDnn7.4のバージョンアップ
これまでの経験から,TensorFlowのCUDA周りは,documentに従うべきと知っていたので,cuda 10.0 cudnn 7.4の関係は崩さない(ここが大きな間違いでした;;)ように,
cudnn7.4.1.5-1+cuda10.0 → cudnn7.4.2.24-1+cuda10.0
にしてみる.
nvidiaのリポジトリからcudnn7.4.2.24-1+cuda10.0を落としてきて,とりあえずぶちこむ.
xxx@xxx:~$ sudo apt install libcudnn7-dev=7.4.2.24-1+cuda10.0 libcudnn7=7.4.2.24-1+cuda10.0
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:
以下のパッケージには満たせない依存関係があります:
libcudnn7-dev : 依存: libcudnn7 (= 7.4.2.24-1+cuda10.0) しかし、7.6.5.32-1+cuda10.2 はインストールされようとしています
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。
当然のエラー.以前のが残っている.まずは,確認.
dpkg -l | grep cuda
ii cuda-10-0 10.0.130-1 amd64 CUDA 10.0 meta-package
ii cuda-command-line-tools-10-0 10.0.130-1 amd64 CUDA command-line tools
ii cuda-compiler-10-0 10.0.130-1 amd64 CUDA compiler
ii cuda-cublas-10-0 10.0.130-1 amd64 CUBLAS native runtime libraries
ii cuda-cublas-dev-10-0 10.0.130-1 amd64 CUBLAS native dev links, headers
ii cuda-cudart-10-0 10.0.130-1 amd64 CUDA Runtime native Libraries
ii cuda-cudart-dev-10-0 10.0.130-1 amd64 CUDA Runtime native dev links, headers
ii cuda-cufft-10-0 10.0.130-1 amd64 CUFFT native runtime libraries
ii cuda-cufft-dev-10-0 10.0.130-1 amd64 CUFFT native dev links, headers
ii cuda-cuobjdump-10-0 10.0.130-1 amd64 CUDA cuobjdump
ii cuda-cupti-10-0 10.0.130-1 amd64 CUDA profiling tools interface.
ii cuda-curand-10-0 10.0.130-1 amd64 CURAND native runtime libraries
ii cuda-curand-dev-10-0 10.0.130-1 amd64 CURAND native dev links, headers
ii cuda-cusolver-10-0 10.0.130-1 amd64 CUDA solver native runtime libraries
ii cuda-cusolver-dev-10-0 10.0.130-1 amd64 CUDA solver native dev links, headers
ii cuda-cusparse-10-0 10.0.130-1 amd64 CUSPARSE native runtime libraries
ii cuda-cusparse-dev-10-0 10.0.130-1 amd64 CUSPARSE native dev links, headers
ii cuda-demo-suite-10-0 10.0.130-1 amd64 Demo suite for CUDA
ii cuda-documentation-10-0 10.0.130-1 amd64 CUDA documentation
ii cuda-driver-dev-10-0 10.0.130-1 amd64 CUDA Driver native dev stub library
ii cuda-drivers 440.64.00-1 amd64 CUDA Driver meta-package
ii cuda-gdb-10-0 10.0.130-1 amd64 CUDA-GDB
ii cuda-gpu-library-advisor-10-0 10.0.130-1 amd64 CUDA GPU Library Advisor.
ii cuda-libraries-10-0 10.0.130-1 amd64 CUDA Libraries 10.0 meta-package
ii cuda-libraries-dev-10-0 10.0.130-1 amd64 CUDA Libraries 10.0 development meta-package
ii cuda-license-10-0 10.0.130-1 amd64 CUDA licenses
ii cuda-memcheck-10-0 10.0.130-1 amd64 CUDA-MEMCHECK
ii cuda-misc-headers-10-0 10.0.130-1 amd64 CUDA miscellaneous headers
ii cuda-npp-10-0 10.0.130-1 amd64 NPP native runtime libraries
ii cuda-npp-dev-10-0 10.0.130-1 amd64 NPP native dev links, headers
ii cuda-nsight-10-0 10.0.130-1 amd64 CUDA nsight
ii cuda-nsight-compute-10-0 10.0.130-1 amd64 NVIDIA Nsight Compute
ii cuda-nvcc-10-0 10.0.130-1 amd64 CUDA nvcc
ii cuda-nvdisasm-10-0 10.0.130-1 amd64 CUDA disassembler
ii cuda-nvgraph-10-0 10.0.130-1 amd64 NVGRAPH native runtime libraries
ii cuda-nvgraph-dev-10-0 10.0.130-1 amd64 NVGRAPH native dev links, headers
ii cuda-nvjpeg-10-0 10.0.130.1-1 amd64 NVJPEG native runtime libraries
ii cuda-nvjpeg-dev-10-0 10.0.130.1-1 amd64 NVJPEG native dev links, headers
ii cuda-nvml-dev-10-0 10.0.130-1 amd64 NVML native dev links, headers
ii cuda-nvprof-10-0 10.0.130-1 amd64 CUDA Profiler tools
ii cuda-nvprune-10-0 10.0.130-1 amd64 CUDA nvprune
ii cuda-nvrtc-10-0 10.0.130-1 amd64 NVRTC native runtime libraries
ii cuda-nvrtc-dev-10-0 10.0.130-1 amd64 NVRTC native dev links, headers
ii cuda-nvtx-10-0 10.0.130-1 amd64 NVIDIA Tools Extension
ii cuda-nvvp-10-0 10.0.130-1 amd64 CUDA nvvp
ii cuda-repo-ubuntu1804 10.0.130-1 amd64 cuda repository configuration files
ii cuda-runtime-10-0 10.0.130-1 amd64 CUDA Runtime 10.0 meta-package
ii cuda-samples-10-0 10.0.130-1 amd64 CUDA example applications
ii cuda-toolkit-10-0 10.0.130-1 amd64 CUDA Toolkit 10.0 meta-package
ii cuda-tools-10-0 10.0.130-1 amd64 CUDA Tools meta-package
ii cuda-visual-tools-10-0 10.0.130-1 amd64 CUDA visual tools
ii libcudnn7 7.4.1.5-1+cuda10.0 amd64 cuDNN runtime libraries
ii libcudnn7-dev 7.4.1.5-1+cuda10.0 amd64 cuDNN development libraries and headers
ii libnccl-dev 2.6.4-1+cuda10.0 amd64 NVIDIA Collectives Communication Library (NCCL) Development Files
ii libnccl2 2.6.4-1+cuda10.0 amd64 NVIDIA Collectives Communication Library (NCCL) Runtime
libcudnn7を削除.
sudo apt-get --purge remove libcudnn7*
改めて,
sudo apt install libcudnn7-dev=7.4.2.24-1+cuda10.0 libcudnn7=7.4.2.24-1+cuda10.0
インストールが完了し,コードを実行するも,やっぱり同じエラー...
2.CuDnn7.4 → CuDnn7.6
長い長い実行ログを見ると,こんな1文を発見.
Loaded runtime CuDNN library: 7.4.2 but source was compiled with: 7.6.0.
CuDNN library major and minor version needs to match or have higher minor version in case of CuDNN 7.0 or later version.
If using a binary install, upgrade your CuDNN library.
If building from sources, make sure the library loaded at runtime is compatible with the version specified during compile configuration.
おっ!!CuDNN 7.6.0でコンパイルしてるだと!?(それ以外の文はバージョンあげろとか,一致させろとかお決まりの内容)
でも,待てよ...TensorFlow GPUサポート テスト済みビルド設定に従わなくて,何回か痛い目を見たぞ.
まぁ,とりあえずやってみますか!!!
1.と同じ手順で,パッケージをremoveし,cudnn7.6.5.32-1+cuda10.0を再インストール.
sudo apt install libcudnn7-dev=7.6.5.32-1+cuda10.0 libcudnn7=7.6.5.32-1+cuda10.0
で,コードを実行...
2020-04-15 23:54:10.330338: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.0
2020-04-15 23:54:10.330384: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10.0
2020-04-15 23:54:10.330412: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10.0
2020-04-15 23:54:10.330453: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10.0
2020-04-15 23:54:10.330482: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10.0
2020-04-15 23:54:10.330524: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10.0
2020-04-15 23:54:10.330553: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-04-15 23:54:10.333274: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.0
All Success!!!
結論
テスト済みビルドのページはなかなか更新されないみたいなので,ちゃんとログにしたがって,バージョンを合わせましょう.
詳細な原因は分かり次第,記述していくつもりです.(するとは言ってない)
原因をご存知の方はお教えいただけると幸いです.
参考文献
- Ubuntu 18.04へのCUDAインストール方法
AWS - cuDNN初期化エラーが出てTensorFlowGPUの学習ができなくなったけど解決した話
- Error : Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above. #24828
- Failed to get convolution algorithm. This is probably because cuDNN failed to initialize,
note
ubuntu18.04.2以降使えるようになった
sudo ubuntu-drivers autoinstall
でGPU driverを入れると最新のCUDAバージョン(10.2 : 2020/04/15現在)がインストールされ,tensorflowのバージョンと合わないことがあります.
また,バージョンを合わせようとCUDAを再インストールするとGPU driverもインストールされ,driverが合わなくなる場合があります.
rebootする際には,十分にご注意ください.