
機械学習やディープラーニングの開発では、フレームワークごとに対応するCUDAバージョンが異なるため、複雑な組み合わせ管理が必要です。従来の環境構築において、PyTorch 1.12はCUDA 11.6、TensorFlow 2.10はCUDA 11.2といった複雑な管理が求められ、プロジェクトごとに環境を切り替える際にも手間と時間がかかっていました。
しかし、Dockerを使えば、必要なCUDAやフレームワークがセットになったイメージを活用でき、ホスト環境に依存せず環境の切り替えも簡単になります。
本記事では、GPUを活用した機械学習やディープラーニングに取り組むなかで、Dockerの基本操作はできるもののGPU連携は未経験という方を対象に、Windows/WSL2およびLinuxでのGPU環境構築の手順を解説します。

さくらインターネットが提供している高火力シリーズ「PHY」「VRT」「DOK」を横断的に紹介する資料です。お客様の課題に合わせて最適なサービスを選んでいただけるよう、それぞれのサービスの特色の紹介や、比較表を掲載しています。
1. DockerでGPUが使えるか確認する
手元の環境でGPUが使えるかどうか、すぐに確認できるコマンドから紹介します。
1-1. 基本的な動作確認コマンド
以下のコマンドでGPUの情報が表示されれば、DockerからGPUが利用可能です。
# NVIDIA公式のCUDAイメージでGPU情報を表示
docker run –gpus all nvidia/cuda:12.0-base nvidia-smi
成功した場合の出力例:
+—————————————————————————–+
| NVIDIA-SMI 525.60.11 Driver Version: 525.60.11 CUDA Version: 12.0 |
|——————————-+———————-+———————-+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce … Off | 00000000:01:00.0 Off | N/A |
| 30% 45C P0 150W / 250W| 0MiB / 8192MiB | 0% Default |
+——————————-+———————-+———————-+
GPU名やメモリ容量が正しく表示されていれば、DockerからGPUが正常に認識されています。
エラーが発生した場合、以下のようなメッセージが表示される可能性があります。
- docker: Error response from daemon: could not select device driver
- nvidia-smi: command not found
- Failed to initialize NVML: Driver/library version mismatch
これらのエラーが出た場合は、Docker、NVIDIA Container Toolkit、またはドライバの設定が必要です。次のセクションでくわしく解説する、環境別の構築手順に進みましょう。
2. UbuntuでDocker GPUを使うための環境構築手順
Linuxベースの開発環境では、以下の4つのステップでGPU環境を構築できます。
2-1. NVIDIAドライバのインストールと確認方法
まず、システムにNVIDIAドライバが正しくインストールされているか確認します。
nvidia-smi # GPU情報の確認
このコマンドでGPU情報が表示されない場合は、ドライバのインストールが必要です。ドライバのバージョンは使用するCUDAバージョンに対応している必要がありますが、最新版をインストールしておけば多くのCUDAバージョンに対応できます。Ubuntuの場合、以下のコマンドで最新ドライバをインストール可能です。
sudo apt update # システムの更新
sudo apt install nvidia-driver-525 # NVIDIAドライバのインストール
sudo reboot # システム再起動
再起動後、再度nvidia-smiを実行してGPU情報が表示されることを確認しましょう。
2-2. Docker+NVIDIA Container Toolkitの導入ステップ
Dockerと、NVIDIA Container Toolkitをインストールします。これにより、Dockerコンテナ内からホストのGPUリソースにアクセスできる環境が整います。
まず、Dockerをインストールします。
# システムの更新と必要パッケージのインストール
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release
# DockerのGPGキーを追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Dockerリポジトリを追加
echo “deb [arch=$(dpkg –print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# リポジトリ更新とDocker CEのインストール
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
次に、NVIDIA Container Toolkitをインストールします。
# ディストリビューション情報を取得
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
# NVIDIA Container ToolkitのGPGキーを追加
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add –
# NVIDIA Container Toolkitリポジトリを追加
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
# NVIDIA Container Toolkitをインストール
sudo apt update
sudo apt install nvidia-container-toolkit
# Dockerサービスを再起動
sudo systemctl restart docker
2-3. GPUコンテナの動作確認
インストールが完了したら、GPUコンテナを起動してGPUが認識されるか確認します。
# GPUコンテナでGPU情報を表示
sudo docker run –gpus all –rm nvidia/cuda:12.0-base nvidia-smi
正常にGPU情報が表示されれば、Docker環境でのGPU利用準備は完了です。
2-4. PyTorchやTensorFlowでの動作テスト
実際の機械学習フレームワークでGPUが利用できるか確認しましょう。PyTorchの場合は以下のコマンドで確認できます。
# PyTorchでGPU利用可能かチェック
sudo docker run –gpus all –rm -it pytorch/pytorch:latest \
python -c “import torch; print(f’CUDA available: {torch.cuda.is_available()}’); print(f’GPU count: {torch.cuda.device_count()}’)”
CUDA available: Trueと表示されれば、PyTorchからGPUが正常に利用できます。
3. Windows/WSL2でDocker GPUを使うための構築手順
Windows環境でのGPU利用は、Docker DesktopとWSL2の連携により実現できます。Linux環境と比べて設定項目が多いため、あらかじめ手順を確認し順番に進めていきましょう。
3-1. 必要環境とWSL2の準備
Windows環境でDockerからGPUを利用するには、WSL2を有効にする必要があります。また、WSL2を利用したGPUアクセスは、比較的新しい機能のため、以下の最小要件を満たしていることが重要です。
- Windows 10(ビルド19041以降)またはWindows 11
- NVIDIA GeForce Game ReadyドライバまたはNVIDIA RTX Quadroドライバ
WSL2を有効にするには、PowerShellを管理者権限で開き、以下のコマンドを順に実行してください。
wsl –install
wsl –update
再起動後、Microsoft StoreからUbuntu 20.04またはUbuntu 22.04をインストールします。
3-2. 設定とGPU共有の有効化
Docker Desktop for Windowsをインストールし、以下の設定をおこないます。
- 「Use the WSL 2 based engine」を有効にする
- 「Resources」→「WSL Integration」でUbuntuとの連携を有効化する
- 「Settings」 → 「Features in development」で「Use GPU」オプションを有効にする
これにより、WSL2を介してGPU共有が可能になります。
3-3. WSL2内での動作確認手順
WSL2のUbuntu環境で、以下のコマンドを実行してGPUが認識されるか確認します。
# WSL2内でGPU動作確認
docker run –gpus all –rm nvidia/cuda:12.0-base nvidia-smi
Windows環境では、ホストOSでnvidia-smiが動作しなくても、WSL2内で正常にGPUが利用できるケースがあります。
3-4. Windows特有のエラー対処法
Windows環境で発生しやすいエラーと、その対処法を紹介します。
「nvidia-smi: command not found」エラー
WSL2内で表示された場合、PowerShellでnvidia-smiを実行して確認してください。また、Docker Desktopが最新版であることを確認し、必要に応じてアップデートしてください。
「Failed to initialize NVML」エラー
NVIDIAドライバのバージョン不整合が原因である可能性が高いため、ドライバを再インストールするか、Windows Updateで最新のドライバを適用してみてください。
これらの対応により、多くのGPU関連のトラブルは解決されるでしょう。
4. Docker GPUを活用するための前提知識と仕組み
DockerでGPUを活用する最大のメリットは、環境の分離とバージョン管理の簡素化です。ここでは、その仕組みについて理解を深めましょう。
4-1. GPUをDockerから使う仕組み
通常、Dockerコンテナはホストシステムから隔離された環境で動作するため、GPUデバイスに直接アクセスできません。この問題を解決するのがNVIDIA Container Toolkitです。
NVIDIA Container Toolkitは、Dockerコンテナからホストマシン上のGPUデバイスおよびNVIDIAドライバへのアクセスを可能にするツールです。これにより、Dockerコンテナ内でGPUを利用した機械学習やディープラーニングが可能になります。
4-2. 必要なソフトウェア構成
DockerでGPUを利用するには、以下の構成が必要です。
ホストOS側に必要なもの:
- NVIDIAドライバ
- Docker Engine
- NVIDIA Container Toolkit
コンテナ側に必要なもの:
- CUDAランタイム(通常はベースイメージに含まれる)
- 機械学習フレームワーク(PyTorch、TensorFlowなど)
ここで重要なのは、ホストOS側にCUDA Toolkitをインストールする必要はないという点です。Dockerを利用すれば、プロジェクトに応じて必要なCUDAバージョンをコンテナ内で柔軟に管理できます。
4-3. よくある誤解と落とし穴
GPU環境構築においては、以下のような誤解がよく見られます。
誤解①「ホストにCUDAをインストールする必要がある」
ホストに必要なのはNVIDIAドライバのみであり、CUDA Toolkitは不要です。
誤解②「ドライバのバージョンとCUDAのバージョンを完全に一致させる必要がある」
NVIDIAドライバが対応するCUDAバージョンの範囲内であれば、異なるCUDAバージョンのコンテナを問題なく利用できます。
また、以下のような構成ミスが動作不良の原因となることもあるので注意が必要です。
- –gpus allオプションの付け忘れ
- Docker Composeでruntime: nvidiaの記述漏れ
- 古いDocker Engineの使用
- WSL2環境におけるDocker Desktopの設定不足
これらの点に注意することで、より安定したGPU環境の構築が可能になります。
5. 応用編:Docker Composeや複数GPU構成への対応
本格的な機械学習プロジェクトでは、設定ファイルを用いた環境管理や、複数GPUの活用が重要となります。ここでは、Docker ComposeでのGPU指定方法や、複数GPUを制御する設定について解説します。
5-1. Docker ComposeでGPUを指定する方法
Docker Composeを使えば、複雑なGPU環境も設定ファイルで管理できます。以下は基本的な設定例です。
version: ‘3.8’
services:
ml-training:
image: pytorch/pytorch:latest
runtime: nvidia
environment:
– NVIDIA_VISIBLE_DEVICES=all
volumes:
– ./data:/workspace/data
command: python train.py
具体的な使用方法:
- 上記の内容をdocker-compose.ymlとして保存
- 同じディレクトリにdataフォルダとtrain.pyを配置
- docker-compose upコマンドで実行
この設定により、GPUを1つ使用するPyTorchコンテナを簡単に起動できます。
※Swarmモードを使わず、docker compose up コマンドでの実行を想定しています。複数GPUを指定する場合は、 NVIDIA_VISIBLE_DEVICES=0,1 のように環境変数で指定します。
5-2. 複数GPUを指定・制御する方法
前節(5-1)で紹介したNVIDIA_VISIBLE_DEVICESによる指定方法は、従来のDocker運用との互換性が高く、個人開発や小規模プロジェクトに適しています。一方で、Swarmモードや本番環境でより厳密なGPU制御をしたい場合は、deploy設定を使った構成が有効です。
以下は、特定のGPUを指定して使用する設定例です。
services:
ml-training:
image: pytorch/pytorch:latest
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: [‘0’, ‘2’]
capabilities: [gpu]
この設定では、GPU 0とGPU 2を使用するように指定しています。デバイスごとの管理が必要な大規模プロジェクトでは、この方式を用いると柔軟な構成が可能になります。
5-3. 複数プロジェクトでのリソース共有・制限方法
複数のプロジェクトで同じGPU環境を利用する場合、リソースの競合を避けるためにメモリ使用量の制限やCPU使用率の制御が有効です。
たとえば、Docker Composeのmem_limitやcpusオプションを利用すれば、特定のコンテナがホストマシンのリソースを占有しないように調整できます。
このように、適切なリソース管理をおこなうことで、複数のチームが同一のGPUシステムを効率よく活用することが可能です。
6. よくあるエラーとトラブルシューティング
GPU環境の構築中や運用中に発生しやすいエラーのパターンと、具体的な対処法を紹介します。
6-1. GPU未認識時のチェックリスト
GPUが認識されない場合は、以下の項目を順番にチェックしてください。
- ホスト側でGPUが認識されている(nvidia-smi)
- Dockerが正しくインストールされている(docker –version)
- NVIDIA Container Toolkitがインストールされている (nvidia-container-toolkit –version)
- GPUコンテナでGPU情報が表示される(docker run –gpus all –rm nvidia/cuda:12.0-base nvidia-smi でDockerからのGPUアクセスをテスト)
- 上記で問題がある場合、Dockerサービスを再起動して再確認(sudo systemctl restart docker)
- ユーザーがdockerグループに追加されている(groups $USER | grep docker)
6-2. ドライバ・CUDAのバージョン不整合の対処法
「CUDA driver version is insufficient for CUDA runtime version」エラーが表示される場合、ホスト側のNVIDIAドライバが古い可能性があります。最新のドライバにアップデートしてください。
「docker: Error response from daemon: could not select device driver」エラーは、NVIDIA Container Toolkitのインストール不備が原因である可能性があります。手順を再確認し、Dockerサービスの再起動を試してください。
また、環境変数の設定ミスや、ユーザーがdockerグループに追加されていないことが原因の場合もあります。
まとめ
Dockerを活用したGPU環境は、環境構築の柔軟性と再現性を高め、開発効率を大幅に向上させる強力な手段です。とくに機械学習やディープラーニングに取り組む現場では、その利便性と拡張性が不可欠な要素となっています。
本記事では、LinuxおよびWindows/WSL2でのGPU対応Docker環境の構築方法や、よくあるエラーとその対処法を解説しました。
しかし、ローカルGPU環境には、初期投資・物理スペース・電力消費などの制約があります。
こうした課題をクリアする選択肢として、クラウドGPUの活用が注目されています。
さくらインターネットの高火力シリーズは、国内データセンターで運用される高性能GPU(NVIDIA H100/H200など)を提供しており、Docker環境でもその性能を最大限に引き出す構成が可能です。物理インフラの準備や運用管理の負担を抑えつつ、開発規模やフェーズに応じて柔軟にGPUリソースを確保できます。
Docker+GPU環境を素早く立ち上げたい方、オンプレミスの制限を超えてAI開発を加速させたい方は、ぜひご検討ください。

さくらインターネットが提供している高火力シリーズ「PHY」「VRT」「DOK」を横断的に紹介する資料です。お客様の課題に合わせて最適なサービスを選んでいただけるよう、それぞれのサービスの特色の紹介や、比較表を掲載しています。