はじめに
NVIDIA GPU が乗っている Windows ゲーミング PC にて、GPU を使ったコンテナを実行するための手順をざっと紹介します。
前提条件
- NVIDIA GPU を搭載したゲーミング PC
- Windows 環境にて適切なドライバーが適用されていること (*1)
- Windows 管理者権限を持つアカウントを利用可能なこと
*1 NVIDIA 公式ドライバに CUDA ドライバは含まれているはずです。私が試した環境は、工場出荷時の環境となります。DCH デバイスドライバのみをインストールした状態です。NVIDIA GeForce Experience はインストールしていません。
手順
手順は次のようになります。
- WSL のインストール
- docker engine のインストール
- NVIDIA Container Toolkit のインストール (詳細はこちらをの英語ページをご確認下さい。Host OS に CUDA ドライバをインストールすることなどがビジュアルで分かります)
- GPU を使うコンテナの動作確認
WSL のインストール
PowerShell または Windows コマンド プロンプトを管理者モードで開き、次のコマンドを実行します。詳しい手順は、Microsoft のドキュメントをご参照下さい。
wsl --install
docker engine のインストール
この作業は、ubuntu にて実行して下さい。docker 公式サイトにある最新バージョンのdocker engine の ubuntu へのインストールステップを参照しながら作業します。具体的な手順は次のようになります。
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
ここまでで docker engine が動作する状態になります。sudo docker ps -a
もしくは docker ps -a
(post-installation steps を実行した場合)などで docker engine が正常に動作していることをご確認下さい。
NVIDIA Container Toolkit のインストール
NVIDIA Container Toolkit を WSL 環境にインストールします。インストール先がWindows ではないことをご注意下さい。公式ページの Installing the NVIDIA Container Toolkitに詳しい説明があります。WSL の ubuntu へのコピペは注意して作業を行って下さい。コピペの失敗で適切に動作しない、ということが起きるかと思います。
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
コピペのミスがあったりすると、次のコマンドで失敗することがあります。
sudo apt-get install -y nvidia-container-toolkit
私は docker を再起動しないと正常に動作しませんでした。
sudo systemctl restart docker
GPU を使うコンテナの動作確認
まず ubuntu にて nvidia-smi を実行し CUDA バージョンを確認して下さい。
$ nvidia-smi
Fri Dec 29 17:44:52 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.52 Driver Version: 531.88 CUDA Version: 12.1 |
|-----------------------------------------+----------------------+----------------------+
| 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 4060 L... On | 00000000:01:00.0 Off | N/A |
| N/A 35C P3 15W / N/A| 0MiB / 8188MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
docker hub/nvidia/cuda にアクセスし、ホストのバージョンと同じものを見つけて下さい。私の環境の場合、CUDA 12.1 だったので 12.1.0-base-ubuntu22.04 をコンテナとして起動し動作を確認しました。
$ docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi
Fri Dec 29 08:50:11 2023 +---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.52 Driver Version: 531.88 CUDA Version: 12.1 |
|-----------------------------------------+----------------------+----------------------+
| 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 4060 L... On | 00000000:01:00.0 Off | N/A |
| N/A 35C P3 14W / N/A| 0MiB / 8188MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
これで作業は完了となります。あとは目的の GPU を使ったアプリケーションを起動してお楽しみ下さい。
インストールが失敗していた場合
NVIDIA Container Toolkit のインストールに失敗した場合、もしくは再起動しなかった場合、次のようなエラーが出力されることがあります。インストールの結果を確認したり、docker daemon の再起動を行うなど対応してみて下さい。
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].