手元のPCではこの条件を満たしている。
ホストOSである Windows に CUDA と cuDNN ドライバをインストールする。 実際の手順の記録は 「CUDA 11.2 + cuDNN 8.1 の場合」。
個々のコンテナに CUDA + cuDNN ドライバをインストールする必要はない。
インストールするドライバについては、以下の情報を参考にするらしい。
「 enable WSL と install a glibc-based distribution (Ubuntu or Debian) を行う」と記述されているが、docker のインストール時にWLS 2 はインストールされるのでいらないようだ。 ([Oct/09/2022 注記] https://learn.microsoft.com/en-us/windows/wsl/install によれば wsl --install コマンドで wslを導入できるようだ。デフォルトでは Ubuntu がインストールされるが -d オプションでdebianに変更できるとのこと。 今回はwslの設定なしで Windows Store から Ubuntu 20.04.5 LTS をインストールしてみたが wsl 関係のエラーが起きて動作しない。。)
現時点では WSL の kernel のバージョンが古いようだ。wsl cat /proc/version の出力は以下の通り。
nitta@gtune:/mnt/c/Users/nitta$ cat /proc/version Linux version 4.4.0-19041-Microsoft (Microsoft@Microsoft.com) (gcc version 5.4.0 (GCC) ) #1237-Microsoft Sat Sep 11 14:32:00 PST 20215.10.43.3 以降が必要だそうだ。「Windows Update で、"Receive updates for other Microsoft products when you update Windows" をenabled にしておく」と自動的にupdateされるようだ。管理者として起動したコマンドプロンプトで "wsl --update" としても、アップデートされるそうだ。
[個人のメモ] 以下の2通りの方法で表示される、WSL の kernel のバージョンが異なるのは何故だろう?
[管理者として起動した「コマンドプロンプト」上で] C:\WINDOWS\system32>wsl cat /proc/version Linux version 4.4.0-19041-Microsoft (Microsoft@Microsoft.com) (gcc version 5.4.0 (GCC) ) #1237-Microsoft Sat Sep 11 14:32:00 PST 2021 C:\WINDOWS\system32>wsl --update 更新をチェック中... 利用できる更新はありません。 カーネル バージョン: 5.10.102.1
Windows 11 64-bit: Home / Pro / Enterprise / Education ( どれも 21H2 以降 ) Windows 10 64-bit: Home / Pro (21H1 build 19043 以降)。Enterprise / Education (20H2 build 19042以降) WSL2 feature on Windows を enable する。 WSL2 を Windows10 or Windows 11 で動かすための必要条件。 64-bit CPU 4GByte RAM BIOS レベルの hardware virtualization support. Linux kernel update package をダウンロードする。
Configuration (x) Use WSL 2 instead of Hyper-V (recommended) <-- どちらも選択する (x) Add shortcut to desktop <-- どちらも選択する
sudo apt-key del 7fa2af80
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda-repo-wsl-ubuntu-11-7-local_11.7.0-1_amd64.deb sudo dpkg -i cuda-repo-wsl-ubuntu-11-7-local_11.7.0-1_amd64.deb sudo apt-get update sudo apt-get -y install cudaメタパッケージを使用してインストールする方法(推奨されていない)で Linux x86 CUDA Toolkit をインストールする場合は、ドライバをインストールしないように注意すること。 CUDA Toolkit のインストール手順は、各インストーラのダウンロードページに記述されている。 しかし、"cuda", "cuda-11-7", "cuda-drivers" meta-packages under WSL 2 などはドライバを含んでいるため選択してはいけないので注意。cuda-toolkit-11-x" meta-package だけをインストールすること。
C:\Users\nitta> wsl -l -v NAME STATE VERSION * Ubuntu-20.04 Stopped 1 docker-desktop-data Running 2 docker-desktop Running 2
C:\Users\nitta> wsl.exe --set-version Ubuntu-20.04 2 変換中です。この処理には数分かかることがあります... WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください 変換が完了しました。
C:\Users\nitta> wsl -l -v NAME STATE VERSION * Ubuntu-20.04 Stopped 2 docker-desktop-data Running 2 docker-desktop Running 2
$ sudo apt-get update $ sudo apt-get install -y apt-transport-https $ sudo apt-get install -y ca-certificates $ sudo apt-get install -y curl $ sudo apt-get install -y gnupg-agent $ sudo apt-get install -y software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
$ sudo apt-get update $ sudo apt-get install -y docker-ce docker-ce-cli containerd.io
$ sudo docker run hello-world
$ docker run --shm-size=1g \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ --gpus all \ -p 8888:8888 \ -it nvcr.io/nvidia/tensorflow:21.08-tf2-py31行で書くと次の通り。
docker run --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 --gpus all -p 8888:8888 -it nvcr.io/nvidia/tensorflow:21.08-tf2-py3
root@22d367464908:/workspace# nvidia-smi Mon Sep 5 02:31:03 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 515.65.01 Driver Version: 516.94 CUDA Version: 11.7 | |-------------------------------+----------------------+----------------------+ | 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 On | N/A | | N/A 56C P0 27W / N/A | 929MiB / 8192MiB | 1% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+ root@22d367464908:/workspace#
nitta@galleria:~$ docker --version Docker version 20.10.17, build 100c701 nitta@galleria:~$ docker version Client: Docker Engine - Community Cloud integration: v1.0.29 Version: 20.10.17 API version: 1.41 Go version: go1.17.11 Git commit: 100c701 Built: Mon Jun 6 23:03:17 2022 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Desktop Engine: Version: 20.10.17 API version: 1.41 (minimum version 1.12) Go version: go1.17.11 Git commit: a89b842 Built: Mon Jun 6 23:01:23 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.8 GitCommit: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6 runc: Version: 1.1.4 GitCommit: v1.1.4-0-g5fd4c4d docker-init: Version: 0.19.0 GitCommit: de40ad0 nitta@galleria:~$ docker --version Docker version 20.10.17, build 100c701 nitta@galleria:~$ docker version Client: Docker Engine - Community Cloud integration: v1.0.29 Version: 20.10.17 API version: 1.41 Go version: go1.17.11 Git commit: 100c701 Built: Mon Jun 6 23:03:17 2022 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Desktop Engine: Version: 20.10.17 API version: 1.41 (minimum version 1.12) Go version: go1.17.11 Git commit: a89b842 Built: Mon Jun 6 23:01:23 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.8 GitCommit: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6 runc: Version: 1.1.4 GitCommit: v1.1.4-0-g5fd4c4d docker-init: Version: 0.19.0 GitCommit: de40ad0 nitta@galleria:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 22d367464908 nvcr.io/nvidia/tensorflow:21.08-tf2-py3 "/usr/local/bin/nvid…" 29 minutes ago Up 26 minutes 6006/tcp, 6064/tcp, 0.0.0.0:8888->8888/tcp eager_northcutt
$ ssh -D 6006 nitta@localhost