セットアップ (GPU編 NVIDIA)

CUDAやらCUDNN,GPU周りのインストールです.

目次

インストール後のベンチマークテストはこちら:

Windows native環境, (Tensorflow 2.10まで)

VSCodeのインストール,PythonのインストールはCPUの場合と同じ.
venvの作成時に,CPU版とは異なる名前を付ける.

用意するもの(必ず下記のバージョンで! この組み合わせ重要!)

  1. NVIDIA GPU ドライバ
  2. NVIDIA CUDA 11.8
  3. NVIDIA cuDNN 8.8

グラフィクスドライバ

NVIDIA グラフィクスドライバー 535.98 を使用. 新しめのものであればたぶんOK.

CUDAツールキットのインストール

ユーザ名に全角文字が含まれている場合

(日本語ユーザ名を使用していない場合は以下のtemp設定は不要)
日本語ユーザー名だといろいろトラブルのもとなので,TEMPフォルダを作成して環境変数に登録しておく.

コマンドプロンプトを起動し,

mkdir C:\TEMP
call powershell -command "[System.Environment]::SetEnvironmentVariable(\"TEMP\", \"C:\TEMP\", \"User\")"

を実行しておく.できれば再起動したほうが良い.

cudaのバージョンは 11.8.0 ,ファイル名は cuda_11.8.0_522.06_windows.exe を使用.
NVIDIAのCUDA Toolkit Archiveサイトからダウンロード.
試行錯誤するかもしれないので,network版ではなく,ローカルのインストール版(3GB)を持っておいたほうが良い.

ここでは最低限のToolKitのみインストールしていますが,必要であればフルインストールで構いません. また,DisplayDriverも同時にインストールできるようですが,この動画のように既存のドライバのほうが新しい場合はチェックを外す.

1.instcuda1.png 1.instcuda2.png
CUDAインストール画面.ファイルを展開してインストール画面が出るまでに数分以上かかる場合がある

確認:インストーラが終了したら,コマンドプロンプトを開いて

> where nvcc

で,パスを確認.
インストールとパス設定が正しければ nvcc.exes のフルパスが表示される.

cuDNN のインストール

cuDNNは,version 8.8 を使用する.

CUDNNのアーカイブページからユーザー登録をしたうえでログインし, cuDNN8.8.0 をダウンロードする.
(すでにNVIDIAのアカウントを持っている場合は,それでログイン)
ここでインストールしたファイル名は cudnn-windows-x86_64-8.8.0.121_cuda11-archive.zip とする.
(8.8.1でも良いかもしれない.)

ダウンロードした.zip を展開,展開したフォルダーの中身のbin, include, libなどを全てを cuda をインストールしたフォルダ (通常は C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8)に上書きコピー(移動でもOK)する.

環境変数 CUDNN_PATH の設定.

コマンドプロンプトを管理者として開き, 次のコマンドを実行することにより設定ができる.

>  call powershell -command "[System.Environment]::SetEnvironmentVariable(\"CUDNN_PATH\", \"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\", \"Machine\")"

または,コントロールパネルから CUDNN_PATH という名前の環境変数を,システム環境変数として設定する.

確認:パスが通っていることを確認

>  where cudnn64_8.dll

ZLIB DLL のインストール

cudaのbin (C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin) に, zlibwapi.dll をダウンロードして置く.

方法1

コマンドプロンプトを管理者として実行,次のコマンドを順に実行.

>  cd "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin"
>  curl -O http://www.winimage.com/zLibDll/zlib123dllx64.zip
>  call powershell -command "Expand-Archive -Path zlib123dllx64.zip"
>  copy zlib123dllx64\dll_x64\zlibwapi.dll .

方法2

http://www.winimage.com/zLibDll/zlib123dllx64.zip から .zip ファイルをダウンロード,展開.
この中の zlib123dllx64\dll_x64\zlibwapi.dll を, C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin にコピー.

VSCodeのインストール

VSCodeのインストールを参照

Pythonのインストール

Python 3.10 系を使用.(まだ 3.11 系ではうまくインストールできないかも)
方法はPythonのインストール(CPU版)を参照

Pythonのvenvの設定

スタートメニューの[Windows System][Command Prompt]を起動し, 以下のようにvenv用のディレクトリを作成して,そこに移動する.

すでにvenvフォルダが作成済の場合は,以下の mkdir はスキップ.

> cd c:\users\tatsuya   <-ディレクトリを作成する場所へ移動
> mkdir venv
> cd venv

名前は任意に決めてよい.ここでは cpu ではなく gpu とした.

> py -3.10 -m venv py310-gpu
VSCodeVENV.png
VSCodeにPythonのvenvフォルダを設定する.

TensorFlow 2.10のインストール

Windows native環境(つまり,WSLではなく普通のWindows上)では,GPUサポートは Tensorflow 2.10 まで. それ以降はCPUのみ.
より新しい Tensorflow を使用したければ,wsl(Windows subsystem for Linux)を使用する必要がある.

スタートメニューの[Windows System][Command Prompt]を起動し, さきほど作成した Python venv ディレクトリに移動.

>  cd c:\users\tatsuya\venv

GPU用に作成したvenv環境をactivateする.
コマンドプロンプトの先頭に環境名が表示される.
以下,このようにvenvをactivateした状態でパッケージをインストールする.

c:\Users\tatsuya\venv\> py310-gpu\Scripts\activate
(py310-gpu) c:\Users\tatsuya\venv\>

安全のため,一旦,関連しそうなパッケージ類を全削除しておく.
初回のインストールであれば不要.

python -m pip uninstall -y tensorflow tensorflow-cpu tensorflow-gpu tensorflow-intel tensorflow-text tensorflow-estimator tf-models-official tf_slim tensorflow_datasets tensorflow-hub keras keras-tuner keras-visualizer

TensorFlow GPU 版 2.10, 関連ソフトウェアのインストール バージョン指定が重要!

>  python -m pip install -U tensorflow==2.10.1

最初から色々入れておきたければ,以下のようにまとめてインストール

>  python -m pip install -U tensorflow==2.10.1 tf_slim tensorflow_datasets tensorflow-hub keras keras-tuner keras-visualizer

してもよい.

以下,いろいろinstall.(CPU版と同じ) >

>  pip install -U pip
>  pip install numpy scipy matplotlib pandas imageio scikit-learn opencv-python python-dateutil jupyter notebook cmake pyyaml h5py pydot-ng keras pillow

以下はgitのインストールとログインが必要.

>  python -m pip install git+https://github.com/tensorflow/docs
>  python -m pip install git+https://github.com/tensorflow/examples.git
>  python -m pip install git+https://www.github.com/keras-team/keras-contrib.git

version確認

Tensorflow versionの 確認

venvがactivateされている状態で,

(py310-gpu) > python -c "import tensorflow as tf; print( tf.__version__ )"
(py310-gpu) > python -c "import keras; print( keras.__version__ )"

2.10.1 などのversionが表示されればOK.

GPU が認識できているかの確認

(py310-gpu) > python -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"

device_type: "GPU" が表示されていればOK

一通りインストールが終わったら,実行テスト

WSL Ubuntu 22.04 へのインストール

WSL と Ubuntu22.04 のインストールまではCPU版と同じ.

CUDAのインストール

https://docs.nvidia.com/cuda/wsl-user-guide/index.html#cuda-support-for-wsl2 を参考に,Suuport on wsl2 をインストール

$  sudo apt-key del 7fa2af80
(WARNING:...deprecatedが出るかもしれない)

$  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/11.8.0/local_installers/cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb

$  sudo dpkg -i cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb

$  sudo cp /var/cuda-repo-wsl-ubuntu-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/

$  sudo apt-get update
$  sudo apt-get -y install cuda

nvccが起動できるか,そのバージョンを確認

$  /usr/local/cuda/bin/nvcc --version

CUDNN 8.8.1 のインストール

https://developer.nvidia.com/rdp/cudnn-downloadから
Download cuDNN v8.8.1 (March 8th, 2023) for CUDA 11.x内の
Local Installer for Ubuntu22.04 x86_64 (Deb)

をダウンロード(要ログイン).
Windows上の自分の「ダウンロード」フォルダに保存されたとする.

$  sudo dpkg -i /mnt/c/Users/(ここに自分のユーザ名)/Downloads/cudnn-local-repo-ubuntu2204-8.8.1.3_1.0-1_amd64.deb

$  sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/

$  sudo apt update
$  sudo apt -y install libcudnn8 libcudnn8-dev libcudnn8-samples

ちょっと動作テスト

$  sudo apt install libfreeimage3 libfreeimage-dev
$  cp -r /usr/src/cudnn_samples_v8/ ~/
$  cd ~/cudnn_samples_v8/mnistCUDNN/
$  make clean
$  make
$  ./mnistCUDNN

Pythonのインストール

$  sudo apt install -y python3-pip
$  sudo apt install -y python3.10-venv
$  sudo apt install -y python3.11 python3.11-venv

venvの設定

$  mkdir ~/venv
$  cd ~/venv
$  python3.11 -m venv py311
$  python3.10 -m venv py310

Tensorflowのインストール

$  source ~/venv/py311/bin/activate
(py311) $  pip install tensorflow

デバイスの確認

$  python -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"

vscodeの設定

拡張機能でWSLをインストール.
WSL ターゲットに設定してUbuntu-22.04に接続
WSL環境に pythonパッケージをインストール.
python.venvPath に ~/venv を設定
VSCodeを再起動.
ソースファイルなどは,フォルダーを開く際に「Ubuntu-22.04 /home/username」の場所に保存すればよい. コマンドパレットでInterpreterをvenv上のPythonに設定し,何かサンプルを実行.

小技いろいろ

GPUのON/OFF

kerasのimport前に

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"    # -1 でGPUなしで実行
os.environ["TF_ENABLE_ONEDNN_OPTS"] = "1"    # CPUIでoneDNN を有効化する

GPUの個数や情報を表示

import tensorflow as tf

gpus = tf.config.list_physical_devices('GPU')
print("# GPUs :", len(gpus))

if gpus:
  try:
    tf.config.set_visible_devices(gpus[0], 'GPU')  # Use the first GPU
    logical_gpus = tf.config.list_logical_devices('GPU')
    print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPU")

  except RuntimeError as e:
    print(e)

システム環境変数 TF_FORCE_GPU_ALLOW_GROWTH にtrue を設定

Windows で,コマンドプロンプトを管理者として実行(Run As Administrator),次のコマンドを実行

call powershell -command "[System.Environment]::SetEnvironmentVariable(\"TF_FORCE_GPU_ALLOW_GROWTH\", \"true\", \"Machine\")"