Closed7

WSL2 での TensorFlow + NVIDIA 環境構築

高田 晴彦高田 晴彦

経緯

畳み込みニューラルによるスプラトゥーンのシーン分類モデルを、スプラトゥーン3向けに作り直すことにした。スプラトゥーン2の時代に作ったのでスプラトゥーン3では認識精度が良くない。

スプラトゥーン2時代の分類モデル作成の様子
https://qiita.com/tfandkusu/items/acbc0906046bb7b2b1db
https://qiita.com/tfandkusu/items/b8b498d60ddff3db4d50

当時は Google の AutoML を使っていたが、以下の理由からローカル環境で分類モデルを作成したい。

  1. AutoML の費用がかかる
  2. 対戦ステージがまだ増える可能性が高く何度か分類モデルを作り直したいが、そうなるとさらに費用がかかる
  3. 手元にゲーム用に購入した NVIDIA RTX 3080 搭載の Windows PC がある

TensorFlow + NVIDIA CUDA の環境構築は2017年から2019年にかけてよくやった内容だが、久しぶりに公式の説明通りに環境構築したらエラーになってしまったので手順を記録する。

https://www.tensorflow.org/install/pip?hl=ja#step-by-step_instructions

高田 晴彦高田 晴彦

CUDA 11.8 をインストールする

こちらの操作でインストールコマンドを得る。

wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run

インストールが完了したら、指示に従い環境変数を設定する。

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-11.8/

Please make sure that
 -   PATH includes /usr/local/cuda-11.8/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-11.8/lib64, or, add /usr/local/cuda-11.8/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.8/bin
export PATH=/usr/local/cuda-11.8/bin:$PATH
# すでに /etc/ld.so.conf.d/cuda-11-8.conf があったため
sudo ldconfig

インストールの確認

nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0
高田 晴彦高田 晴彦

cuDNN 8.7 をインストールする

インストールファイルをダウンロード

NVIDIA Developer のユーザアカウントを作り、ログインする必要がある。
https://developer.nvidia.com/

  1. ログイン状態で https://developer.nvidia.com/cudnn にアクセスし Download CuDNN ボタンを押す。
  2. I Agree To the Terms of the cuDNN Software License Agreement にチェックをつける
  3. Archived cuDNN Releases をクリック
  4. Download cuDNN v8.7.0 (November 28th, 2022), for CUDA 11.x をクリック
  5. Local Installer for Linux x86_64 (Tar) をクリック

ライブラリの設置

tar -xvf cudnn-linux-x86_64-8.7.0.84_cuda11-archive.tar.xz

展開したフォルダを /usr/local/cudnn-8.7 に設置

cp -r cudnn-linux-x86_64-8.7.0.84_cuda11-archive/ /usr/local/cudnn-8.7

/etc/ld.so.conf.d//cudnn-8.7.conf を作成

/usr/local/cudnn-8.7/lib/

ldconfig コマンド実行

sudo ldconfig
高田 晴彦高田 晴彦

TensorFlow から GPU が使えるか確認する

python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
略
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
高田 晴彦高田 晴彦

手書き数字認識 MNISTデータベースの分類モデルを学習できるか確認する

初心者のための TensorFlow 2.0 入門 から Python コードをコピペして動かす

import tensorflow as tf

mnist = tf.keras.datasets.mnist
# データセットを読み込む
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
# 機械学習モデルを構築する
model = tf.keras.models.Sequential(
    [
        tf.keras.layers.Flatten(input_shape=(28, 28)),
        tf.keras.layers.Dense(128, activation="relu"),
        tf.keras.layers.Dropout(0.2),
        tf.keras.layers.Dense(10),
    ]
)
# モデルのコンパイル
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer="adam", loss=loss_fn, metrics=["accuracy"])
# モデルのトレーニング
model.fit(x_train, y_train, epochs=5)
# モデルの評価
model.evaluate(x_test, y_test, verbose=2)

実行結果

略
2023-10-03 23:05:15.443668: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1886] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 7365 MB memory:  -> device: 0, name: NVIDIA GeForce RTX 3080, pci bus id: 0000:01:00.0, compute capability: 8.6
略
1875/1875 [==============================] - 6s 2ms/step - loss: 0.2971 - accuracy: 0.9122
Epoch 2/5
1875/1875 [==============================] - 4s 2ms/step - loss: 0.1455 - accuracy: 0.9568
Epoch 3/5
1875/1875 [==============================] - 4s 2ms/step - loss: 0.1107 - accuracy: 0.9663
Epoch 4/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.0910 - accuracy: 0.9724
Epoch 5/5
1875/1875 [==============================] - 5s 2ms/step - loss: 0.0766 - accuracy: 0.9760
313/313 - 1s - loss: 0.0850 - accuracy: 0.9748 - 1s/epoch - 4ms/step

NVIDIA の GPU を使って分類モデルの作成と推論ができた。

このスクラップは2023/10/03にクローズされました