DockeでGPU(CUDA)を利用する手順

WSL2でGPU(CUDA)を使えるようにする

まず、WSL2のUbuntuの場合は、次の手順を行いWSL2上でCUDAを使えるようにします。

最近までWindows10では手順複雑でしたが、2023.10.14現在(Windows10 22H2)では、以下の手順だけでWSL2上でCUDAが利用できます。

  1. NVIDIA Driverのインストール CUDA on WSL User Guideの、「2.1. Step 1: Install NVIDIA Driver for GPU Support」を参考に、NVIDIA Driver Downloadsから対応するNVIDIA Driver をダウンロードし、Windows上でインストールする NVIDIA driver downloads
  2. WSLを起動し、以下のコマンドを実行する
    sudo apt-key del 7fa2af80
  3. CUDA Toolkitのインストール https://developer.nvidia.com/cuda-downloadsからCUDA Toolkitをインストールする Operating SystemにLinux、DistributionにWSL-Ubuntuを選択する CUDA Toolkit downloads

    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
  4. 正しくインストールできたか確認する 次のコマンドを実行し、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]
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です