Summary
やりたいこと
前の記事 「WindowsにMacからリモート接続してPythonでGPUを使う(2022.5.6)」を参照
wslのkernelのバージョンを確認
5.10.43.3以降のものならOKなようだ。今回は5.10.102.1なのでOK。
> wsl cat /proc/version
Linux version 5.10.102.1-microsoft-standard-WSL2 (oe-user@oe-host) (x86_64-msft-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220) #1 SMP Wed Mar 2 00:30:59 UTC 2022
現在利用可能なゲストOSの種類とバージョンを確認
Ubuntuとなっているが実際は20.04だった
> wsl --list --online
The following is a list of valid distributions that can be installed.
Install using 'wsl --install -d <Distro>'.
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
openSUSE-42 openSUSE Leap 42
SLES-12 SUSE Linux Enterprise Server v12
Ubuntu-16.04 Ubuntu 16.04 LTS
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntuのbashから以下で確認したところ、Ubuntu 20.04 LTSがインストールされていた。
$ cat /etc/issue
$ cat /etc/lsb-release
root@DESKTOP-IOAL04A:~# cat /etc/issue
Ubuntu 20.04 LTS \n \l
root@DESKTOP-IOAL04A:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04 LTS"
root@DESKTOP-IOAL04A:~# cat /etc/issue
docker inspectは、現在実行中のコンテナの中身を調べるコマンド
CONTAINER_IDの部分はdocker psで表示されるIDを使う
$ docker images
$ docker ps -a
$ docker ps
$ docker inspect CONTAINER_ID
ただ立ち上げるなら以下でOK(GPUを全部使うように指定している)
/workspaceには何もマウントされていない
docker run --gpus all -it --rm --shm-size=8g nvcr.io/nvidia/pytorch:22.04-py3
実行したいプログラムのパッケージのルートにcdして、以下のようにdockerを実行すればよい
$(pwd)を/workspace/worksにマウントした状態で起動される
docker run --gpus all -it --rm --shm-size=8g -v $(pwd):/workspace/works nvcr.io/nvidia/pytorch:22.04-py3
WindowsでGitHub
Desktopやtreeを使うが、gitリポジトリは、ubuntuのネイティブFSに置いて管理したい。
同様に、ソースコードの修正はWindows側でVS Codeを使って作業したい。
実行などはubuntuのdockerにリモート接続して行う。
docker run --gpus all -it --rm --shm-size=8g -v $(pwd):/workspace/works nvcr.io/nvidia/pytorch:22.04-py3
GitHub DesktopでClone a repositpryするときにLocal pathにwslの場所を指定する。
\\wsl$\Ubuntu\home\harada\src\test-test-test
##【参考】
nvidia-docker2のインストール
Dockerを手動でインストール(Docker Desktopは入れちゃダメらしい)
$ curl https://get.docker.com | sh
リポジトリーとGPGキーを設定
$ 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
ログインしているユーザーをdockerグループへ追加
$ sudo gpasswd -a $(whoami) docker
docker.sockにグループの書き込み権限を付与
$ sudo chgrp docker /var/run/docker.sock
docker daemonを再起動 して一旦ログアウト
$ sudo service docker restart
$ exit
これで実行できるようになる
PyTorchのDockerイメージをイストール
nvidiaが用意しているPytorch用のdockerのバージョンを指定してダウンロード&実行する
$ docker run --gpus all -it --rm --shm-size=8g nvcr.io/nvidia/pytorch:XX.XX-py3
XX.XXの部分は、下記のホームページに記載されているLatest Tagの値を指定する。
https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch
この例では、22.04-py3とする
$ docker run --gpus all -it --rm --shm-size=8g nvcr.io/nvidia/pytorch:22.04-py3
実行結果
参考にしたブログでは、Shared
Memoryの拡張を推奨しているので、同様に”-shm-size=8g”を指定。
このようなイメージはソースコードが格納されたフォルダをマウントして使うことを想定しているので、実際はファイルコピーはしないことが多い。
マウントした実践的な使い方は後述(このほか、rootで実行されているなど気持ち悪いので、ユーザ名を指定したい)
動作確認
設定がうまくできたら、実行してみる。 Ubuntuを立ち上げてrootじゃないユーザーアカウントでログインすると、bashウインドウが立ち上がる。
$ docker images
$ docker ps -a
$ docker run --gpus all -it --rm --shm-size=8g nvcr.io/nvidia/pytorch:22.04-py3
実行されたら、nvidia-smiを実行してGPUが認識されていることを確認
$ nvidia-smi
さらに、pythonを実行して、PyTorchから見えているかどうか確認
$ python
>>> import torch
>>> print(torch.cuda.is_available())
True
>>> print(torch.cuda.device_count())
1
【参考】
GPUを使う設定の方法だがTensorflowの例が書かれている
Getting started with CUDA on Ubuntu on WSL 2
これはどこでやるはずだったか忘れた・・・
$ sudo apt -y install docker.io
「WSL+docker+CUDA+Pythonの実践的な使い方」に続く>