WSL で Docker on GPU (Windows 11)
WSL はとても便利で素敵です。
Docker は Deep Learning フレームワークを使う上で、CUDA ごと面倒を見てくれるので、とても便利で素敵です。
そんな素敵な 2 つを一緒に使えたら...
できるんです。
Windows 10 では Insider プログラムに入らないと使えなかったらしいのですが、
Windows 11 では、標準でできるんです。
それまで Windows 11 に入れ替える気などさらさらなかったのですが、その情報を見て一気に気持ちがぐらつきました。
や・・・やるしかない・・・
Windows 11 へのアップグレード
Windows Update を開いてみると、とてもありがたいお言葉が書かれておりました。
「おめでとうございます。この PC で Windows 11 を実行できます。」
これまでこの文言を見ても、ただアップデートさせたいだけでしょ、としか感じていなかったのですが、私は心を入れ替えました。
素直に「ありがとうございます」と言えるように改心したのです。
ありがたいお言葉に従い、アップグレードをいたしました。
Windows 11 様、無事に来てくれました。
新しいタスクバーとか、まじいらねぇ 本当に最高です。
ありがとうございます。
wt.exe が見つかりません
これまでは Windows キー + x -> i を押して PowerShell を起動していました。
同様にやろうとしたら、Windows キー + x を押した時点で、PowerShell という項目がなく、かわりに Windows ターミナルになっています。
ここで i を押したら、
おい...
ショートカットキーがあるのに本体がないのかよ...
WSL のインストール & アップグレード
さてここからが本題です。
Windows ターミナルを開き、まだ WSL が入っていない場合は wsl --install をします。
私の場合はすでに WSL は入っていますが、念のため以下のコマンドでアップグレードすることにしました。
wsl --update
Docker のインストール
まず WSL を立ち上げます。(私の場合は Ubuntu 20.04)
wsl -d Ubuntu-20.04
ここからは WSL の Ubuntu ターミナルで操作します。
まずは Docker をインストールします。
便利なスクリプトがあるようなので活用します。
$ curl -fsSL https://get.docker.com -o get-docker.sh $ sudo sh get-docker.sh
このとき
WSL DETECTED: We recommend using Docker Desktop for Windows. Please get Docker Desktop from https://www.docker.com/products/docker-desktop
という警告が出ますが、無視して進めて良いようです。
最後にユーザー権限で Docker を起動できるようにしておきます。
$ sudo usermod -aG docker $USER
NVIDIA Container Toolkit のインストール
次に、Docker で GPU を使えるようにするための NVIDIA Container Toolkit をダウンロードします。
公式サイトの手順に従うだけですが、一応やったコマンドを書いておきます。
$ 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-container-toolkit $ sudo service docker stop $ sudo service docker start
いざ Docker on GPU を試す
いよいよこのときがきました。
試しに NGC にある PyTorch のイメージを試してみました。
$ docker pull nvcr.io/nvidia/pytorch:21.10-py3 $ docker run --gpus all -it --rm --shm-size=8g nvcr.io/nvidia/pytorch:21.10-py3
無事に Docker が起動したので、nvidia-smi を試してみます。
公式ページにも書かれていますが、すべての query には対応していないようです。
# nvidia-smi Thu Jun 9 07:24:56 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 510.68.02 Driver Version: 512.95 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 GeForce ... On | 00000000:01:00.0 Off | N/A | | N/A 44C P8 14W / N/A | 0MiB / 8192MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
もうひとつ試しに、PyTorch から GPU が見えるか試してみました。
# python3 Python 3.8.12 | packaged by conda-forge | (default, Sep 29 2021, 19:52:28) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import torch >>> print(torch.cuda.is_available()) True >>>
おお...
ちゃんと見えている...
Windows 11 さん、ありがとうございました。