🐳

WSL2上のDockerでGPUを使う

に公開

目的

以前に WindowsでもサクサクDocker (Docker on WSL2 without Docker Desktop) という記事を公開していますが、WSL上のDocker環境でGPUを使うための設定を追記します。

内容

WSL上のDocker環境でGPUを使えるようにします。
概要は下記になります。

  1. GPUドライバのインストール
  2. NVIDIA Container Toolkitのインストール
  3. コンテナランタイムの構成
  4. 動作確認

方法

GPUドライバのインストール

まずはWindows側で最新のGPUドライバをインストールしてください。
公式サイト から最新のドライバをダウンロードしてインストールしてください。
https://www.nvidia.co.jp/Download/index.aspx?lang=jp

NVIDIA Container Toolkitのインストール

続いてWSL内でNVIDIA Container Toolkitをインストールします。
WSL上で以下のコマンドを実行してください。

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 sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update
sudo apt install -y nvidia-container-toolkit

【参考】
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installing-with-apt

コンテナランタイムの構成

続いてWSL内でコンテナランタイムの構成を行います。
WSL上で以下のコマンドを実行して設定を行ったあと、Dockerを再起動します。

コンテナランタイムの構成
# コンテナランタイムの構成
sudo nvidia-ctk runtime configure --runtime=docker
# dockerの再起動
sudo systemctl restart docker

【参考】
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#configuring-docker

動作確認

最後に動作確認を行います。
WSL上で以下のコマンドを実行します。

動作確認
docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi

上記のコマンドはNVIDIAの公式イメージをGPU付きで実行し、コンテナ上で nviia-smi コマンドを実行しています。
以下のような出力が行われ、GPUを認識していれば成功です。
(Driver Version, CUDA VersionはWindowsで入れたドライバーのバージョンが表示されます)

+-----------------------------------------------------------------------------------------+
| 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 RTX 3080        On  |   00000000:01:00.0  On |                  N/A |
| 30%   32C    P8             15W /  320W |    1005MiB /  10240MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
                                                                                         
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A        52      G   /Xwayland                                   N/A      |
+-----------------------------------------------------------------------------------------+

Discussion