DockeでGPU(CUDA)を利用する手順
WSL2でGPU(CUDA)を使えるようにする
まず、WSL2のUbuntuの場合は、次の手順を行いWSL2上でCUDAを使えるようにします。
最近までWindows10では手順複雑でしたが、2023.10.14現在(Windows10 22H2)では、以下の手順だけでWSL2上でCUDAが利用できます。
- NVIDIA Driverのインストール CUDA on WSL User Guideの、「2.1. Step 1: Install NVIDIA Driver for GPU Support」を参考に、NVIDIA Driver Downloadsから対応するNVIDIA Driver をダウンロードし、Windows上でインストールする
- WSLを起動し、以下のコマンドを実行する
sudo apt-key del 7fa2af80
- CUDA Toolkitのインストール
https://developer.nvidia.com/cuda-downloadsからCUDA Toolkitをインストールする
Operating SystemにLinux、DistributionにWSL-Ubuntuを選択する
Installer Typeに応じて、インストール方法が異なる。deb (network)を選択した場合は、次のようなサンプルが表示されるので、WSL上でコマンドを実行する
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb sudo apt-get update sudo apt-get -y install cuda
- 正しくインストールできたか確認する
次のコマンドを実行し、CUDA情報が表示されるか確認する
nvidia-smi
コマンド自体が認識されない(/usr/lib/wsl/lib/nvidia-smiが存在しない)場合は、正しくインストールできていない
UbuntuにNVIDIA Container Toolkitをインストールする
Dockerコンテナ上で、CUDAを利用できるようにします。Ubuntu・WSL2のUbuntuでも同じ手順です。
参考
1. NVIDIA Container Toolkit のセットアップ
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
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/$distribution/libnvidia-container.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
2. NVIDIA Container Toolkit のインストール
sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
3. Dockerを再起動する
sudo service docker restart
4. 基本CUDAコンテナの実行テスト
正しくインストールできているかGPU付きのコンテナを起動して確認する。
# 11.6.2
docker container run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
# 11.8.0
docker container run --rm --runtime=nvidia --gpus all nvidia/cuda:11.8.0-base-ubuntu20.04 nvidia-smi
# 12.1.0
docker container run --rm --runtime=nvidia --gpus all nvidia/cuda:12.1.0-base-ubuntu20.04 nvidia-smi
バージョンなどの情報が表示されれば正しくインストールできています。
コンテナ作成例
オプション --runtime=nvidia
と --gpus all
を指定します。
docker container create -i --name [コンテナ名] --runtime=nvidia --gpus all -p 8000:8000 [Dockerイメージ名][:タグ]
docker container run -i -d --name [コンテナ名] --runtime=nvidia --gpus all -p 8000:8000 [Dockerイメージ名][:タグ]
テンポラリでコンテナを作成しbash起動
docker container run -it --rm --runtime=nvidia --gpus all -p 8000:8000 nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04
docker-composeを使ってコンテナを作成する
docker-compose.ymlを使う場合は、次のように追記します。
services:
myapp:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]