【Docker/環境】JupyterLabでGPU対応AI開発環境を構築する手順とトラブルシューティング

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

Dockerを使用してJupyterLab環境を構築した際、以下のような問題に直面することがあります。

  • JupyterLab内で!nvidia-smiを実行しても「command not found」と表示される
  • PyTorchやTensorFlowをインポートしてtorch.cuda.is_available()を実行するとFalseが返る
  • 「CUDA driver version is insufficient for CUDA runtime version」などのエラーメッセージが表示される
  • Dockerコンテナ起動時に「Could not load dynamic library ‘libcudart.so.11.0’」といったライブラリ関連のエラーが発生する

これらの問題は、ホストマシンにNVIDIA GPUとドライバが正しくインストールされていても、Docker環境がGPUを認識・利用できる設定になっていない場合に発生します。本記事では、NVIDIA Container Toolkitを使用した確実なGPU対応環境の構築手順と、発生しやすいエラーへの対処法を解説します。

2. 原因の解説:DockerのGPUサポートとNVIDIA Container Toolkit

従来のDocker環境は、デフォルトではホストマシンのGPUリソースにアクセスできません。GPUを利用するためには、NVIDIAが提供する「NVIDIA Container Toolkit」(旧NVIDIA Docker)が必要です。このツールキットは、Dockerコンテナ内からNVIDIA GPUとCUDAライブラリにアクセスするためのランタイム環境を提供します。

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

2.1 NVIDIA Container Toolkitがインストールされていない

Docker自体はインストールされていても、GPUサポートに必要なNVIDIA Container Toolkitがインストールされていない場合、コンテナ内からGPUを認識できません。

2.2 Dockerの実行コマンドにGPU関連のオプションが不足

Docker runコマンドで--gpus allオプションを指定しないと、コンテナにGPUリソースが割り当てられません。

2.3 CUDA/cuDNNのバージョン不一致

ホストのNVIDIAドライババージョン、コンテナ内のCUDA Toolkitバージョン、AIフレームワークが要求するCUDAバージョンの間に互換性がない場合、ライブラリの読み込みに失敗します。

3. 解決方法:ステップバイステップでの環境構築

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

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

# ホストマシンで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-container-toolkit

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

インストール後、以下のコマンドで動作確認ができます。

# テスト実行
sudo docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi

ステップ3: GPU対応JupyterLabコンテナの起動

公式のJupyter Docker Stackイメージをベースに、GPUサポートを有効にして起動します。

# GPUサポート付きでJupyterLabコンテナを起動
docker run -d 
  --name jupyter-gpu 
  --gpus all 
  -p 8888:8888 
  -v /path/to/your/workspace:/home/jovyan/work 
  -e JUPYTER_ENABLE_LAB=yes 
  jupyter/tensorflow-notebook:latest

ポイントは--gpus allオプションです。特定のGPUのみを割り当たい場合は、--gpus '"device=0,1"'のように指定します。

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

起動したJupyterLabにブラウザからアクセスし、新しいノートブックで以下を実行します。

# ノートブックセル内で実行
!nvidia-smi

import torch
print(f"PyTorch CUDA available: {torch.cuda.is_available()}")
if torch.cuda.is_available():
    print(f"GPU Device: {torch.cuda.get_device_name(0)}")

import tensorflow as tf
print(f"TensorFlow GPU available: {len(tf.config.list_physical_devices('GPU')) > 0}")

4. よくあるエラーと対処法

エラー1: 「docker: Error response from daemon: could not select device driver…」

このエラーはNVIDIA Container Toolkitが正しくインストールされていない場合に発生します。

# エラーメッセージ例
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].

解決策: ステップ2のNVIDIA Container Toolkitのインストールを再度実行し、Dockerデーモンを再起動します。

sudo systemctl daemon-reload
sudo systemctl restart docker

エラー2: 「Could not load dynamic library ‘libcudart.so.11.0’」

CUDAライブラリのバージョン不一致やパス設定の問題です。

# エラーメッセージ例
Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory

解決策:</strong 使用するDockerイメージのCUDAバージョンを、ホストのドライバがサポートするバージョンに合わせます。NVIDIAドライバとCUDAの互換性はNVIDIA公式ドキュメントで確認できます。例えば、CUDA 11.8が必要な場合は:

# CUDA 11.8ベースのイメージを使用
docker run --gpus all -it nvidia/cuda:11.8.0-base-ubuntu22.04

エラー3: JupyterLab内で「nvidia-smi: command not found」

ベースイメージにnvidia-smiコマンドが含まれていない場合に発生します。

解決策: Dockerfileでnvidia-utilsパッケージをインストールするか、既存コンテナ内でインストールします。

# Dockerfile内での対応例
FROM jupyter/tensorflow-notebook:latest

USER root
RUN apt-get update && apt-get install -y --no-install-recommends 
    nvidia-utils-535 
    && rm -rf /var/lib/apt/lists/*
USER $NB_UID

# 既存コンテナ内でのインストール
docker exec -it jupyter-gpu bash
# コンテナ内で(root権限が必要な場合)
apt-get update && apt-get install -y nvidia-utils-535

エラー4: 「CUDA out of memory」

GPUメモリが不足している場合のエラーです。複数のコンテナやプロセスでGPUメモリを共有している可能性があります。

解決策: Docker runコマンドでGPUメモリ制限を設定するか、不要なコンテナを停止します。

# GPUメモリ制限を設定(例: 4GBまで)
docker run --gpus '"device=0,memory=4"' ...

# 実行中のGPU使用コンテナを確認
docker stats

# 不要なコンテナを停止
docker stop container_name

5. 実践的なDockerfile例

カスタムGPU対応JupyterLab環境を構築するDockerfileの例です。

# Dockerfile
FROM nvidia/cuda:11.8.0-runtime-ubuntu22.04

# 基本ツールのインストール
RUN apt-get update && apt-get install -y 
    python3-pip 
    python3-dev 
    wget 
    curl 
    git 
    && rm -rf /var/lib/apt/lists/*

# JupyterLabのインストール
RUN pip3 install --upgrade pip
RUN pip3 install 
    jupyterlab 
    notebook 
    ipykernel 
    torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 
    tensorflow[and-cuda]

# 作業ディレクトリとユーザー設定
RUN useradd -m -s /bin/bash jovyan
USER jovyan
WORKDIR /home/jovyan/work

# JupyterLab設定
EXPOSE 8888
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root"]

このDockerfileをビルドして実行:

# イメージビルド
docker build -t custom-jupyter-gpu .

# コンテナ実行
docker run -d 
  --name my-jupyter 
  --gpus all 
  -p 8888:8888 
  -v $(pwd)/workspace:/home/jovyan/work 
  custom-jupyter-gpu

6. まとめ・補足情報

JupyterLabでGPU対応のAI開発環境を構築するには、NVIDIA Container Toolkitのインストールが必須です。正しく設定されていれば、Dockerコンテナ内からホストマシンのGPUをシームレスに利用できるようになります。

重要なチェックポイント:

  1. ホストマシンのNVIDIAドライバが最新であること
  2. NVIDIA Container Toolkitが正しくインストールされていること
  3. Docker runコマンドに--gpusオプションが指定されていること
  4. 使用するCUDAバージョンがホストドライバと互換性があること

パフォーマンスチップ:

  • 大きなデータセットを扱う場合は、-vオプションでホストのディレクトリをマウントするのではなく、Docker Volumeの使用を検討してください
  • 開発中は--shm-sizeオプションで共有メモリを増やすことで、マルチプロセス処理のパフォーマンスが向上することがあります
  • 常に最新の安定版イメージタグを使用し、定期的にベースイメージを更新してください

この環境構築手順を踏むことで、再現性の高いGPU対応のAI開発環境を簡単に構築・共有できるようになります。チーム開発や実験環境の統一にも非常に有効です。

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