🐋

WSL2+Docker+GPUによる機械学習環境構築

2024/12/13に公開

本記事の概要

本記事では、Windows 11環境において、WSL2、Docker、およびNVIDIA GPUを活用した機械学習環境の構築手順を解説します。具体的には次の5つのステップで環境を構築していきます:

  1. NVIDIAドライバのインストール:GeForce RTX 4060 Laptop GPU用の最新のStudioドライバをインストール
  2. Dockerのインストール:WSL2上のUbuntuにDockerをセットアップ
  3. NVIDIA Container Toolkitのインストール:DockerコンテナでGPUを利用するための設定
  4. Docker追加設定:自動起動の設定とsudoなしでの実行環境の整備
  5. PyTorch環境での動作確認:公式Dockerイメージを使用したGPU環境の検証

この手順により、WindowsマシンでGPUを活用した機械学習環境を構築することができます。

前提とする環境

  • OS: Windows 11
    • バージョン: 23H2
    • 64ビットオペレーティングシステム、x64ベースプロセッサ
    • NVIDIA GeForce RTX 4060 Laptop GPU
  • WSL2: Ubuntu 24.04.1 LTS

WSL2のインストール手順は次の記事で解説しています。
https://zenn.dev/enlog/articles/3df7bd9b2fe9df

1. NVIDIAドライバインストール

GPUを使用するために、以下の手順に沿って最新版のNVIDIAドライバをインストールします。

  • NVIDIA公式の最新のドライバーのダウンロードページを開きます。
  • 「ドライバーの手動検索」に検索条件を入力します。
  • 今回は、Windows11+GeForce RTX 4060なので、次のように入力します。
GeForce
GeForce RTX 40 Series
NVIDIA GeForce RTX 4060
Windows 11
Japanese
  • 入力後、「探す」ボタンを押下します。
  • 「探す」を実行するとGeForce Game Ready ドライバーとNVIDIA Studio ドライバーが表示されます。
    • Game Ready ドライバー: 新作ゲームなどの最新のゲームタイトルに最適化したドライバ
    • Studio ドライバー: グラフィックデザインなどのクリエイティブアプリの安定性が考慮されたドライバ
  • 今回は安定版であるStudio ドライバーをインストールします。
  • なおGame Ready ドライバーも機械学習環境として利用することは可能です。
  • Studio ドライバーのインストーラをダウンロードして、インストールを実行します。
  • 正常にインストールできているかを確認するため、コマンドプロンプトを起動して次のコマンドを実行し、NVIDIAドライバのバージョンを表示させます。
nvidia-smi

2. Dockerインストール

次は、以下の手順に沿ってDockerをインストールします。

  • Windows Terminalを起動して、新規タブとして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 Engine、containerd、Docker Composeのインストール
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# バージョン確認(正常にインストールされているかを確認)
docker --version

3. NVIDIA Container Toolkitインストール

次は、Dockerコンテナ内でNVIDIAのGPUを利用するために、NVIDIA社が提供するツールキットを公式ガイドの手順に沿ってインストールしていきます。

  • Windows Terminalを起動して、新規タブとしてUbuntuタブを開きます。
  • 次のコマンドを順番に実行していきます。
# リポジトリと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

# DockerがNVIDIAのランタイムを使用できるように設定
sudo nvidia-ctk runtime configure --runtime=docker

# Dockerデーモンを再起動
sudo systemctl restart docker

4. Docker追加設定

  • DockerとNVIDIA Container Toolkitのインストールが完了したら、次に示す追加設定を行います。
    • Dockerの起動を自動化
    • Dockerコマンドをsudoなしで実行できるようにする

Dockerの起動を自動化

以下の手順に沿ってDockerの起動を自動化します。

  • Windows Terminalを起動して、新規タブとしてUbuntuタブを開きます。
  • 次のコマンドを実行します。
sudo nano /etc/wsl.conf
  • 次の内容を追加します。
[boot]
systemd=true
  • Ctrl + Oで保存し、Enterを押します。
  • Ctrl + Xでエディタを終了します。
  • Ctrl + DでUbuntuを終了します。
  • Windows Terminalを起動して、新規タブとしてUbuntuタブを開きます。
  • 次のコマンドを実行し、systemdが有効になっているかを確認します。
ps --no-headers -o comm 1
  • 次の内容が出力されていれば有効化の設定が成功しています。
systemd
  • systemdが有効になったため、次のコマンドを順番に実行し、自動起動の設定と確認を行います。
# Dockerを自動起動に設定
sudo systemctl enable docker.service

# Dockerを起動
sudo systemctl start docker.service

# 正常に動作していることを確認
sudo systemctl status docker.service
  • Active: active (running)と表示されていれば成功しています。
  • qキーを押下して、表示モードから抜けます。

Dockerコマンドをsudoなしで実行できるようにする

次は、sudoを付けずにDockerコマンドを実行できるようにDockerグループの作成とユーザの登録を行います。

  • Windows Terminalを起動して、新規タブとしてUbuntuタブを開きます。
  • 次のコマンドを順番に実行します。
# Dockerグループの作成(実行しなくても存在しているはずだが、念のため)
sudo groupadd docker

# 現在のユーザをDockerグループに追加(任意のユーザを追加することも可能)
sudo usermod -aG docker $USER
  • Ctrl + DでUbuntuを終了します。
  • Windows Terminalを起動して、新規タブとしてUbuntuタブを開きます。
  • 次のコマンドを実行して動作確認します。
docker run hello-world

5. PyTorch公式のDockerイメージで動作確認

セットアップが完了したため、最後にPyTorch公式のDockerイメージで動作確認を行います。まず準備としてGPUがどのCUDA Versionに対応しているかを確認し、その後、PyTorch公式のDockerHubが提供するイメージを使用して動作確認を行います。

CUDA Versionの確認

  • NVIDIA公式ページでは必要な情報が見当たらなかったため、WikipediaのCUDAのページからVersionを確認していきます。
  • まず、GPUの型番がどのMicro-archtectureに対応しているかを特定します。
  • 今回のケースはGeForce RTX 4060なのでAda Lovelaceであるとわかります。
  • 次に、Micro-archtectureから対応するCUDA Versionを特定します。
  • 今回のケースではAda Lovelaceなので、11.8以降が対応しているとわかります。

PyTorch公式のDockerHubからイメージを選択

確認したCUDA Versionより利用可能なDockerイメージをPyTorch公式のDockerHubから選択します。

  • 選択したイメージを使用してdocker runを実行します。
docker run --gpus all -it --rm pytorch/pytorch:2.3.0-cuda12.1-cudnn8-runtime
  • 続けて、以下を実行してPythonインタープリンタを起動します。
python3
  • 次のコマンドを順番に実行し、動作確認をします。
import torch

print("PyTorch version:", torch.__version__)
print("CUDA available:", torch.cuda.is_available())
print("Number of GPUs:", torch.cuda.device_count())

if torch.cuda.is_available():
    print("GPU Name:", torch.cuda.get_device_name(0))
  • 期待される出力:
PyTorch version: 2.3.0
CUDA available: True
Number of GPUs: 1
GPU Name: NVIDIA GeForce RTX 4060 Laptop GPU
  • Ctrl + Dを押下してPythonインタープリンタを終了します。
  • もう一度Ctrl + Dを押下してDockerコンテナから抜けます。

まとめ

本記事では、Windows 11環境にWSL2とDockerを用いてGPU対応の機械学習環境を構築する手順を解説しました。主な内容は次の通りです:

  1. NVIDIAドライバの適切なバージョン(Studioドライバ)を選択・インストール
  2. WSL2上のUbuntuにDockerを導入し、基本的な設定を適用
  3. GPU利用のためのNVIDIA Container Toolkitをセットアップ
  4. より快適な開発環境のためのDocker追加設定(自動起動設定、sudoなしでの実行)
  5. PyTorch公式のDockerイメージを使用してGPU環境の動作確認を実施

これらの手順により、WindowsマシンでGPUを活用した機械学習の開発環境を構築できます。

参考記事

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installing-with-apt
https://en.wikipedia.org/wiki/CUDA#GPUs_supported
https://hub.docker.com/r/pytorch/pytorch/tags

Discussion