はじめに
WSL2上でNVIDIA Container Toolkitをインストールし、Dockerコンテナ内でCUDAを使用する手順をまとめました。
手順
1. WSL2のインストール
2. NVIDIAドライバをインストール
3. Docker Desktopのインストール
Docker Desktopをインストールし、設定でWSL2を有効化します。
- Docker Desktopを開き、設定 > Resources > WSL integration を選択します
- WSL2ディストリビューションを有効化します
4. NVIDIA Container Toolkitをインストール
以下はUbuntuの場合を記載します。
- WSL2上で以下のコマンドを実行して、リポジトリとGPGキーをセットアップします
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-get update
- NVIDIA Container Toolkit パッケージをインストールします
sudo apt-get install -y nvidia-container-toolkit
- 以下のコマンドを使用してコンテナーランタイムを構成します
sudo nvidia-ctk runtime configure --runtime=docker
- 以下のコマンドを実行するか、Docker Desktopで「Restart」でDocker デーモンを再起動します
sudo systemctl restart docker

5. サンプル CUDA コンテナを実行し、GPUが認識されるか確認
以下のコマンドを実行します。
sudo docker run --rm --gpus all nvidia/cuda:<TAG> nvidia-smi
<TAG>
は以下から選択します。
https://hub.docker.com/r/nvidia/cuda/tags
例)
sudo docker run --rm --gpus all nvidia/cuda:12.3.2-base-ubuntu22.04 nvidia-smi
成功した場合、出力は以下のようになります。
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.86.10 Driver Version: 535.86.10 CUDA Version: 12.2 |
|-------------------------------+----------------------+----------------------+
| 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 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
| N/A 34C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
Docker ComposeでGPUアクセスを有効化
以下のようなcompose.yamlファイルを作成し、docker compose up
を実行します。
成功した場合、上記のnvidia-smi
コマンドの出力結果が表示されます。
compose.yaml
services:
test:
image: nvidia/cuda:12.3.2-base-ubuntu22.04
command: nvidia-smi
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
-
capabilities
:capabilities: [gpu]
の用に文字列のリストとして値を指定します -
count
:予約した GPU デバイス(ホストが保持している GPU 数)を整数値として指定するかall
で指定します -
device_ids
:ホスト上で予約する GPU デバイスの ID を表す文字列を値として指定します。デバイス ID はホスト上でnvidia-smi
の出力で確認できます。例、['0', '3']
-
driver
:文字列として指定します。例、driver: 'nvidia'
-
options
:ドライバ固有のオプションを表す キーバリューの組み合わせ