win11+WSL2+GPU+docker+CUDA+CuDNNでPytorchを動かすまで
購入したPCのwindows versionがwindows 10 Version 20H2だったので、windows11に更新
ここは勢いでいける
win10の途中のversionから、簡単にwsl2がインストールできるようになった
基本的には以下のサイトをベースに構築
本当に見るべきは以下の公式
WSL2 のインストール
今回はUbuntu-20.04をインストール
もし --installのあと何もつけなかったらUbuntuが自動的にインストールされる
wsl --install -d Ubuntu-20.04
インストールできるディストリビューションの種類を見るには以下のコマンド。
wsl --list --online
上記のコマンドではUbuntu22.04 LTSは2022/5/19時点では表示されないが、Microsoft storeからは入手可能
インストールが終わったらPCを再起動する
再起動後、自動でterminalが開き、ubuntu環境下でのユーザアカウント、passを設定を求められる。
※再起動せずとも、ユーザアカウント、passの入力が求められることも。
一応update確認
wsl --update
上記処理後、エクスプローラーの左欄にLinuxボタンが生成され、中にUbuntuのディレクトリ構成が作成されていればOK。
またwindows terminalを開くと、Ubuntuが選択できるようになっているはず。
今後Linuxコマンドを叩くときは、windows terminalからUbuntuを選択して叩く
もしwindows terminalからUbuntuが表示されないときは
windows terminalを開く→タブの下矢印→設定→左下の「JSONファイルを開く」
そして"list":の項目に以下を追加
{
"guid": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
"hidden": false,
"name": "Ubuntu-20.04",
"source": "Windows.Terminal.Wsl"
}
保存するとwindows terminalからUbuntuが表示されるはず
Update & Upgrade
まずこの状態でaptをコマンド使用すると速度が非常に遅いことがある(数十kb/sとかのレベル)。理由はaptコマンドを実行する際のリポジトリが海外になっているため。なので日本のレポジトリから実行できるようurl に jp. をつける
sudo sed -i 's/\/\/archive.ubuntu.com/\/\/jp.archive.ubuntu.com/g' /etc/apt/sources.list
sudo sed -i 's/\/\/us.archive.ubuntu.com/\/\/jp.archive.ubuntu.com/g' /etc/apt/sources.list
sudo sed -i 's/\/\/fr.archive.ubuntu.com/\/\/jp.archive.ubuntu.com/g' /etc/apt/sources.list
sudo apt -y update
sudo apt -y upgrade
そのあとpowershellで以下のコマンドをたたいてwslを再起動
wsl --shutdown
GPUドライバのインストール
以下のページからwsl専用のGPUドライバをインストールできる
「Get CUDA Driver」をクリックし、自分にあったGPUのドライバをインストール。
注意点は
- Product Series,Productは据え置き型とlaptop型で分かれているので注意
- Operating Systemはwin11を選択
- Download TypeはGRDにした(あってる?)
インストール後、ドライバを起動しデフォルトの設定のまま、すすめばOK
Geforce Experienceはゲームの録画が便利になったりGPUにあった最新のドライバを更新通知してくれるらしいが、基本ゲームはしないはず(しても本格的にはしない)なので外した
インストールするバージョンを確認
今回はdockerでpytorchを動かすことを目標とする
なのでpytorchが対応しているcudaやCuDNNを入れる必要がある
適当に最新のcudaをインストールするとpytorchが対応していない場合があるので要注意
DockerHubにて対応してるバージョンを確認
今回は
pytorch:1.10.0
cuda:11.3
cudnn:8
でいくことにする
※ cuda11.1以降のバージョンでWSL2に対応したCUDAが用意されているので、それ以降のバージョンを選ぶと良い
※ちなみにcuda11.1とcuda11.2は途中でエラーがでたので、cuda11.3にした
CUDA Toolkitのインストール
CUDA11.3のページに行く
設定はバージョンは違えどこのページのスクショを参考に。
ポチポチ設定すると、コマンドが表示されるので、それをコピーしてterminalをたたく
すべて終了後nvdia-smiをたたいて、例のやつがでたら成功
cuDNNのインストール
以下のページからDL
今回は以下を選択
Download cuDNN v8.2.1 (April 23rd, 2021), for CUDA 11.x
→ cuDNN Runtime Library for Ubuntu20.04 x86_64 (Deb)
c:temp
に保存した場合、以下のようにたたく(sudoつけないとダメかも)
dpkg -i /mnt/c/temp/libcudnn8_8.2.1.32-1+cuda11.3_amd64.deb
環境変数設定
cuda-11-3にパスが通るように下記の設定を行う。
LD_LIBRARY_PATH="$LD_LIBRARY_PATH":/usr/local/cuda-11.3/lib64
PATH="$PATH":/usr/local/cuda/bin
上の2行を ~/.bashrc に追加し、
source ~/.bashrc
nvidia-docker
こいつがいいらしい。
以下を入力
curl https://get.docker.com | sh
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
あとはdockerデーモン起動すればOK
sudo service docker stop
sudo service docker start
一般ユーザーで以下のコマンドをたたいてみると、おそらく以下のコマンドがでるはず。
$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix
これは一般ユーザーがdockerコマンドを実行する権限がないため。このままだといちいちsudoをつける必要がある。
一般ユーザーでdockerコマンドを実行するためには、dockerグループに一般ユーザーを加える必要がある。まずはdockerグループが存在するか確認
cat /etc/group | grep docker
グループが存在しない場合は、以下のコマンドでdockerグループを作成。
sudo groupadd docker
以下のコマンドでdockerグループに登録
sudo usermod -aG docker ユーザー名
再起動すると一般ユーザーでもdockerコマンドが使えるようになる
また、docker起動にパスワード不要、またwsl2起動中は常時docker起動状態にしたい場合は以下参照
最終確認
これでうまくいけば成功
docker run --gpus all -it --rm --shm-size=8g nvcr.io/nvidia/pytorch:XX.XX-py3
「xx.xx」にはバージョンをかく。バージョンはココのLatest Tagを確認
dockerコンテナに入って
nvidia-smi
と
import torch
print(torch.__version__)
print(torch.cuda.is_available())
がバージョンとTrueが返ってきたらOK
また念のため以下のdockerイメージで同じことして、成功すればOK
docker run --gpus all -it --rm --shm-size=8g pytorch/pytorch:1.10.0-cuda11.3-cudnn8-devel
追記
docker imageでCUDA環境を用意するのであれば、WSL2のUbuntuにはインストール不要