【Docker/環境】JupyterLabでGPU対応AI開発環境を構築する手順とよくあるエラー解決法

問題の概要:JupyterLab環境でGPUが認識されない・利用できない

Dockerを使用してJupyterLabのAI開発環境を構築する際、特に深層学習モデルの学習や推論を行う場合、コンテナ内からGPUが認識されず、以下のようなエラーに遭遇することが頻繁にあります。

RuntimeError: No CUDA GPUs are available
# または
torch.cuda.is_available()  # Falseを返す
# また、nvidia-smiコマンド実行時に
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].

この問題は、DockerコンテナがホストマシンのGPUリソースにアクセスするための適切な設定が行われていない場合に発生します。NVIDIA GPUを搭載したマシンでTensorFlowやPyTorchを用いた開発を行う際、この設定ミスは生産性を大きく損ないます。

原因の解説:なぜDockerコンテナはデフォルトでGPUを認識しないのか

Dockerの標準エンジンは、ホストのハードウェアリソースを直接管理するように設計されていません。特にGPUのような特殊なデバイスにアクセスするには、NVIDIAが提供する「NVIDIA Container Toolkit」という追加のソフトウェアレイヤーが必要です。このツールキットがインストール・設定されていないと、Dockerコンテナは仮想化環境内に閉じ込められ、物理GPUの存在を検知することができません。

主な原因は以下の3つに分類されます:

  1. NVIDIA Container Toolkitの未インストール: DockerとGPUを連携させるための根本的なソフトウェアが欠如している。
  2. Dockerデーモンの再起動不足: ツールキットインストール後、Dockerサービスを再起動せず、設定が反映されていない。
  3. 不適切なDockerイメージの使用: CUDAやcuDNNなどの必要なライブラリを含まないベースイメージを使用している。

解決方法:ステップバイステップでの完全な環境構築手順

ステップ1: 前提条件の確認

まず、ホストマシンにNVIDIAドライバが正しくインストールされていることを確認します。

# ホストマシンで実行
nvidia-smi

このコマンドでGPU情報が表示されれば、ドライバは正常にインストールされています。表示されない場合は、NVIDIA公式サイトからドライバをインストールしてください。

ステップ2: NVIDIA Container Toolkitのインストール

Ubuntu/Debian系OSを例に、インストール手順を示します。

# パッケージリポジトリとGPGキーの設定
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

# ツールキットのインストール
sudo apt-get update
sudo apt-get install -y nvidia-docker2

# Dockerデーモンの再起動(必須)
sudo systemctl restart docker

注意点: `systemctl restart docker` を忘れると、設定が適用されず、エラーの原因となります。

ステップ3: GPU対応JupyterLab Dockerイメージの取得と実行

NVIDIAが提供する最適化されたベースイメージを使用することを強く推奨します。以下はPyTorch環境の例です。

# NVIDIAが提供するPyTorchイメージを取得
docker pull nvcr.io/nvidia/pytorch:23.10-py3

# GPU対応コンテナの起動(JupyterLab付き)
docker run --gpus all -it --rm -p 8888:8888 -v $(pwd):/workspace 
  nvcr.io/nvidia/pytorch:23.10-py3 
  jupyter lab --ip=0.0.0.0 --port=8888 --allow-root --no-browser

コマンドの重要な部分は `–gpus all` です。このフラグにより、コンテナがホストの全GPUにアクセスできるようになります。`-v $(pwd):/workspace` はカレントディレクトリをコンテナ内の `/workspace` にマウントし、データの永続化を実現します。

ステップ4: コンテナ内でのGPU認識確認

ブラウザで `http://localhost:8888` にアクセスし、JupyterLabを開きます。新しいノートブックを作成し、以下のPythonコードを実行してGPUが認識されているか確認します。

import torch
print(f"PyTorch version: {torch.__version__}")
print(f"CUDA available: {torch.cuda.is_available()}")
if torch.cuda.is_available():
    print(f"GPU device name: {torch.cuda.get_device_name(0)}")
    print(f"GPU device count: {torch.cuda.device_count()}")

期待される出力は以下の通りです:

PyTorch version: 2.1.0
CUDA available: True
GPU device name: NVIDIA GeForce RTX 4090
GPU device count: 1

ステップ5: Docker Composeを使用した高度な設定(オプション)

より複雑な環境(複数のボリュームマウント、環境変数設定など)を管理するには、`docker-compose.yml` ファイルを使用すると便利です。

version: '3.8'
services:
  jupyter-lab:
    image: nvcr.io/nvidia/pytorch:23.10-py3
    runtime: nvidia # ここが重要
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    ports:
      - "8888:8888"
    volumes:
      - ./notebooks:/workspace/notebooks
      - ./data:/workspace/data
    environment:
      - JUPYTER_TOKEN=mysecuretoken
    command: jupyter lab --ip=0.0.0.0 --port=8888 --allow-root --no-browser --NotebookApp.token=${JUPYTER_TOKEN}

このファイルを保存後、以下のコマンドで環境を起動できます。

docker-compose up

よくあるエラーとその解決策

エラー1: “Could not load dynamic library ‘libcudart.so.11.0′”

このエラーは、コンテナ内のCUDAバージョンとホストのNVIDIAドライババージョンが互換性がない場合に発生します。

解決策: ホストのドライババージョンを確認し、互換性のあるDockerイメージを選択します。NVIDIAのイメージタグは通常、CUDAバージョンを含んでいます(例: `23.10-py3` はCUDA 12.2に対応)。

# ホストのドライババージョン確認
nvidia-smi | grep "Driver Version"

エラー2: “Docker daemon does not support GPU”

Dockerデーモンの設定ファイル(`/etc/docker/daemon.json`)が正しく設定されていない可能性があります。

解決策: 設定ファイルの内容を確認・修正します。

# /etc/docker/daemon.json の内容確認
sudo cat /etc/docker/daemon.json
# 以下のような内容であることを確認
{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "default-runtime": "nvidia"
}
# 修正後、Dockerを再起動
sudo systemctl restart docker

エラー3: コンテナ内でnvidia-smiが実行できない

コンテナにNVIDIAのユーティリティがインストールされていない場合があります。

解決策: ベースイメージを変更するか、コンテナ内で必要なパッケージをインストールします。

# Dockerfileを使用してカスタムイメージを作成する例
FROM nvcr.io/nvidia/pytorch:23.10-py3
RUN apt-get update && apt-get install -y --no-install-recommends 
    nvidia-utils-535 
    && rm -rf /var/lib/apt/lists/*

まとめ・補足情報

JupyterLabでGPU対応のAI開発環境をDockerで構築するには、単にDockerイメージをpullして実行するだけでは不十分です。NVIDIA Container Toolkitのインストール、適切なランタイムフラグ(`–gpus all`)の指定、互換性のあるドライバとイメージの選択、これら3つの要素が揃って初めて、コンテナ内からGPUを活用した高速な計算が可能になります。

本手順を実施しても問題が解決しない場合は、以下の点を再確認してください:

  1. ホストマシンが実際にNVIDIA GPUを搭載しているか(クラウドインスタンスの場合はGPUタイプを選択しているか)
  2. 使用しているDockerイメージのタグが、ホストのCUDAドライババージョンと互換性があるか(NVIDIAの互換性表を参照)
  3. Dockerのバージョンが19.03以上であるか(古いバージョンでは `–gpus` フラグをサポートしていない)

最後に、本番環境ではセキュリティにも配慮してください。JupyterLabのトークンは推測されにくい強固なものを設定し、必要に応じてSSL/TLSによる通信の暗号化も検討しましょう。これで、再現性が高く、移植性に優れたGPU対応AI開発環境の構築が完了します。

この記事は役に立ちましたか?