Tensorflow「2.16」: WSL2環境下でGPUを使う方法(その1)

しょくぶつ(^ ^)です。

機械学習に使っているPythonのライブラリ Tensorflow  のバージョンを、2.8 から 2.16 に変えることにしました。
理由は、下記のような機能アップ (^ ^) とか、古い書式切り捨て感 (;;) とか、あるからです。
たとえば・・・

  • Tesorflow  2.16からKeras3が使われています。
    Tesorflow 2.15まで使われていたKeras2ではバックエンドはTensorflowだけでした。keras3ではフレームワーク(深層学習ライブラリ)をバックエンドとして切り替え、つまり、TensorflowとPyTorchとJAXを簡単に切り替えられます。

  • 学習時のOptimizer(※)の書式が古いとすごく叱られる。
    (※ニューラルネットワーク学習時の最適化アルゴリズム)
    learning_rateとかDecayとかの書式が古いと、TF2.16では「Argument decay is no longer supported and will be ignored.」と冷たく突き放すWarningが出ます。
    学習することはするのですが、古いTF(たとえばTF2.8)では読みこめない学習結果となります。
    回避方法はあって、例えばoptimizers.SGD は optimizers.legacy.SGDと書き換えると古いTFで読み込みOKとなりますが、legacyというのが潮時感あり。

  • 書式を新しくすると学習結果ファイルサイズが小さくなることがあります。
    たとえば38Mbyteだったものが19 Mbyteになりました。

のんきなしょくぶつ(^ ^) ですが、この変化についていけば今後書いたブログは2~3年はお役に立つものになるかなと思い、頑張っています。

さて、GPUを使うと学習データ作成が劇的に速くなるのはご存じの通りでして、WSL2環境下のTensorflowでのGPUの使い方としては、私は次のサイト様を一番参考にしています。
Miniconda上のTensorflow と WSL2+Miniconda上のTensorflow のインストールとパフォーマンスの比較 #Windows - Qiita

このサイト様のTensorflowのバージョンは 2.10 です。
今回使いたいのは
 Tensorflow 2.16
ですので、手順を改めてまとめることにしました。

この記事では
    CUDA, cuDNN, Miniconda(Python仮想環境), Python, Tensorflowを
    一気にインストール
します。また、
    TensorflowでGPUがちゃんと使えているか確認
も行います。そして
    本ブログでよく使っているSpyder、その日本語化を整備
します。

ただし正直に言うと、何度やってもいまだに自信ないです。
バージョン組み合わせ問題が、ほんっっとうに・・・ その筋な世界です。

CUDA, cuDNN, Miniconda, Python, Tensorflowを一気にインストール

●Tensorflow, python,.cuda, cuDNNのバージョン組み合わせの確認

GPU使用環境を初めて扱う方は大変おどろくと思うのですが
Tensorflow, Python, CUDA, cuDNNはきちっとバージョンを合わせる必要があるのです。(ただしそうじゃないこともあります)
PC設定の定番である「最新版をインストールしましょう」はここでは通じないのです。
そんな、その筋な世界に足を踏み込んでしまったと覚悟しましょう。
では逝きますね。

まずは下記URLを確認します。
ソースからのビルド  |  TensorFlow
すると下記のようにTensorflowのバージョン2.16.1を使うには、
「Pythonは3.9以上」「クドン (cuDNN)は8.9」「CUDAは 12.3」が必要という意味の記載があります。

注: ‘24/8月現在。

今回はPythonは 3.12 を使います。
「クドン」とは cuDNN のことです。 そう読むのね。
いままで シー ユー ディー エヌ エヌ って読んでました。

●自分のPC機材でCUDAが使えるか確認

今回使いたいTensorflow2.16 にて、あなたがお使いの環境(あなたのパソコン)でCUDAが使えるか確認します。
ここで、
  「CUDAが使える」→ 次の手順に進めます。
  「CUDAが使えない」→ 残念ながらあなたの環境ではTF2.16でGPUは使えません。
     手順を飛ばして「miniconda環境を整える」に進んで下さい。
となります。
丁寧に確認しましょう。

1 下記URLのWikipediaを開きます。

CUDA - Wikipedia

2 その中の表「Compute Capability, GPU semiconductors and Nvidia GPU board products」にて、自分のGPUの「Compute capability (version)」と「Micro-architecture」を調べます。

例: RTX 2060だと、「7.5」「Turing」と分かります。(‘24/8現在)
~~~ 前略 ~~~

~~~ 中略 ~~~

3. その上にある表「Compute Capability (CUDA SDK support vs. Microarchitecture)」にて、使用可能なCUDAを調べる。(緑色の部分)

例: 「7.5」「Turing」だと、CUDA 10.0-12.5だと分る。(‘24/8現在)

4. 使用可能な範囲に、前の手順で調べた「CUDA 12.3」が入っているでしょうか?

入っていれば、「CUDAが使える」ことになります。

入っていなければ、残念ながら、Tensorflow2.16では「CUDAが使えない」ことになります。

●WSL2上にCUDAインストール ※ 「CUDAが使える」場合。

WSL2上にCUDA12.3をインストールします。

※    既に別バージョンのCUDAをインストール済みの方
CUDA12.3と共存できます。 また次のコマンドでCUDAの切り替えもできます。

    sudo update-alternatives --config cuda

次にGoogleで “cuda 12.3” と検索して、” CUDA Toolkit 12.3 Downloads”のページを開きます。
 CUDA Toolkit 12.3 Downloads | NVIDIA Developer (‘24/8月現在)
下の画像のように項目を選択します。

すると画面下に指示が出ます。 その通りにコマンドを実行します。
たとえば下記のコマンドです。(‘24/8月現在)

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.3.0/local_installers/cuda-repo-wsl-ubuntu-12-3-local_12.3.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-3-local_12.3.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-3-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-3

●WSL2上にcuDNNをインストール ※ 「CUDAが使える」場合。

次のサイト様の通りです。
なお、cuDNNもCUDAと同じく別バージョンと共存できます。(方法は後で記載します)

Miniconda上のTensorflow と WSL2+Miniconda上のTensorflow のインストールとパフォーマンスの比較 #Windows - Qiita

例として、この手順を書き下します。

cuDNNインストール手順 1. バージョンの確認

今回必要なのは「cuDNNは8.9」でしたよね。 ‘24/8月現在の最新版は9.3.0ですが、念のためバージョンを合わせます。 また今回は使いませんが、Pytorchが‘24/8月現在はcuDNN 8.9までしか対応していません。 WSL2上の他のアプリに影響させないためにも、バージョンは8.9にとどめることにしました。 そこでcuDNNの8.9の最終版の8.9.7、また今回はubuntu22.04環境用をインストールします。

cuDNNインストール手順 2.ダウンロード

下記リンクの中の Download cuDNN v8.9.7 (December 5th, 2023), for CUDA 12.x をクリックします。
cuDNN Archive | NVIDIA Developer
そして、
Download cuDNN v8.9.7 (December 5th, 2023), for CUDA 12.x
をダウンロードします。

ただし、この際にユーザー登録を求められてしまいます。 面倒くさいですが、仕方ないです。

cuDNNインストール手順 3. 次のコマンドを実行
$ sudo dpkg -i cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb
$ sudo cp /var/cudnn-local-repo-ubuntu2204-8.9.7.29/cudnn-local-08A7D361-keyring.gpg /usr/share/keyrings/
$ sudo apt-get update
$ sudo apt-get -y install libcudnn8 libcudnn8-dev libcudnn8-samples</code></pre>
既に別バージョンのcuDNNをインストール済みの方

次のコマンドでcuDNNを切り替えもできるそうです。

sudo update-alternatives --config libcudnn

私は試していませんが下記サイト様はうまくいったとのことです。
PyTorchとGPU/CUDA周りの環境構築のバージョン解決 #Ubuntu - Qiita

●CUDA, cuDNNがちゃんとインストールできているか?  ※ 「CUDAが使える」場合。

バージョンの確認コマンドは次の通りです。

nvcc --version

今回は『Tensorflow2.16.1 を使うために、cuDNN 8.9, CUDA 12.3が必要』です。

  1. それでもダメならば、次のコマンドで12.3の優先度を上げる
    sudo update-alternatives --config cuda

●miniconda環境を整える

次の記事が一番正しく最新版をインストールできます。
WSL2, conda, MMDetection v3.0.0 環境構築 (zenn.dev)

以下、その抜粋です。

1. Minicondaのインストール(WSL2のUbuntu上)

    詳細は https://www.macnica.co.jp/business/semiconductor/articles/qualcomm/142362/ を参照。

    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
    bash Miniconda3-latest-Linux-x86_64.sh

    何度か質問ありますが、全てenterでOKです。

    rm  Miniconda3-latest-Linux-x86_64.sh

    ※なお、pyenvをインストールしていれば次の方法でも可能。

    Stable Diffusion Web UI|Ubuntu 22.04で のインストール - ヴェズルフェルニルの研究ノート (ketus-ix.work)

    pyenv install miniconda3-latest
    pyenv global miniconda3-latest
    2. Minicondaのチャンネル指定変更(WSL2のUbuntu上)
    conda config --remove channels defaults
    conda config --add channels conda-forge

    ●仮想環境の作成

    conda create -n py312-cnn python=3.12

    ●アクティベート

    conda activate py312-cnn

    ●matplotlib, scikit-learn, pandasのライブラリをcondaでインストール

     これらのライブラリを絶対使わないという方は飛ばしてもOKです。

    conda install matplotlib scikit-learn pandas

    ※この時点でnumpy(2.1.0)もインストールされる

    ●Tensorflow, OpenCVのライブラリを pip でインストール。

    condaではダメです。
    pipです。
    またOpenCVは使わない方は ”opencv-python” は削除してOKです。

    pip install tensorflow==2.16.1 opencv-python

    ※    numpy2.1.0は自動的にuninstallされ、1.26.4(‘24/8月時点)にダウングレードされます。



    このあとは、

    • TensorflowでGPUがちゃんと使えているか確認
    • Spyderとその日本語化(文字化けなし。キーアサインもバッチリ!!) の整備

    となります。

    次回に続く。

    プロフィール
    この記事を書いた人
    しょくぶつ (^ ^)

    機械系の技術者です。学会発表13、論文掲載6(和・英)。プログラミング歴40年(つまり8bit世代ですね)。ゲーム歴40年(ファミコン世代ですね)。
    お問い合わせは下記のメールアドレスにお寄せください。
    plantsmilehatena@gmail.com

    しょくぶつ (^ ^)をフォローする
    python
    しょくぶつ (^ ^)をフォローする
    タイトルとURLをコピーしました