🐳
WSL2上にNVIDIA Container ToolkitをインストールしてDockerコンテナ内でCUDAを使用できるようにする
WSL2上のDockerからCUDAを使える環境を作成したときの備忘録です。
古い記事の中で手順が変わっていたものなどあったのでまとめました。
環境
OS (WSLホスト): Windows 11
OS (WSLゲスト): Ubuntu 22.04
NVIDIAドライバのバージョン: 516.59
WSL用のドライバについて
現在はWindows用のNVIDIAドライバにWSL用ドライバが含まれているので[1]、ダウンロードページかGeForce ExperienceからWindows用のドライバをインストールします。
ドライバをインストール後、/usr/lib/wsl/lib
配下にドライバ関連のファイルが増えています。
この中にnvidia-smi
コマンドが含まれているのでこのコマンドでGPUが認識できていることを確認できます。
$ ls -lt /usr/lib/wsl/lib
total 73364
-r-xr-xr-x 1 root root 141464 Jun 24 12:05 libcuda.so
-r-xr-xr-x 1 root root 141464 Jun 24 12:05 libcuda.so.1
-r-xr-xr-x 1 root root 141464 Jun 24 12:05 libcuda.so.1.1
-r-xr-xr-x 1 root root 5950624 Jun 24 12:05 libnvcuvid.so
-r-xr-xr-x 1 root root 5950624 Jun 24 12:05 libnvcuvid.so.1
-r-xr-xr-x 1 root root 7547400 Jun 24 12:05 libnvdxdlkernels.so
-r-xr-xr-x 1 root root 424400 Jun 24 12:05 libnvidia-encode.so
-r-xr-xr-x 1 root root 424400 Jun 24 12:05 libnvidia-encode.so.1
-r-xr-xr-x 1 root root 212624 Jun 24 12:05 libnvidia-ml.so.1
-r-xr-xr-x 1 root root 354768 Jun 24 12:05 libnvidia-opticalflow.so
-r-xr-xr-x 1 root root 354768 Jun 24 12:05 libnvidia-opticalflow.so.1
-r-xr-xr-x 1 root root 45841504 Jun 24 12:05 libnvwgf2umx.so
-r-xr-xr-x 1 root root 600472 Jun 24 12:05 nvidia-smi
-r-xr-xr-x 2 root root 5398848 Mar 19 18:17 libd3d12core.so
-r-xr-xr-x 2 root root 785608 Jun 5 2021 libd3d12.so
-r-xr-xr-x 2 root root 827904 Jun 5 2021 libdxcore.so
$ nvidia-smi
Thu Jul 28 20:46:31 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.57 Driver Version: 516.59 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 |
| 32% 47C P5 33W / 175W | 2035MiB / 8192MiB | 41% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
Dockerのインストール
インストールガイドに沿ってインストールします。
$ sudo apt update
$ sudo apt install -y ca-certificates curl gnupg lsb-release
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 実行時のグループ設定
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
$ newgrp docker
NVIDIA Container Toolkitのインストール
インストールガイドに沿って進めます。
nvidia-docker2
は非推奨なので[2]nvidia-container-toolkit
パッケージをインストールします。
$ 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
$ sudo apt update
$ sudo apt install -y nvidia-container-toolkit
# Dockerデーモンの再起動
$ sudo systemctl restart docker
動作確認
コンテナ内でnvidia-smi
コマンドを実行して先ほどと同じ出力になればOKです。
$ docker run --rm --gpus all nvidia/cuda:11.7.0-base-ubuntu22.04 nvidia-smi
Unable to find image 'nvidia/cuda:11.7.0-base-ubuntu22.04' locally
11.7.0-base-ubuntu22.04: Pulling from nvidia/cuda
405f018f9d1d: Pull complete
5c77aa48067f: Pull complete
d62c65265317: Pull complete
09c9dc58c1ea: Pull complete
dbe53a87777f: Pull complete
Digest: sha256:6d5600a579ab5dd44d38c3fd575a26357056424d5c95cff06705f73b4f3b86c9
Status: Downloaded newer image for nvidia/cuda:11.7.0-base-ubuntu22.04
Thu Jul 28 11:57:47 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.57 Driver Version: 516.59 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 |
| 30% 43C P5 26W / 175W | 4515MiB / 8192MiB | 16% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
参考資料
Discussion