GPUの環境構築では、ソフトウェアのバージョン不一致によるエラーが頻発します。
Dockerを使うことで、このような依存関係のエラーを回避しやすくなります。
この記事では、UbuntuにDockerをインストールする方法から、コンテナからGPUを使う方法まで紹介します。
環境構築する前の準備

GPUの環境構築では、ソフトウェアのバージョン依存関係によるエラーが頻発します。
環境構築の前に、次の情報を下調べしておくことが重要です。
- GPUの型番
- OSの種類・バージョン
- CUDAのバージョン
- NVIDIAドライバのバージョン
GPUの型番を確認する
まずGPUの型式を確認しておきます。
GPUの型番には、次のようなものがあります。
NVIDIA RTX A6000
NVIDIA GeForce RTX 4090
NVIDIA A100
OSの種類・バージョンを確認する
お使いのOSのバージョンを確認しておきます。
Ubuntuで以下のコマンドを実行します。
lsb_release -a

Windowsをお使いの方は、Ubuntuをインストールする記事をあわせてご覧ください。

CUDAのバージョンを確認する
使用したい機械学習のライブラリに対応するCUDAのバージョンを確認します。
機械学習のライブラリ(フレームワーク)として代表的なものにPyTorchが挙げられます。
PyTorchとCUDAのバージョン関係は、PyTorchの公式サイトから参照できます。
NVIDIAドライバのバージョンを確認する
GPU、OS、CUDAに対応するNVIDIAドライバのバージョンを確認します。
NVIDIAの公式サイトにアクセスします。
調べておいたGPU、OS、CUDAの情報をもとに、「ドロップダウンリスト」を選択します。

CUDA 12.1をお使いの場合は、「CUDA Toolkit」から12.2もしくは12.4を選択してください。
「探す」をクリックすると対応するNVIDIAドライバのバージョンが表示されます。

NVIDIAドライバのインストール

NVIDIAドライバをインストールしていきます。
Ubuntuホストマシンで次のコマンドを実行し、ドライバをインストールします。
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-550
ドライバをインストールしたら、OSを再起動します。
sudo reboot
ドライバが正しくインストールできているか確認します。
nvidia-smi

Dockerのインストール

UbuntuホストマシンにDockerをインストールしていきます。
Dockerの公式GPGキーを追加します。
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
DockerのAPT リポジトリを追加します。
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
Dockerをインストールします。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
現在のユーザーをdockerグループに追加します。
sudo usermod -aG docker $USER
ファイルのパーミッションを変更します。
sudo chmod 666 /var/run/docker.sock
Dockerデーモンがシステム起動時に自動的に起動するように設定します
sudo systemctl enable docker
現在のシェルセッションをリロードして、変更を有効にします。
newgrp docker
Dockerデーモンを再起動します。
sudo systemctl restart docker
Dockerが正しくインストールされたか確認するために、サンプルのコンテナを実行してみます。
docker run hello-world

NVIDIA Container Toolkitのインストール

UbuntuホストマシンにNVIDIA Container Toolkitをインストールしていきます。
NVIDIA Container Tooklitを使うと、コンテナ内にNVIDIAドライバをインストールする必要がなくなります。
リポジトリとGPGキーをセットアップします。
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
nvidia-container-toolkitをインストールします。
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
NVIDIAコンテナー ランタイムを認識するように、Docker デーモンを構成します。
sudo nvidia-ctk runtime configure --runtime=docker
config.tomlファイルを編集します。
sudo nano /etc/nvidia-container-runtime/config.toml
デフォルトのランタイムを設定した後、Docker デーモンを再起動してインストールを完了します。
sudo systemctl restart docker
DockerコンテナからGPUを認識する

コンテナからGPUが認識できるかをテストします。
サンプルのDockerコンテナを起動します。
docker run -it --rm --runtime=nvidia --gpus all nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04 /bin/bash
コンテナ内からGPUが認識できているか確認をします。
nvidia-smi

コンテナにCUDAがインストールされているか確認します。
nvcc -V

PyTorchコンテナでの動作確認

今度はCUDA、Python、PyTorchを含むコンテナを構築してみます。
最終的にコンテナ内のPyTorchからGPUが適切に認識できるかテストします。
Dockerファイルの作成
Dockerファイルを作成して編集します。
nano Dockerfile
次の記述をコピーして、Dockerファイルに貼り付けます。
# ベースイメージ(CUDA)の指定
FROM nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04
# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y python3-pip python3-venv git nano
# 作業ディレクトリを設定
WORKDIR /app
# アプリケーションコードをコピー
COPY . /app
# Python仮想環境の作成
RUN python3 -m venv /app/.venv
# 仮想環境をアクティベートするコマンドを.bashrcに追加
RUN echo "source /app/.venv/bin/activate" >> /root/.bashrc
# PyTorchのインストール
RUN /app/.venv/bin/pip install torch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 --index-url https://download.pytorch.org/whl/cu121
# コンテナの起動時にbashを実行
CMD ["/bin/bash"]
[Ctrl + S]キーで変更内容を保存し、[Ctrl + X]キーで編集モードから抜けます。
docker-compose.ymlファイルの作成
docker-compose.ymlを使って、Dockerコンテナに関する設定を行います。
docker-compose.ymlを作成して編集します。
nano docker-compose.yml
次の記述をコピーして、docker-compose.ymlファイルに貼り付けます。
services:
pytorch_container:
build:
context: .
dockerfile: Dockerfile
image: pytorch_container
runtime: nvidia
container_name: pytorch_container
volumes:
- .:/app/pytorch_container
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
「Ctrl + S」キーで変更内容を保存し、「Ctrl + X」キーで編集モードから抜けます。
runtime: nvidia コンテナ起動時にnvidia container toolkitを指定
driver: nvidia NVIDIAドライバの指定
count: 1 GPUの枚数の指定
capabilities: [gpu] デバイスにGPUを指定
PyTorchからGPUの認識テスト
Dockerfileからビルドしてコンテナを起動します。
docker compose run pytorch_container
Pythonのインタラクティブモードに入ります。
python

Pytorchをインポートします。
import torch
PyTorchからGPUが認識できるか確認します。
torch.cuda.is_available()

生成AI・LLMのコストでお困りなら
GPUのスペック不足で生成AIの開発が思うように進まないことはありませんか?
そんなときには、高性能なGPUをリーズナブルな価格で使えるGPUクラウドサービスがおすすめです!

GPUSOROBANは、高性能GPU「NVIDIA H200」を業界最安級の料金で使用することができます。
NVIDIA H200は、生成AI・LLMの計算にかかる時間を大幅に短縮することが可能です。
クラウドで使えるため、大規模な設備投資の必要がなく、煩雑なサーバー管理からも解放されます。