🐳

WSL2上のDockerでGPUを使う

2024/04/23に公開

目的

以前に 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