WSL2でDockerとNVIDIA GPUを活用:機械学習環境構築ガイド

WSL2(Windows Subsystem for Linux 2)環境でDockerを導入し、NVIDIAのGPUを活用するための包括的なガイドです。機械学習やディープラーニングなど、GPU支援の恩恵を受けたい開発者に最適な環境構築手順を解説します。

前提条件

このガイドを実行するには、以下の環境が必要です:

  • Windows 11または Windows 10(バージョン21H2以降)
  • NVIDIA GPUを搭載したPC
  • 管理者権限でのコマンド実行が可能なこと [3]

WSL2のインストールと設定

Windows 11の場合、コマンドプロンプトで以下のコマンドを実行するだけでWSL2とUbuntuがインストールできます:

wsl --install

インストール後に再起動し、Ubuntuのユーザー名とパスワードを設定します。
WSL2が正しくインストールされているか確認するには、次のコマンドを実行します:

wsl -l -v

`VERSION`が2になっていることを確認してください。もし1の場合は、以下のコマンドでWSL2に変更します:

wsl --set-version Ubuntu 2

NVIDIAドライバのインストール

Windows側でNVIDIA GPUドライバをインストールする必要があります。
WSL内ではドライバをインストールしないでください

  1. NVIDIA公式サイトのドライバダウンロードページから、お使いのGPUに対応するドライバをダウンロードします。
  2. インストーラを実行し、指示に従ってインストールを完了します。
  3. Windows上でのインストールが完了したら、WSLのターミナルで以下のコマンドを実行し、GPUが認識されていることを確認します:
nvidia-smi

Studio ドライバーを選択すると、開発環境として安定性が高まります [2][4]

WSL2でのDockerインストール

WSL2のUbuntuターミナルで以下のコマンドを順に実行します:

# パッケージインデックスを更新
sudo apt-get update

# 必要なパッケージをインストール
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release \
    software-properties-common

# GPGキーを保存するためのディレクトリを作成
sudo mkdir -p /etc/apt/keyrings

# Dockerの公式GPGキーを追加
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

# Dockerのリポジトリを追加
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# パッケージを更新
sudo apt-get update

# Dockerをインストール
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

一般ユーザーでDockerを使えるようにするには、以下のコマンドを実行します:

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

これでDockerが管理者権限なしで使えるようになります [2][7]

NVIDIA Container Toolkitのインストール

WSL2でGPUを使用するためには、NVIDIA Container Toolkitをインストールする必要があります:

# 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

# NVIDIA Container Toolkitをインストール
sudo apt install -y nvidia-container-toolkit

Dockerコンテナランタイムの構成

NVIDIA Container Toolkitをインストールした後、Dockerで使えるように設定します:

# コンテナランタイムの構成
sudo nvidia-ctk runtime configure --runtime=docker

# Dockerの再起動
sudo systemctl restart docker

動作確認

環境が正しく構築されているか確認するために、以下のコマンドを実行します:

docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi

以下のような出力が表示されれば、GPU環境が正常に機能しています:

+-----------------------------------------------------------------------------------------+
| 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 ...  On | 00000000:01:00.0  On |                  N/A |
|  30%   32C    P8    15W / 320W |   1005MiB / 10240MiB |      0%      Default |
|                               |                      |                  N/A |
+-----------------------------------------+------------------------+----------------------+

Dockerで動作中のコンテナを確認するには、以下のコマンドを使用します。

動作中のコンテナのみを表示

docker ps

このコマンドを実行すると、現在稼働中のコンテナ一覧が表示されます。表示内容には、以下の情報が含まれます:

  • コンテナID(CONTAINER ID)
  • 使用しているイメージ(IMAGE)
  • 実行中のコマンド(COMMAND)
  • 起動日時(CREATED)
  • 状態(STATUS)
  • ポート情報(PORTS)
  • コンテナ名(NAMES) [1][4][7]

停止中も含めたすべてのコンテナを表示

docker ps -a

このコマンドでは、停止中や終了したコンテナも含めた全コンテナが一覧表示されます。特に、`STATUS`列でコンテナの状態(例: `Exited`, `Running`など)を確認できます [1][2][3]

詳細情報を確認

特定のコンテナについてより詳細な情報を確認する場合は、以下のコマンドを使用します。

docker inspect [コンテナ名またはID]

このコマンドは、JSON形式で詳細なコンテナ情報を出力します。状態は`.State.Status`キーで確認できます [2][6].

補足

コンテナ名やIDが必要な操作(例: 停止や削除)では、`docker ps`または`docker ps -a`で取得した情報を使用します。

状態確認やトラブルシューティングに役立つため、これらのコマンドは頻繁に使用されます [3][8].


参考文献

  • [1] Docker Documentation. “docker ps command”
  • [2] Docker Documentation. “docker inspect command”
  • [3] Docker Documentation. “Get started with Docker Compose”
  • [4] NVIDIA. “CUDA on WSL”
  • [6] TestDriven.io. “Docker ps Command Explained”
  • [7] DigitalOcean. “How To Install and Use Docker on Ubuntu 22.04”
  • [8] phoenixnap.com. “How to Check Docker Container Status”