PyTorchとCUDAを利用したGPU向けDocker開発環境の構築ガイド

1. Dockerfileの定義

深層学習モデルの開発に適したベースイメージを選択し、必要な依存ライブラリをインストールするためのDockerfileを作成します。ここでは、PyTorchとCUDA 11.3をベースにした環境を構築します。

FROM pytorch/pytorch:1.10.0-cuda11.3-cudnn8-devel

# パッケージマネージャーのクリーンアップとミラーサイトの設定
RUN rm -f /etc/apt/sources.list.d/cuda.list /etc/apt/sources.list.d/nvidia-ml.list && \
    apt-key del 7fa2af80 && \
    sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

# 必須ツールのインストール
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    vim \
    git \
    wget \
    ca-certificates && \
    rm -rf /var/lib/apt/lists/*

# CUDA関連のレポジトリキー更新
RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-keyring_1.0-1_all.deb && \
    dpkg -i cuda-keyring_1.0-1_all.deb

# Python依存関係のコピー
COPY ./requirements.txt /tmp/requirements.txt

2. イメージのビルドとコンテナの実行

作成したDockerfileを基にイメージをビルドします。ホストのネットワーク設定を継承するために --network=host を指定します。

# イメージ名とタグを指定してビルド
docker build -t custom_dl_env:v1.0 . --network=host

# GPUを有効化してコンテナを起動
docker run -it --gpus all --network=host --name dl_container custom_dl_env:v1.0 /bin/bash

一度終了したコンテナを再起動する場合は、以下のコマンドを使用します。

docker start -ia dl_container

3. コンテナ内でのpip最適化

ライブラリのインストール速度を向上させるため、pipの国内ミラーサーバーを設定します。~/.config/pip/pip.conf を編集または作成します。

mkdir -p ~/.config/pip
cat <<EOF > ~/.config/pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple
[install]
trusted-host = mirrors.aliyun.com
EOF

4. コンテナの状態をイメージとして保存

環境構築が完了した後、その状態を新しいイメージとしてコミットします。

# 実行中のコンテナIDを確認
docker ps

# コンテナをイメージとして保存
docker commit [CONTAINER_ID] custom_dl_env:final_v1

# Docker Hubやプライベートレジストリにプッシュ
docker login
docker push custom_dl_env:final_v1

5. トラブルシューティング

エラー1: CUDAヘッダーが見つからない

CUDA関連のコンパイル時に cuda_runtime_api.h: No such file or directory というエラーが発生した場合、環境変数のパスが通っていない可能性があります。~/.bashrc に以下を追記します。

export CUDA_PATH=/usr/local/cuda-11.3
export CUDA_HOME=$CUDA_PATH
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
export NVCC=$CUDA_HOME/bin/nvcc

追記後、source ~/.bashrc で反映させてください。

エラー2: PyTorchのCUDAアーキテクチャリストのインデックスエラー

IndexError: list index out of range が発生する場合、ビルド時に適切なGPUアーキテクチャが検出されていません。環境変数 TORCH_CUDA_ARCH_LIST を手動で設定することで回避できます。

# CUDAバージョンに基づいてアーキテクチャを明示的に指定
TARGET_CUDA_VER=$(nvcc --version | grep -Po 'release \K[^,]+')

if [[ "${TARGET_CUDA_VER}" == "11."* ]]; then
    export TORCH_CUDA_ARCH_LIST="6.0;6.1;7.0;7.5;8.0;8.6+PTX"
elif [[ "${TARGET_CUDA_VER}" == "10."* ]]; then
    export TORCH_CUDA_ARCH_LIST="3.5;5.0;6.0;6.1;7.0;7.5+PTX"
fi

エラー3: 共有ライブラリの欠落

OpenCVなどのライブラリを使用する際、libGL.so.1 や libgthread-2.0.so.0 が見つからないエラーが発生することがあります。これらはOSレベルのパッケージをインストールすることで解決します。

apt-get update
# libGLのインストール
apt-get install -y libgl1
# GLibおよびX11関連のインストール
apt-get install -y libglib2.0-0 libsm6 libxrender1 libxext6

また、CUDAソースのコンパイルを行う際は、コンテナ起動時に必ず --gpus all フラグを付与していることを確認してください。

タグ: Docker CUDA PyTorch DeepLearning containerization

10月9日 02:09 投稿