Windows 11のWSL2でNVIDIAのGPGPUを使用するDocker環境をセットアップ

Windows 11のWSL2でNVIDIAのGPGPUを使用するDocker環境をセットアップしたときのメモになります。

1. ハードウェアとインストール済みのソフトウェアについて

デスクトップパソコン ESPRIMO WD2/H2 に NVIDIA GeForce GTX 1650 がセットされたハードウェア構成で動作確認しました。

Windows 11にNVIDIA GeForce GTX 1650のドライバー (NVIDIA Studio ドライバー) とCUDA Toolkit 12.4のWindows版がインストールされた状態からDocker環境のセットアップを始めました。

2. WSL2でUbuntu 22.04を起動し、下記の手順でDocker環境をセットアップしました。

2.1. NVIDIAの下記のページのInstalling with Aptの手順にしたがってNVIDIA Container Toolkitをインストールしました。

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

2.1.1. aptリポジトリの設定を下記のコマンドで更新しました。

fukagai@ESPRIMOWD2H2:~$ curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/deb/$(ARCH) /
#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/experimental/deb/$(ARCH) /

2.1.2. aptパッケージのリストを下記のコマンドで更新しました。

fukagai@ESPRIMOWD2H2:~$ sudo apt-get update
Get:1 https://nvidia.github.io/libnvidia-container/stable/deb/amd64  InRelease [1477 B]
Get:2 https://nvidia.github.io/libnvidia-container/stable/deb/amd64  Packages [9176 B]
Get:3 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
...
Get:40 http://archive.ubuntu.com/ubuntu jammy-backports/multiverse amd64 c-n-f Metadata [116 B]
Fetched 31.1 MB in 10s (3012 kB/s)
Reading package lists... Done

2.1.3. NVIDIA Container Toolkitを下記のコマンドでインストールしました。

fukagai@ESPRIMOWD2H2:~$ sudo apt-get install -y nvidia-container-toolkit
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libnvidia-container-tools libnvidia-container1 nvidia-container-toolkit-base
The following NEW packages will be installed:
  libnvidia-container-tools libnvidia-container1 nvidia-container-toolkit nvidia-container-toolkit-base
0 upgraded, 4 newly installed, 0 to remove and 100 not upgraded.
...
Setting up nvidia-container-toolkit (1.15.0-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.4) ...
/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

2.2. Dockerの下記のページの手順にしたがってDockerをインストールしました。

https://docs.docker.com/engine/install/ubuntu/

2.2.1. 下記のコマンドでDockerのaptリポジトリの設定をしました。

fukagai@ESPRIMOWD2H2:~$ sudo apt-get install ca-certificates curl
fukagai@ESPRIMOWD2H2:~$ sudo install -m 0755 -d /etc/apt/keyrings
fukagai@ESPRIMOWD2H2:~$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
fukagai@ESPRIMOWD2H2:~$ sudo chmod a+r /etc/apt/keyrings/docker.asc
fukagai@ESPRIMOWD2H2:~$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
fukagai@ESPRIMOWD2H2:~$ sudo apt-get update
Get:1 https://download.docker.com/linux/ubuntu jammy InRelease [48.8 kB]
Hit:2 https://nvidia.github.io/libnvidia-container/stable/deb/amd64  InRelease
Get:3 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages [31.5 kB]
Get:4 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Hit:5 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:6 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
Hit:7 http://archive.ubuntu.com/ubuntu jammy-backports InRelease
Fetched 309 kB in 2s (140 kB/s)
Reading package lists... Done

2.2.2. 下記のコマンドでDockerのパッケージをインストールしました。

fukagai@ESPRIMOWD2H2:~$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

2.2.3. 下記のコマンドでインストールしたDockerの動作確認をしました。

fukagai@ESPRIMOWD2H2:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:a26bff933ddc26d5cdf7faa98b4ae1e3ec20c4985e6f87ac0973052224d24302
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

2.3. NVIDIAの下記のページのConfiguring Dockerの手順にしたがい、下記のコマンドを実行しました。

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

fukagai@ESPRIMOWD2H2:~$ sudo nvidia-ctk runtime configure --runtime=docker
INFO[0000] Config file does not exist; using empty config
INFO[0000] Wrote updated config to /etc/docker/daemon.json
INFO[0000] It is recommended that docker daemon be restarted.
fukagai@ESPRIMOWD2H2:~$ sudo systemctl restart docker

上記のコマンドでDockerがNVIDIA Container Runtimeを使用できるようになります。
コマンド実行後、/etc/docker/daemon.jsonは下記のようになっていました。

fukagai@ESPRIMOWD2H2:~$ cat /etc/docker/daemon.json
{
    "runtimes": {
        "nvidia": {
            "args": [],
            "path": "nvidia-container-runtime"
        }
    }
}

2.4. NVIDIAの下記のページのRunning a Sample Workload with Dockerに記載されたコマンドを実行しました。

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/sample-workload.html

下記のコマンドを実行したところ、下記のようなメッセージがコンソールに出力されました。

fukagai@ESPRIMOWD2H2:~$ sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
Sun May  5 05:12:27 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.76.01              Driver Version: 552.22         CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| 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 GTX 1650        On  |   00000000:01:00.0 Off |                  N/A |
| 23%   42C    P8             N/A /   75W |     619MiB /   4096MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A        25      G   /Xwayland                                   N/A      |
+-----------------------------------------------------------------------------------------+

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA