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 で動作させたいと思います。


  • Numpy を GPU で動作させる に進む
  • TensorFlow インストール確認Ⅱ に戻る
  • TensorFlow インストール確認Ⅰ に戻る
  • TensorFlow インストール版数確認 に戻る
  • cuDNN インストール確認 に戻る
  • cuDNN 概要 に戻る
  • CUDA Toolkit のインストール に戻る
  • WSL2 Ubuntu Python GPU 環境 に戻る
  • WSL2 Ubuntu Python 概要 に戻る
  • 70VPS に戻る