WSL+Docker+VSCodeでCUDA環境を作成した備忘録

お疲れ様です。

最近は業務でDockerを使用することも増え、個人的やっている内容もDocker使えればみたいな場面が増えてきました。
そういう背景から勉強も兼ねてDockerの環境を構築していたのでその備忘録です。
基本的には参考サイトのリンク集です。 Linuxの知識はそれほど無いのでいろんな記事を参考にさせていただきました。

環境構築

Visual Studio Codeのインストール

こちらからインストールできます。(既にインストール済みの場合はスキップでOK)
code.visualstudio.com

インストールできたら最低限WSLの拡張機能は入れておきましょう。

WSLのセットアップ

公式ドキュメントを参考にWSLのインストールをします。
learn.microsoft.com

PowerShellを起動し下記のコマンドを入力することでインストールできます。

wsl --install

インストールできるディストリビューションは下記のコマンドで確認できます。install時に指定することが可能です。指定しない場合はUbuntuの最新バージョン(現在だと24.04)がインストールされます。

wsl --list --online

インストールできたら、一旦Windowsを再起動し、その後Ubuntuを立ち上げます。Ubuntuのユーザの作成など初期設定を済ませたら次に進みます。

Dockerのインストール

ここからはUbuntuを立ち上げての操作になります。
公式のドキュメントに記載されているUbuntuでのインストールコマンドを順に実行しました。 docs.docker.com 記事執筆時点(2025年2月)の実行コマンドを引用しておきます。もしかすると公式ドキュメントが改定されているかもなので、そちらを参照するのが確実だとは思います。

  1. 古いバージョンのパッケージのアンインストール(競合を防ぐため)

    for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

  2. Docker公式のGPGキーを追加

    sudo apt-get update
    sudo apt-get install ca-certificates curl
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc

  3. aptリポジトリを追加

    echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
    $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update

  4. Dockerをインストール

    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

NVIDIA Container Toolkitのインストール

こちらも公式ドキュメント記載のインストールコマンドを使用しました。
docs.nvidia.com 例によって記事執筆時点(2025年2月)の実行コマンドを引用しておきます。

  1. GPGキーの追加+aptリポジトリを追加

    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

  2. パッケージリストの更新

    sudo apt-get update

  3. NVIDIA Container Toolkitをインストール

    sudo apt-get install -y nvidia-container-toolkit

下記のコマンドで正常にGPUを認識するか確認ができます。nvidia-smiまで正常に動けばOKです。

docker run --rm --gpus all nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04 nvidia-smi

動作確認

準備

UbuntuからコマンドでVSCodeを開くか、VSCodeからWSLにアクセスし、WSL上のフォルダを開いた状態にします。
VSCode拡張機能でDev Containersをインストールしておきます。

コンテナの作成

VSCodeで作業フォルダ内にdevcontainerとDockerFileを作成します。「.devcontainer」フォルダ内にdevcontainer.json、「.devcontainer」フォルダと同じ階層にDockerFileを設置しています。

  • devcontainer.json "build"の項目でこの後紹介するDockerFileを指定しておきます。また、"runArgs": ["--gpus", "all"]の部分では使用するGPUを割り当てますが、基本的にallで大丈夫だと思います。
{
    "name": "cuda",
    "build": {
      "dockerfile": "../Dockerfile"
    },
    "settings": {
      "terminal.integrated.defaultProfile.linux": "bash"
    },
    "extensions": [
      "ms-python.python",
      "kevinrose.vsc-python-indent",
      "mhutchie.git-graph",
      "eamodio.gitlens",
      "ionutvmi.path-autocomplete"
    ],
    "forwardPorts": [8000],
    "remoteUser": "root",
    "runArgs": ["--gpus", "all"]
}
  • DockerFile FROMの部分でベースイメージを指定しています。今回はバージョン11.8のcudaを指定しています。それ以外のバージョンも選べるので必要に応じて切り替えてください。 (Docker Hub: https://hub.docker.com/r/nvidia/cuda/tags
    あとはPythonやGitのインストールなど、こちらも必要に応じて書き換えると良いと思います。
FROM nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04

# Set non-interactive mode for apt-get
ENV DEBIAN_FRONTEND=noninteractive

# Install system dependencies
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    python3-venv \
    git \
    && rm -rf /var/lib/apt/lists/*

# Set Python3 as default
RUN ln -s /usr/bin/python3 /usr/bin/python

# Upgrade pip
RUN python -m pip install --upgrade pip

# Default command
CMD ["/bin/bash"]

ここまで準備したらVSCodeからコンテナで再度開く(Reopen in Container)をクリックしてコンテナを立ち上げます。エラーが出なければ成功です。

実際に動かしてみる

nvidia-smiも問題なく通り、GPUを認識しています。
また、試しにPytorchをインストールして確認してみましたがこちらも大丈夫そうですね。

作成したファイル(Dockerfile等)はこちらに保存しています。 github.com

参考サイト

最後に参考にさせていただいたサイトを載せておきます。