Windows上で深層機械学習のNVIDIA GPUを使用した環境構築するも、なぜかうまく動かない事が多かったのでしっかりと基本を抑える為にまとめてみる。
環境
Windows10 Pro 21H2
NVIDIA GeForce GTX 1060 6GB
環境構築の方針
Windows10 21H2でWSL2からGPUを使用できるようになったので、基本はDockerで環境構築を行う。
深層学習用のライブラリは、依存しているライブラリの数も多くそれらを切り替える環境構築するよりはDocker上で環境構築するのが良いだろう。
NVIDIAのWSL関係のドキュメントは以下
https://docs.nvidia.com/cuda/wsl-user-guide/index.html
NVIDIA Driver
NVIDIAドライバはホストOS(すなわちWindows10)にインストールする。
上記からダウンロードするべしとなっているが、2022年1月現在上記でダウンロードされるドライバのバージョンは510.06。
GeForce Experience上では511.23にアップデートできるようになっているがアップデートして良いのかわからず。
一応ドキュメントに従ってアップデートをせずに510.06を使用する事とする。
ちなみにNVIDIAのドライバはGameReadyドライバとStudioドライバの2種類あるが、上記からダウンロードできたのはGameReadyドライバだった。
NVIDIA CUDA
NVIDAが開発したGPUプログラム開発環境。画像編集ソフトや動画編集ソフトで使用する事もあるのでWindowsにインストールしている人も多いだろう。
今回はDocker上に開発環境を構築するのでWindows上にインストールするのは必須では無い。
NVIDIA cuDNN
NVIDIA CUDA Deep Neural Networkの略。ディープ ニューラル ネットワークでの使用を目的としたGPUで高速化されたライブラリ。
深層機械学習のライブラリではGPUを使用する際に
cuDNNを依存している事がある。
こちらもDocker上に開発環境を構築するのでWindows上にインストールするのは必須では無い。
インストールと設定
WSL2のインストールと設定
マイクロソフトから丁寧なドキュメントが公開されている。
https://docs.microsoft.com/ja-jp/windows/wsl/install
ちょっと古いセットアップ方法とかだと、様々ダウンロードしたりとあったけど現在はコマンド一発でインストール可能。素晴らしい。
wsl --install
WSL2の開発に必要な情報は以下にまとめられている。
https://docs.microsoft.com/ja-jp/windows/wsl/setup/environment#set-up-your-linux-username-and-password
Docker Desktop for Windowsのインストールと設定
以下からダウンロード
https://www.docker.com/products/docker-desktop
インストーラのConfiguration画面では「 Install required Windows components for WSL 2」の選択を忘れずに。
インストール後の設定画面
- Use the WSL2 based engine にチェックが入っている事
- Use Docker Compose V2 のチェックが入っている事
「Use Docker Compose V2」にチェックが入っている事となっているが、Docker ComposeのV1からV2に移行の過程のようなので、元にするdocker-compose.ymlによってはチェックを外さないと動かないケースがあるかもしれない。
V2がメインになってくる事が容易に想像できるのでチェックはつけておく。
Dockerイメージ
Dockerイメージを0から用意する必要は無く、ある程度設定されたDockerイメージがNVIDIAから公開されている。
ベースになるライブラリがインストール済みのイメージをベースにDockerイメージを作成するのが良い。
起動確認
Docker上でGPUが有効になっているか確認を行う。CUDAが有効になっているDockerイメージでベンチマークを行ってみる。
$ docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
結果
> Windowed mode
> Simulation data stored in video memory
> Single precision floating point simulation
> 1 Devices used for simulation
GPU Device 0: "Pascal" with compute capability 6.1
> Compute 6.1 CUDA device: [NVIDIA GeForce GTX 1060 6GB]
10240 bodies, total time for 10 iterations: 7.996 ms
= 131.131 billion interactions per second
= 2622.615 single-precision GFLOP/s at 20 flops per interaction
きちんとGPUが認識していればOK。今回はNVIDIA GeForce GTX 1060 6GBが正しく認識されている。