Windows11 WSL2 Ubuntu Python
TensorFlow-GPU, cuDNN, CUDA バージョン対応
Tensorflow-GPU と CUDA, CuDNN のバージョン対応がかなり面倒です。
今回私は Tensorflow-GPU と CUDA, CuDNN のバージョン は最新版をルート領域にインストールしました。
でも、Tensorflow GPU 対応の最新版は CUDA, CuDNN の最新版に対応できていないのです。
どうなるかこれから説明していきます。
私の環境は
Python 3.10.6
tensorflow 2.12.0 gpu_py310hfda07e1_0
cuda 12.2
cudnn 8.9.3.28
現在(2023/7/31)の所すべてほぼ最新です。
CuDNN のバージョン確認
CuDNN のバージョン確認はコツがいります。
dpkg -l
インストールした deb パッケージの情報を表示
grep "cudnn"
cudnn の文字列の文字列のある行を表示
を利用します。
yamada@yama:~$ dpkg -l | grep "cudnn" ii cudnn-local-repo-ubuntu2204-8.9.3.28 1.0-1 amd64 cudnn-local repository configuration files ii libcudnn8 8.9.3.28-1+cuda12.1 amd64 cuDNN runtime libraries ii libcudnn8-dev 8.9.3.28-1+cuda12.1 amd64 cuDNN development libraries and headers ii libcudnn8-samples 8.9.3.28-1+cuda12.1 amd64 cuDNN samples
Tensorflow GPU, CUDA, CuDNN バージョン
Tensorflow GPU, CUDA, CuDNN の対応バージョン表が
Tested build configurations Linux
にあります。
これを見ると
GPU Version Python version Compiler Build tools cuDNN CUDA tensorflow-2.13.0 3.8-3.11 Clang 16.0.0 Bazel 5.3.0 8.6 11.8 tensorflow-2.12.0 3.8-3.11 GCC 9.3.1 Bazel 5.3.0 8.6 11.8 tensorflow-2.11.0 3.7-3.10 GCC 9.3.1 Bazel 5.3.0 8.1 11.2 ・・・・・・・・
となっています。
一方私のインストールしたバージョンはほぼ最新で
tensorflow-Version Python-v cuDNN CUDA tensorflow-2.12.0 3.10.6 8.9.3.28 12.2
でした。よって
cuDNN 8.9、CUDA 12.2 は
cuDNN 8.6、CUDA 11.8 に
ダウングレードする必要があるようです。
でも私はダウングレードしていません。
CuDNN/CUDA のダウングレード
ここまでの経緯より
tensorflow を実行するとコメントが出ます
でも
INFO メッセージが出ない
ように
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='1'
を設定すれば、私が作成した tensorflow パッケージを使用したファイルでは
正常に動作しています。
とりあえず
tensorflow が cuDNN 8.9、CUDA 12.2 に対応されるのを待ち
その後 tensorflow の新バージョンを入れることにしていたのですが ・・・。
conda 環境に CUDA と cuDNN をインストール概要
ここまで CUDA と cuDNN は最新版をルート領域にインストールしました。
これはこのままにして、ダウングレードした cuDNN 8.6、CUDA 11.8 を
conda 環境にインストールすれば良いのではないかと言う考えにたどり着きました。
WindowsのWSL上でGPUのTensorFlow環境構築
をよく見ると conda 環境に CUDA と cuDNN をインストールする方法も書いてありました。
また
conda installしたcuda-toolkitとcuDNNでTensorFlowを動かす
も参考になりました。
conda 仮想環境 CUDA 11.8 探索
conda 仮想環境にインストールできる CUDA 11.8 を探します。
yamada@yama:~$ conda search -c conda-forge cudatoolkit Loading channels: done # Name Version Build Channel cudatoolkit 9.0 h13b8566_0 pkgs/main cudatoolkit 9.2 0 pkgs/main cudatoolkit 9.2.148 h33e3169_12 conda-forge cudatoolkit 9.2.148 h60dc4a4_10 conda-forge ・・・・・・・・ cudatoolkit 11.7.0 hd8887f6_10 conda-forge cudatoolkit 11.7.0 hd8887f6_11 conda-forge cudatoolkit 11.7.1 h4bc3d14_12 conda-forge cudatoolkit 11.8.0 h37601d7_10 conda-forge cudatoolkit 11.8.0 h37601d7_11 conda-forge cudatoolkit 11.8.0 h4ba93d1_12 conda-forge cudatoolkit 11.8.0 h6a678d5_0 pkgs/main
cudatoolkit 11.8.0
がありました。
これを conda 仮想環境にインストールしてみます。
conda 仮想環境 cuDNN 8.6 探索
conda 仮想環境にインストールできる cuDNN 8.6 を探します。
yamada@yama:~$ conda search -c conda-forge cudnn Loading channels: done # Name Version Build Channel cudnn 7.0.5 cuda8.0_0 pkgs/main cudnn 7.1.2 cuda9.0_0 pkgs/main ・・・・・・・・ cudnn 8.4.0.27 hed8a83a_0 conda-forge cudnn 8.4.0.27 hed8a83a_1 conda-forge cudnn 8.4.1.50 hed8a83a_0 conda-forge cudnn 8.8.0.121 h0800d71_0 conda-forge cudnn 8.8.0.121 h0800d71_1 conda-forge cudnn 8.8.0.121 h459966d_0 conda-forge cudnn 8.8.0.121 h459966d_1 conda-forge cudnn 8.9.2.26 cuda11_0 pkgs/main
cuDNN 8.6 がありません。
仕方がないので cuDNN 8.6 を conda 仮想環境にインストールするのは中止としました。
ルート領域に入れた cuDNN 8.9.3.28 を活用します。
conda 仮想環境に CUDA 11.8 インストール
yamada@yama:~$ conda update conda
yamada@yama:~$ conda install -c conda-forge cudatoolkit=11.8
で CUDA 11.8 インストールを試みました。
30分程時間がかかてインストール準備ができましたが
残念ながら
tensorflow 2.12.0-gpu_py310hfda07e1_0
--> 2.12.0-mkl_py310hc7ea715_0
にダウングレード gpu 版が cpu 版になるとのインフォメーションが出たため
中止しました。
conda 仮想環境には適切な CUDA/cuDNN がある?
いろいろ CUDA/cuDNN をダウングレードする方法を探って見ましたが良い方法が見つかりませんでした。
調べているうちに
conda install のみでTensorFlowとGPU環境(CUDA、cuDNN)を構築する
を見つけました。
これによると、
conda install tensorflow=2.8.2=gpu_py39hc0c9373_0
または
conda install tensorflow=2.8.*=gpu_*
のようにビルドを指定すれば cudatoolkit と cudnn が付属した tensorflow が入手できる
と書いてあるのです。
私は、
yamada@yama:~$ conda install tensorflow=2.12.0=gpu_py310hfda07e1_0
で TensorFlow をインストールしました。
ならば、適切な cudatoolkit と cudnn が conda 仮想環境に入っているはず、
早速
$ conda list
で確認してみました。
yamada@yama:~$ conda list # packages in environment at /home/yamada/miniconda3: # # Name Version Build Channel _libgcc_mutex 0.1 conda_forge conda-forge _openmp_mutex 4.5 2_kmp_llvm conda-forge _tflow_select 2.1.0 gpu ・・・・・・・・・・・・・・・・ ・・・・・・・ ・・・・・・・・・ cudatoolkit 11.3.1 h2bc3f7f_2 cudnn 8.2.1 cuda11.3_0 cupti 11.3.1 0 ・・・・・・・・・・・・・・・・ ・・・・・・・ ・・・・・・・・・ jsonpointer 2.1 pyhd3eb1b0_0 keras 2.12.0 py310h06a4308_0 keras-preprocessing 1.1.2 pyhd3eb1b0_0 ・・・・・・・・・・・・・・・・ ・・・・・・・ ・・・・・・・・・ matplotlib 3.7.2 py310hff52083_0 conda-forge matplotlib-base 3.7.2 py310hf38f957_0 conda-forge mkl 2023.1.0 h6d00ec8_46342 mkl-service 2.4.0 py310h5eee18b_1 mkl_fft 1.3.6 py310h1128e8f_1 mkl_random 1.2.2 py310h1128e8f_1 mplfinance 0.12.9b7 pyhd8ed1ab_0 conda-forge multidict 6.0.2 py310h5eee18b_0 munkres 1.1.4 py_0 ncurses 6.4 h6a678d5_0 nspr 4.35 h6a678d5_0 nss 3.89.1 h6a678d5_0 numexpr 2.8.4 py310h85018f9_1 numpy 1.23.5 py310h5f9d8c6_1 numpy-base 1.23.5 py310hb5e798b_1 ・・・・・・・・・・・・・・・・ ・・・・・・・ ・・・・・・・・・ python 3.10.10 h7a1cb2a_2 python-dateutil 2.8.2 pyhd3eb1b0_0 python-flatbuffers 2.0 pyhd3eb1b0_0 python_abi 3.10 2_cp310 conda-forge ・・・・・・・・・・・・・・・・ ・・・・・・・ ・・・・・・・・・ tensorboard 2.12.1 py310h06a4308_0 tensorboard-data-server 0.7.0 py310h52d8a92_0 tensorboard-plugin-wit 1.8.1 py310h06a4308_0 tensorflow 2.12.0 gpu_py310hfda07e1_0 tensorflow-base 2.12.0 gpu_py310h24d65da_0 tensorflow-estimator 2.12.0 py310h06a4308_0 ・・・・・・・・・・・・・・・・ ・・・・・・・ ・・・・・・・・・
ダウングレードされた
cudatoolkit 11.3.1 h2bc3f7f_2
cudnn 8.2.1 cuda11.3_0
が入っていました。
これまでの右往左往は何だったのだろう!
やれやれ!
TensorFlow-GPU, cuDNN, CUDA バージョン対応について補足しました。
引き続き Numpy を GPU で動作させたいと思います。