学習用のPCをWindows11にアップグレードしたので、CUDA on WSLを試してみた。
ドライバインストール
CUDA on WSLに対応したドライバをインストールする。
GPU in Windows Subsystem for Linux (WSL) | NVIDIA Developer
※2021/11/1 追記
CUDA 11.4に付属するドライバでも大丈夫だった。
このドライバを使うとWindows上で、以前のCUDA+TensorRTでビルドしたdlshogiのNPS性能が低下した。
GPUが使用できることを確認
Windows11でWSL2をインストールすると、デフォルトでCUDAが使用可能になっている。
$ nvidia-smi
$ nvidia-smi Mon Nov 1 00:05:38 2021 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 510.00 Driver Version: 510.06 CUDA Version: 11.6 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 NVIDIA TITAN V On | 00000000:01:00.0 Off | N/A | | 43% 53C P0 31W / 250W | 703MiB / 12288MiB | N/A Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 1 NVIDIA TITAN RTX On | 00000000:21:00.0 Off | N/A | | 41% 29C P8 14W / 280W | 300MiB / 24576MiB | N/A Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
GPU使用率は表示できないようなので、GPU使用率を確認するにはWindows側のnvidia-smiを使用する必要がある。
Docker CEインストール
Ubuntuを起動し、公式ドキュメントの通り、Dockerをインストールする。
$ sudo apt-get update $ sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg $ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io
Dockerの設定
sudoなしで起動できるように、ユーザーをdockerグループに追加する。
sudo gpasswd -a $USER docker
Dockerサービス起動
Dockerのサービスを手動で起動する。
sudo service docker start
NVIDIA Container Toolkitインストール
公式の説明の通り、NVIDIA Container Toolkitをインストールする。
※2023/11/23追記 最新版は手順が変わっているため、こちらを参照
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) $ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - $ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list $ sudo apt-get update $ sudo apt-get install -y nvidia-docker2 $ sudo service docker stop $ sudo service docker start
PyTorchコンテナを起動
dlshogiが使用しているPyTorchが使用できるNVIDIAのコンテナを起動する。
docker run --gpus all -it --net=host -v /mnt/d:/mnt/d --name shogi nvcr.io/nvidia/pytorch:21.10-py3
※/mnt/dは自分の環境に合わせて編集する
※共有メモリの警告が表示されるが、データローダをマルチプロセスで使用しない場合は関係ないので無視する。
※気になる場合は、ここに説明があるので、起動オプションを設定する。
dlshogiインストール
# git clone https://github.com/TadaoYamaoka/DeepLearningShogi.git # cd DeepLearningShogi # pip install -e .
モデル訓練
dlshogiでモデルの訓練を実行する。
# python -m dlshogi.train floodgate_2019-2021_r3800.hcpe3 floodgate.hcpe --use_amp --eval_interval 100
2021/10/31 14:44:45 INFO network resnet10_swish 2021/10/31 14:44:45 INFO batchsize=1024 2021/10/31 14:44:45 INFO lr=0.01 2021/10/31 14:44:45 INFO weight_decay=0.0001 2021/10/31 14:44:45 INFO val_lambda=0.333 2021/10/31 14:44:46 INFO use amp 2021/10/31 14:44:46 INFO temperature=1.0 2021/10/31 14:44:46 INFO optimizer SGD (Parameter Group 0 dampening: 0 lr: 0.01 momentum: 0.9 nesterov: True weight_decay: 0.0001) 2021/10/31 14:44:46 INFO Reading training data 2021/10/31 14:44:46 INFO floodgate_2019-2021_r3800.hcpe3 2021/10/31 14:44:55 INFO Reading test data 2021/10/31 14:44:56 INFO train position num = 7576031 2021/10/31 14:44:56 INFO test position num = 856923 2021/10/31 14:45:11 INFO epoch = 1, steps = 100, train loss = 4.2608442, 0.6415551, 0.6496299, 4.9050882, test loss = 3.4043007, 0.6760992, 0.6944302, 4.0865040, test accuracy = 0.2392578, 0.5654297 2021/10/31 14:45:25 INFO epoch = 1, steps = 200, train loss = 2.9916522, 0.5849209, 0.6070443, 3.5839402, test loss = 2.9757018, 0.6661907, 0.6929067, 3.6507890, test accuracy = 0.2763672, 0.5869141 ...
訓練が実行できることが確認できた。
Windows側のnvidia-smiでGPU使用率を確認すると、GPUが使用されていることが確認できた。
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 510.06 Driver Version: 510.06 CUDA Version: 11.6 | |-------------------------------+----------------------+----------------------+ | GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 NVIDIA TITAN V WDDM | 00000000:01:00.0 Off | N/A | | 61% 84C P2 210W / 250W | 6285MiB / 12288MiB | 86% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 1 NVIDIA TITAN RTX WDDM | 00000000:21:00.0 Off | N/A | | 41% 28C P8 13W / 280W | 300MiB / 24576MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+
dlshogiビルド
CPUがRyzenなので、MakefileをZEN2向けに修正して、ビルドする。
# cd usi # sed -i -e 's/-DHAVE_BMI2 -msse4.2 -mbmi2 -DHAVE_AVX2 -mavx2/-msse4.2 -DHAVE_AVX2 -mno-bmi2 -mavx2 -march=znver2/' Makefile # make
dlshogi実行
USIエンジンをコマンドから実行する。
# cd bin # ./usi setoption name DNN_Model value /workspace/model/model-dr2_exhi.onnx setoption name UCT_Threads value 3 setoption name UCT_Threads2 value 3 isready position startpos go byoyomi 5000
info nps 39707 time 5033 nodes 199848 hashfull 19 score cp 72 depth 31 pv 2g2f 3c3d 7g7f 8c8d 2f2e 8d8e 6i7h 8e8f 8g8f 8b8f 2e2d 2c2d 2h2d 4a3b 2d3d 2b3c 5i5h 5a5b 3g3f 8f7f 8h7g 7f7d 3d7d 7c7d P*2h P*8b 7i6h 3a4b 7h7i 3b3a P*7b bestmove 2g2f
GPU2枚(TITAN VとTITAN RTX)で4万npsくらいの探索速度である。
Windows上からの比較
Windows上からも同じ条件で探索速度を測った。
info nps 29337 time 5038 nodes 147800 hashfull 14 score cp 72 depth 31 pv 2g2f 3c3d 7g7f 8c8d 2f2e 8d8e 6i7h 8e8f 8g8f 8b8f 2e2d 2c2d 2h2d 4a3b 2d3d 2b3c 5i5h 5a5b 3g3f 8f7f 8h7g 7f7d 3d7d 7c7d P*2h P*8b 7i6h 3a4b 7h7i 3b3a P*7b bestmove 2g2f
Ubuntuから実行した方が速い。
TensorRTのバージョンとも関連していそうである。
別途、Windows側のCUDAとTensorRTのバージョンを上げて測定してみたい。
まとめ
Windows11のWSL2上のDockerコンテナで、dlshogiの学習とUSIエンジンの実行を試した。
問題なく使用できることがわかった。
NPSはなぜかWindows上よりも高くなったので、CUDAとTensorRTのバージョンをそろえた上で別途測定してみたい。