さくらインターネット
さくマガ公式SNS
お問い合わせ

GPU対応Dockerコンテナ構築ガイド。環境構築から運用時の注意点まで解説

AI・機械学習プロジェクトにおいて、GPU対応Dockerコンテナの構築は、環境の一貫性と高性能の両立に不可欠です。Dockerコンテナを活用することで、開発環境と本番環境の差異を解消し、チーム間での環境共有も容易になります。

本記事では、NVIDIAドライバとCUDAの互換性管理、PyTorchやTensorFlowを用いた実践的な活用法、さらには運用時のトラブルシューティングに至るまでを詳しく解説します。「NVIDIA -docker環境を自走で構築・運用できる」ことを目指す技術担当者に向けた内容です。

なお、Dockerについて基礎から学びたい方は、まず以下の記事をご覧ください。

Dockerコンテナとは?仕組みや利用するメリット・基本的な使い方をわかりやすく解説!

1. GPUコンテナの基本概念と技術的背景

GPUコンテナを効果的に活用するには、CPUコンテナとの違いや、GPUコンテナ特有の技術的仕組みを理解しておくことが重要です。

1-1. CPUコンテナとの違いと選択基準

CPUとGPUの最大の違いは、演算処理の並列性にあります。GPUは単純な演算を大量に並列処理することに特化しており、特に機械学習の行列演算では、CPUに比べて数十倍〜数百倍の高速化が期待できます。

具体的な選択基準:

  • データサイズ: 1GB以上の大規模データではGPUの活用が効果的
  • 処理時間: CPUで数時間以上かかる処理は、GPU導入の検討価値あり
  • 用途別推奨:
    • 深層学習の訓練: GPUはほぼ必須
    • 推論処理: データ量に応じてGPU/CPUを使い分け
    • データ前処理: 基本的にCPUで十分対応可能

GPU導入は段階的に進めるのがおすすめです。開発初期は小規模GPU(例:GTX 1660 Super)で開始し、必要に応じて高性能GPU(例:RTX 4090、A100など)へのスケールアップを検討しましょう。

1-2. CUDAドライバとコンテナの関係性

GPUコンテナを動作させるには、ホスト側のNVIDIAドライバと、コンテナ内のCUDAライブラリとの適切な連携が不可欠です。

新しいドライバは古いCUDAバージョンとの互換性を保つことができますが、その逆(古いドライバで新しいCUDA)は基本的にサポートされません。

CUDAバージョンと必要な最小ドライババージョンの対応表

CUDAバージョン必要な最小ドライババージョン
CUDA 11.8450.80.02以降
CUDA 12.0525.60.13以降
CUDA 12.1530.30.02以降
CUDA 12.2535.54.03以降

使用するCUDAバージョンに応じて、ホストにインストールすべきドライババージョンを確認しましょう。NVIDIA Container Toolkitは、これらの互換性チェックを自動化し、適切なライブラリのマッピングを行います。

この仕組みにより、コンテナ内にNVIDIAドライバを含める必要がなく、軽量なDockerイメージの維持が可能になります。

AI開発環境全体の設計やチーム開発での環境構築については以下の記事で詳しく解説していますので、あわせてご覧ください。

AI開発環境の選び方と構築指南:小規模開発から大規模チーム開発まで

2. GPU対応Dockerコンテナの構築手順

GPU対応コンテナを構築するために必要な環境準備からセットアップ、動作確認までの手順を解説します。

2-1. 環境要件とNVIDIA Container Toolkitインストール

GPU対応コンテナの構築には、以下の環境を整える必要があります。

  • NVIDIA GPU(GeForce、Quadro、Tesla系列)
  • Linux系OS(Ubuntu 18.04以降、CentOS 7以降推奨)
  • NVIDIA Driver(440.33以降)
  • Docker CE 19.03以降
  • NVIDIA Container Toolkit

NVIDIA Container Toolkitは、DockerコンテナがホストのGPUリソースにアクセスするための中核ツールです。これを導入することで、コンテナ内でGPUを活用できるようになります。

※Windows環境で構築する場合は、WSL2の利用が必要です。Microsoft公式ガイドを参照してください。詳しいセットアップ手順については、以下の記事で解説しています。

DockerでGPUを使う方法とは。構築手順・動作確認・エラー対応をわかりやすく解説

2-2. Ubuntu環境でのセットアップ手順

以下では、Ubuntu環境でのセットアップ手順を紹介します。

ステップ1:NVIDIAドライバの確認とインストール

まず、ドライバの状態を確認します。NVIDIAドライバの詳細情報や最新版については、NVIDIA公式サイトをご参照ください。

# 現在のドライバ状況を確認

nvidia-smi

このコマンドが実行できない場合:

nvidia-smi: command not foundと表示された場合は、以下の手順でインストールします。

# システムに適合する推奨ドライバを確認

ubuntu-drivers devices

# 推奨ドライバを自動インストール

sudo ubuntu-drivers autoinstall

# または、特定バージョンを指定してインストール

# sudo apt install nvidia-driver-525

# ドライバ適用のためシステム再起動

sudo reboot

正常動作時の出力例:

再起動後、nvidia-smiを実行すると以下のような情報が表示されます。

+—————————————————————————–+

| NVIDIA-SMI 525.60       Driver Version: 525.60       CUDA Version: 12.0   |

|——————————-+———————-+———————-+

| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |

|   0  NVIDIA GeForce …  Off  | 00000000:01:00.0  On |                  N/A |

| 30%   45C    P8    15W / 250W |    512MiB /  8192MiB |      2%      Default |

+——————————-+———————-+———————-+

GPU名、ドライババージョン、メモリ容量などが表示されれば正常です。

ステップ2: Docker CEのインストール

次に、Docker CEをインストールします。Dockerの公式リポジトリを追加してから、最新版をインストールする手順です。

# 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

Dockerのインストールが完了したら、バージョンを確認します。

# Dockerインストールの確認

docker –version

Docker version 24.0.0のような出力が表示されれば、インストール成功です。

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

最後に、NVIDIA Container Toolkitをインストールします。詳しいインストール手順やトラブルシューティングについては、NVIDIA公式インストールガイドもご参照ください。

# NVIDIA Container ToolkitGPGキーとリポジトリ追加

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg –dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

# NVIDIA Container Toolkitのインストール

sudo apt update && sudo apt install nvidia-container-toolkit

# Dockerデーモンの設定を更新

sudo nvidia-ctk runtime configure –runtime=docker

# Dockerサービスの再起動(新しい設定を適用)

sudo systemctl restart docker

これで環境準備が完了しました。

2-3. 動作確認

すべてのインストールが完了したら、GPUコンテナが動作するかテストを行います。

docker run –rm –gpus all nvidia/cuda:11.8-base-ubuntu20.04 nvidia-smi

# NVIDIA公式のCUDAイメージでGPU情報を表示

コンテナ内からホストのGPU情報が表示されれば成功です。

エラーが発生する場合は、再起動を行ってください。

# Dockerサービスの再起動

sudo systemctl restart docker

3. GPUコンテナの実践的活用法

機械学習開発やクラウド環境での実践的な活用方法を解説します。

3-1. PyTorch・TensorFlowでの機械学習環境の構築例

機械学習開発では、公式Dockerイメージをベースに必要なライブラリを追加する方法が効率的です。

PyTorch環境のDockerfile作成

プロジェクトのルートディレクトリに以下の内容を「Dockerfile」というファイル名(拡張子なし)で保存します。

# PyTorchの公式GPU対応イメージをベースとして使用

FROM pytorch/pytorch:1.13.0-cuda11.6-cudnn8-devel

# 作業ディレクトリを設定

WORKDIR /workspace

# プロジェクトで使用するPythonライブラリの一覧をコピー

COPY requirements.txt .

# 機械学習に必要なライブラリをインストール

RUN pip install –no-cache-dir -r requirements.txt

# プロジェクトファイルをコンテナにコピー

COPY . .

# コンテナ起動時のデフォルトコマンド

CMD [“python”, “train.py”]

requirements.txtの例:

プロジェクトで使用する追加のPythonライブラリを記載したファイルです。以下のように作成してください。

numpy==1.24.3

pandas==2.0.2

scikit-learn==1.3.0

transformers==4.30.0

ビルドと起動:

# Dockerイメージをビルド

docker build -t my-pytorch-project .

GPU利用の確認

# PyTorchGPU利用可能かチェック

docker run –gpus all –rm -it pytorch/pytorch:2.0.1-cuda11.8-cudnn8-runtime \

  python -c “import torch; print(f’CUDA available: {torch.cuda.is_available()}’)”

「CUDA available: True」と表示されれば成功です。実際の機械学習タスクでは、GPUを活用することでCPU環境と比較して大幅な処理時間短縮が期待できます。

3-2. クラウド環境での運用と最適化

主要クラウドプロバイダでのGPUコンテナ運用について解説します。AWS ECS(Amazon Elastic Container Service)ではEC2ベースのクラスター、Azure Container InstancesではコマンドラインツールのAzure CLIを使用して手軽にGPU対応コンテナを作成できます。

なお、GPUクラウドサービスの基本的な概念や選定基準については、以下の記事で詳しく解説しています。

GPUクラウドとは?研究機関・スタートアップが導入するメリットと選定ガイド

Azure CLIでのGPUコンテナ作成例

# Azure CLIGPU対応コンテナインスタンス作成

az container create \

  –resource-group myResourceGroup \

  –name gpu-container \

  –image tensorflow/tensorflow:latest-gpu \

  –gpu-count 1 \

  –gpu-sku K80

マルチGPU環境での活用

複数GPUを使用することで、学習時間をさらに短縮できます。

# 特定のGPU0番と1番)を指定してコンテナを起動

docker run –gpus ‘”device=0,1″‘ -it pytorch/pytorch:latest

# すべてのGPUを使用する場合

docker run –gpus all -it pytorch/pytorch:latest

4. 運用時の課題と注意点

実際の運用時に遭遇する典型的な問題とその解決方法について説明します。事前に把握しておくことで、トラブル発生時の対応時間を大幅に短縮できます。

4-1. よくあるエラーパターンと解決法

GPUコンテナ運用で発生する主要なエラーパターンと、それぞれの対処法を詳しく解説します。

ドライバ通信エラー

エラーメッセージ:

NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver.

Make sure that the latest NVIDIA driver is installed and running.

このエラーは、Dockerコンテナ内からホスト側のNVIDIAドライバにアクセスできない状態を示しています。主な原因は、ドライバモジュールが正しく読み込まれていない、またはDocker側の設定に問題がある場合です。

解決方法:

以下の手順を順番に実行してください。

# NVIDIAドライバモジュールの確認

lsmod | grep nvidia

# モジュールが見つからない場合は再読み込み

sudo modprobe nvidia

# Dockerサービスの再起動

sudo systemctl restart docker

# それでも解決しない場合はシステム全体を再起動

sudo reboot

システム再起動後、再度docker run --gpus all nvidia/cuda:11.8.0-base-ubuntu20.04 nvidia-smiで動作確認を行ってください。

CUDAバージョン不整合エラー

エラーメッセージ:

CUDA driver version is insufficient for CUDA runtime version

このエラーは、ホスト側のNVIDIAドライバのバージョンが、コンテナ内で使用されているCUDAライブラリのバージョンに対して古すぎる場合に発生します。前述の対応表を参照し、適切なバージョンの組み合わせを確認してください。

解決方法:

現在のドライババージョンを確認

nvidia-smi

必要に応じてドライバを更新

# 推奨ドライバを確認

ubuntu-drivers devices

# ドライバを更新

sudo apt update

sudo apt install nvidia-driver-535  # または推奨されたバージョン

sudo reboot

コンテナで使用するCUDAバージョンを調整することも選択肢のひとつです。たとえば、CUDA 12.0を使用していて問題が発生する場合、CUDA 11.8のイメージに変更することで対応できます。

4-2. バージョン互換性の管理方法

長期間のプロジェクト運用では、CUDAとドライバの互換性管理が重要な課題となります。環境の再現性を確保するため、以下に従ってください。

Dockerfileでのバージョン固定

NVIDIAの互換性マトリックスを参照し、プロジェクトごとに使用するCUDAバージョンを明確に定義することが重要です。Dockerfileでバージョンを明示的に指定することで、環境の再現性を確保できます。

# 具体的なバージョンを指定してDockerfile作成

FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04

# PyTorchのバージョンもCUDAに合わせて固定

RUN pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 \

    –extra-index-url https://download.pytorch.org/whl/cu118

# CUDAおよびPyTorchのバージョンを固定

FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04

RUN pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 \

    –extra-index-url https://download.pytorch.org/whl/cu118

このように明示的なバージョン指定を行うことで、開発環境と本番環境での一貫性を保てます。latestタグの使用は避け、必ず具体的なバージョン番号を指定してください。

バージョン管理のドキュメント化

プロジェクトのREADMEやドキュメントに、以下の情報を記載しておくことを推奨します。

  • 使用しているCUDAバージョン
  • 必要な最小ドライババージョン
  • PyTorch/TensorFlowのバージョン
  • 動作確認済みのGPUモデル

これにより、チームメンバーや将来の担当者が環境を再現する際の手間を大幅に削減できます。

4-3. 本番環境での運用ノウハウ

本番環境でのGPUコンテナ運用では、リソース効率化とセキュリティの両面から最適化が必要です。

マルチステージビルドによる軽量化

コンテナイメージの軽量化には、マルチステージビルドの活用が効果的です。開発時に必要なツールと実行時に必要なファイルを分離することで、イメージサイズとセキュリティリスクを削減できます。

# ビルドステージ:開発ツールを含む

FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04 AS builder

# ビルド用の重いツールをインストール

RUN apt-get update && apt-get install -y \

    build-essential \

    cmake \

    git \

    && rm -rf /var/lib/apt/lists/*

# アプリケーションのビルド処理

WORKDIR /app

COPY . .

RUN pip install –no-cache-dir -r requirements.txt && \

    python setup.py build

# 実行ステージ:実行に必要な最小限の環境

FROM nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu20.04

# 実行に必要なファイルのみコピー

COPY –from=builder /app/dist ./dist

COPY –from=builder /usr/local/lib/python3.8/site-packages /usr/local/lib/python3.8/site-packages

# 実行時の設定

WORKDIR /app

CMD [“python”, “dist/main.py”]

このアプローチにより、最終的なイメージサイズを数GB削減できることもあります。

GPUリソースの監視

GPUリソースの監視には、nvidia-smiの出力をオープンソースの監視用ツールPrometheusで収集し、同様にオープンソースのツールGrafanaで可視化する方法が効果的です。以下の指標を継続的に監視することで、問題の早期発見が可能になります。

  • GPU使用率(%)
  • GPUメモリ使用量(MB/GB)
  • GPU温度(℃)
  • 実行中のプロセス情報

# nvidia-smiを定期実行してログに記録する例

watch -n 1 nvidia-smi >> /var/log/gpu-metrics.log

本番環境では、これらのメトリクスに基づいてアラートを設定し、異常な高負荷や温度上昇を検知できる体制を整えることが重要です。

まとめ

本記事では、GPU対応Dockerコンテナの構築から運用までを段階的に解説しました。

まず、GPUコンテナの基本概念として、CPUとの違いや選択基準、CUDAドライバとの関係性を理解することが重要です。環境構築では、NVIDIA Container Toolkitの導入とUbuntu環境での適切なセットアップが基盤となります。実践的な活用では、PyTorchやTensorFlowなどの機械学習フレームワークとの連携や、クラウド環境での運用方法がポイントです。

運用段階では、典型的なエラーへの対処法、バージョン管理の重要性、そして本番環境での監視体制の整備が安定稼働に寄与します。特に、CUDAバージョンとドライババージョンの互換性管理は、長期的なプロジェクト運用では避けて通れない課題です。

より効率的なGPU開発環境をお求めの方には、さくらインターネットの高火力シリーズのGPUクラウドサービスも選択肢のひとつです。事前構築されたGPU環境により、本記事で説明した環境構築の手間を軽減し、開発作業により多くの時間を割くことができます。

GPU開発環境にお悩みの際は、ぜひご相談ください。

編集

さくマガ編集部

さくらインターネット株式会社が運営するオウンドメディア「さくマガ」の編集部。

※『さくマガ』に掲載の記事内容・情報は執筆時点のものです。

すべての記事を見る

関連記事

この記事を読んだ人におすすめ

おすすめのタグ

さくマガ特集

働くすべてのビジネスパーソンへ田中邦裕連載

みなさんは何のために働いていますか? この特集では、さくらインターネットの代表・田中が2021年から2022年にかけて「働くすべての人」へ向けてのメッセージをつづりました。人間関係を良好に保つためのコミュニケーションや、必要とされる人になるための考え方など、働くことが楽しくなるヒントをお伝えします。

さくらの女性エンジニア Real Voiceインタビュー特集

さくらインターネットでは、多様なバックグラウンドを持つ女性エンジニアが活躍しています。この特集では、これまでの経歴や現在の業務内容、めざすキャリア、ワークライフバランスのリアルなど、さまざまな角度から「さくらインターネットの女性エンジニア」を紐解いていきます。

転職組に聞く入社理由「なぜ、さくら?」

さくらインターネットには、有名企業を何社も渡り歩いてきた経験豊富な社員がいます。本シリーズでは『転職組に聞く入社理由「なぜ、さくら?」』と題し、これまでのキャリアや入社理由を紐解きながら、他社を経験しているからこそわかる、さくらインターネットの魅力を探ります。

Welcome Talk「ようこそ、さくらへ!」

さくらインターネットには、さまざまなバックグラウンドを持つ仲間が次々と加わっています。本シリーズ『Welcome Talk「ようこそ、さくらへ!」』では、入社直後の社員と同じ部署の先輩による対談を通じて、これまでの経歴や転職理由、関心のある分野や取り組みたいことについてざっくばらんに語ってもらっています。新メンバーの素顔とチームの雰囲気を感じてください。

若手社員が語る「さくらで始めるキャリア」

さくらインターネットで社会人としての第一歩を踏み出した先輩たちのリアルな声を集めました。若手社員のインタビュー、インターンの体験談、入社式レポートなどを通じて、キャリアの始まりに役立つヒントや等身大のストーリーをお届けします。未来を考える学生のみなさんに、さくらのカルチャーを感じていただける特集です。