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をシームレスに利用できるようになります。
重要なチェックポイント:
- ホストマシンのNVIDIAドライバが最新であること
- NVIDIA Container Toolkitが正しくインストールされていること
- Docker runコマンドに
--gpusオプションが指定されていること - 使用するCUDAバージョンがホストドライバと互換性があること
パフォーマンスチップ:
- 大きなデータセットを扱う場合は、
-vオプションでホストのディレクトリをマウントするのではなく、Docker Volumeの使用を検討してください - 開発中は
--shm-sizeオプションで共有メモリを増やすことで、マルチプロセス処理のパフォーマンスが向上することがあります - 常に最新の安定版イメージタグを使用し、定期的にベースイメージを更新してください
この環境構築手順を踏むことで、再現性の高いGPU対応のAI開発環境を簡単に構築・共有できるようになります。チーム開発や実験環境の統一にも非常に有効です。