5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#0237(2025/09/07)WSL上のUbuntuにNVIDIA Container Toolkitをセットアップする

5
Posted at

WSL上のUbuntuにNVIDIA Container Toolkitをセットアップする

WSL2 上の Ubuntu 24.04(noble)で NVIDIA Container Toolkit を正しくセットアップし、docker run / docker compose から GPU を使える状態にするまでの流れを、コマンドの意味と背景を添えて解説します。単なるコピペ手順ではなく、なぜこの順番で何をしているのかを理解するのがゴールです。


前提(このガイドが想定する環境)

  • Windows 11 + WSL2 の Ubuntu 24.04(noble)
  • Windows 側に NVIDIA ドライバが導入済み(WSL 対応)
  • WSL 内で Docker Engine(dockerd) を直接使う想定(→ Docker Desktop のエンジンを使う場合は多くの設定が Desktop 側で吸収されます)
  • sudo が使えること

補足:WSL では GPU のカーネルドライバは Windows 側が担います。WSL 内では nvidia-smi などのユーザーランドと、Docker が GPU を使うためのランタイム(NVIDIA Container Toolkit)を用意すれば良い、という役割分担です。


セットアップコマンド

# 1) リポジトリと鍵(Ubuntu 24.04 / noble 想定)
sudo apt-get update
sudo apt-get install -y curl gpg

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
 | sudo gpg --dearmor -o /etc/apt/keyrings/nvidia-container-toolkit.gpg

curl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
 | sed 's#deb https://#deb [signed-by=/etc/apt/keyrings/nvidia-container-toolkit.gpg] https://#' \
 | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update

# 2) ツールキット導入
sudo apt-get install -y nvidia-container-toolkit

# 3) Docker に組み込み
sudo nvidia-ctk runtime configure --runtime=docker

# 4) デーモン再起動(WSL は systemd ないことがあるので両対応)
sudo systemctl restart docker 2>/dev/null || sudo service docker restart

# 5) ランタイム認識の確認("Runtimes: runc nvidia" と出ればOK)
docker info | grep -E 'Runtimes|Default Runtime'

# 6) テスト
docker run --rm --gpus all nvidia/cuda:12.6.2-runtime-ubuntu22.04 nvidia-smi

何をセットアップしているのか(全体像)

  1. APT の信頼設定:NVIDIA の公式リポジトリ鍵(GPG)を登録
  2. APT のソース追加libnvidia-container の安定版リポジトリを system に教える
  3. ツールキット導入nvidia-container-toolkit をインストール
  4. Docker 連携nvidia-ctk で Docker に NVIDIA ランタイムを登録
  5. Docker 再起動:設定反映
  6. 検証docker infonvidia/cuda イメージで動作確認

この 1→6 を通すと、Docker デーモンは --gpus all の要求を満たせるようになり、Compose の devices 予約も機能します。


ステップごとの深掘り

1) APT の下準備

sudo apt-get update
sudo apt-get install -y curl gpg

なぜ:外部リポジトリの鍵や list を取得するために curl と鍵登録用の gpg を入れます。apt-get update は既存ソースの索引更新。

2) 公式鍵を system keyring に保存

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
 | sudo gpg --dearmor -o /etc/apt/keyrings/nvidia-container-toolkit.gpg

なぜ:APT はリポジトリのメタデータに署名があると、その署名をこの鍵で検証します。信頼できる配布元から来たことを確認する重要ステップです。--dearmor は ASCII 鍵をバイナリ形式に変換して keyring として使えるようにしています。

3) APT ソースを追加

curl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
 | sed 's#deb https://#deb [signed-by=/etc/apt/keyrings/nvidia-container-toolkit.gpg] https://#' \
 | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update

なぜ:APT に "どこを見に行けばパッケージが取れるか" を教えます。signed-by=... を付けて、そのリポジトリの検証にさきほどの鍵を使うよう明示しています。apt-get update で新規ソースの索引を取り込みます。

4) ツールキットを導入

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

なぜ:Docker が GPU を扱うためのランタイム(nvidia-container-runtime 等)と、要件チェックや設定用の nvidia-ctk を含むメタパッケージです。WSL の場合、カーネルモジュールは Windows 側にあるため、ここでは “ユーザーランド+ランタイム” を整備するイメージです。

5) Docker にランタイムを登録

sudo nvidia-ctk runtime configure --runtime=docker

なぜ:Docker デーモンの設定(通常は /etc/docker/daemon.json)に "runtimes": {"nvidia": { ... }} を自動で追記します。これにより Docker は --gpus や Compose の devices 予約を解釈し、NVIDIA ランタイム経由でコンテナを起動できるようになります。

6) Docker を再起動

sudo systemctl restart docker 2>/dev/null || sudo service docker restart

なぜ:デーモンの設定変更は再起動しないと反映されません。WSL は systemd が有効でないケースもあるので両対応コマンドにしています。

7) 動作確認

docker info | grep -E 'Runtimes|Default Runtime'

狙いRuntimes: runc nvidia のように nvidia が並んでいることを確認。必要なら Default Runtimerunc のままにして、起動ごとに --gpus all を付ける運用でも問題ありません。

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

狙い:ホストのドライバとコンテナの CUDA の 互換を実機で検証。nvidia-smi が GPU を列挙できれば成功です。


WSL 特有の注意点

  • nvidia-smi の場所:WSL では /usr/lib/wsl/lib/nvidia-smi にあります。PATH に通しておくと快適。
  • どの Docker デーモンを使っているかdocker infoOperating System が "Docker Desktop" と出るなら Desktop エンジン。Desktop を使う場合は GPU 有効化を Docker Desktop 側の設定で行うのが王道で、WSL 内に nvidia-container-toolkit を入れなくても動きます。
  • CUDA 版数の要件:コンテナのタグ(例:12.9)がホストのドライバ最低要件を上回ると、nvidia-container-cli: requirement error: cuda>=... で落ちます。基本は ホストの “CUDA Version” 以下のタグを選ぶか、ホストドライバを更新します。

よくあるつまずき

  • Docker を再起動していない:設定反映されず could not select device driver "" with capabilities: [[gpu]] が続発。
  • 古いリポジトリ URL を使って 404stable/deb/nvidia-container-toolkit.list を使う(本記事のコマンド)。
  • Compose が GPU を掴めないdeploy.resources.reservations.devicescapabilities: [gpu])の書式を確認。runtime: nvidia は古い流儀。
  • WSL 内の nvidia-smi が見つからない:PATH に /usr/lib/wsl/lib を追加。
5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?