「Docker、はじめてみました」シリーズの続編です。
※この記事はWSL2での動作のみ確認済みです
本記事で目指すところ
今回はDockerでPytorch環境を構築して実際にGPU認識を行います。
これまでよりはかなり応用編になっています。
※pytorch公式サイトで最新のcuda v12.4を使います
https://pytorch.org/get-started/locally/
(2024/12/26執筆時点)
(A) NVIDIA
1. NVIDIAドライバ
まずNVIDIAドライバをホストマシンにインストールします。下記URLの「Get CUDA Driver」をクリック(https://developer.nvidia.com/cuda/wsl)するとhttps://www.nvidia.com/en-us/drivers/に移動する。
※OSでWindows11を選択すること。Linuxではない。Windows11用のドライバにWSL用のドライバも含まれている。
後は指示に従ってインストールを進めていき、下記コードが動作すればokです!
nvidia-smi
2. NVIDIAコンテナツールキット
NVIDIAコンテナツールキットをインストールします。
下図をみるとToolkitはコンテナごとに含まれるみたいですね。
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html より引用
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
# deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/deb/$(ARCH) /
# deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/experimental/deb/$(ARCH) /
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
これでコンテナツールキットのインストールはできたはずです
3. Dockerで認識させる
sudo nvidia-ctk runtime configure --runtime=docker
# INFO[0000] Config file does not exist; using empty config
# INFO[0000] Wrote updated config to /etc/docker/daemon.json
# INFO[0000] It is recommended that docker daemon be restarted.
※ここでsystemctlを使ったdocker再起動が推奨されているが、そもそもWSL2ではsystemctlコマンドがないので、docker desktopを再起動させておく。
最後に以下でcuda認識の確認を行いましょう。cuda12.4のサンプルイメージを選択します。※
※nvccコマンドを使いたいので-develイメージを選択したため少し重いです、、
docker run --rm --runtime=nvidia --gpus all nvidia/cuda:12.4.0-devel-ubuntu20.04 bash -c "nvcc --version"
# Unable to find image 'nvidia/cuda:12.4.0-devel-ubuntu20.04' locally
# 12.4.0-devel-ubuntu20.04: Pulling from nvidia/cuda
# 9ee6bdb31195: Download complete
# 9dd75d06a091: Download complete
# 533b4aebf169: Download complete
# 30bfca4dd349: Download complete
# ebfec18059b9: Download complete
# 1b57ce94cad9: Download complete
# Digest: sha256:7dbb60f0821f40989e22e554c37fc6dcfa17a62f6c710b2ab23115dee03f5477
# Status: Downloaded newer image for nvidia/cuda:12.4.0-devel-ubuntu20.04
#
# ==========
# == CUDA ==
# ==========
#
# CUDA Version 12.4.0
#
# Container image Copyright (c) 2016-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
#
# This container image and its contents are governed by the NVIDIA Deep Learning Container License.
# By pulling and using the container, you accept the terms and conditions of this license:
# https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license
#
# A copy of this license is made available in this container at /NGC-DL-CONTAINER-LICENSE for your convenience.
#
# nvcc: NVIDIA (R) Cuda compiler driver
# Copyright (c) 2005-2024 NVIDIA Corporation
# Built on Thu_Mar_28_02:18:24_PDT_2024
# Cuda compilation tools, release 12.4, V12.4.131
# Build cuda_12.4.r12.4/compiler.34097967_0
※ホストマシンはCUDA v12.6だが、コンテナはv12.4となっていることが確認できた。
(B) Docker
docker hub (https://hub.docker.com/r/nvidia/cuda/tags) から必要なイメージを参考にしてみます。
もともと最新のUbuntu24.04を使っていたのですが、CUDA v12.4はUbuntu24.04には対応していないみたいので12.4.1-cudnn-devel-ubuntu22.04をベースにします。
1. Ubuntuのインストール
wsl -l -v
# NAME STATE VERSION
# * Ubuntu-24.04 Running 2
wsl -l -o
# インストールできる有効なディストリビューションの一覧を次に示します。
# 'wsl.exe --install <Distro>' を使用してインストールします。
# NAME FRIENDLY NAME
# Ubuntu Ubuntu
# Debian Debian GNU/Linux
# kali-linux Kali Linux Rolling
# Ubuntu-18.04 Ubuntu 18.04 LTS
# Ubuntu-20.04 Ubuntu 20.04 LTS
# Ubuntu-22.04 Ubuntu 22.04 LTS
# Ubuntu-24.04 Ubuntu 24.04 LTS
# OracleLinux_7_9 Oracle Linux 7.9
# OracleLinux_8_7 Oracle Linux 8.7
# OracleLinux_9_1 Oracle Linux 9.1
# openSUSE-Leap-15.6 openSUSE Leap 15.6
# SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5
# SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6
# openSUSE-Tumbleweed openSUSE Tumbleweed
wsl --install -d ubuntu-22.04
wsl -s Ubuntu-22.04
# この操作を正しく終了しました。
wsl -l -v
# NAME STATE VERSION
# * Ubuntu-22.04 Running 2
# Ubuntu-24.04 Running 2
2. dockerfileの作成
# ベースイメージ
FROM nvidia/cuda:12.4.1-cudnn-runtime-ubuntu22.04
# 環境変数設定
ENV DEBIAN_FRONTEND=noninteractive
# 作業ディレクトリを設定
WORKDIR /home/jupyter
# 必要な依存関係をインストール
RUN apt update && apt install -y --no-install-recommends \
wget \
bzip2 \
build-essential \
git \
curl \
ca-certificates \
libsndfile1-dev \
libgl1 \
python3 \
python3-pip && \
apt clean && rm -rf /var/lib/apt/lists/*
# Pythonパッケージの依存関係をインストール
RUN pip3 install --no-cache-dir -U pip
# PyTorchをインストール
RUN pip3 install --no-cache-dir \
torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
# Jupyter Labのインストール
RUN pip3 install --no-cache-dir jupyterlab
# ポート設定
EXPOSE 8888
# デフォルトのコマンド
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root"]
Dockerイメージの作成
作成したDockerfileがあるディレクトリに移動しておく
docker build \
> -f pytorch_cu124_ubuntu2204 \
> -t torch:cu124 \
> .
docker images
# REPOSITORY TAG IMAGE ID CREATED SIZE
# torch cu124 7ff9d0f7a96e 2 minutes ago 15GB
イメージサイズは15GBもある!
Dockerコンテナ作成
docker run \
> --gpus all \ # GPUを利用可能に設定する
> --name <Dockerコンテナ名> \
> -p 8888:8888 \ # この部分でポートを割り当てている
> -v /home/<ユーザー名>/<マウントしたいディレクトリ>:/home/jupyter/<マウントしたいディレクトリ> \
> -d <Dockerイメージ名>
Dockerコンテナ起動
docker start <コンテナ名>
docker logs <コンテナ名>
上記で表示されるURLにアクセスするとJupyter Labが立ち上がっている
→ ブラウザのお気に入りにでも入れておきましょう♪
Pytorch GPU動作確認
参考にさせていただきました!
https://qiita.com/Haaamaaaaa/items/d237456302ef9332f6e4
import torch
print(torch.__version__)
print(f"cuda, {torch.cuda.is_available()}")
print(f"compute_{''.join(map(str,(torch.cuda.get_device_capability())))}")
device_num:int = torch.cuda.device_count()
print(f"find gpu devices, {device_num}")
for idx in range(device_num):
print(f"cuda:{idx}, {torch.cuda.get_device_name(idx)}")
print("end")
# 2.5.1+cu124
# cuda, True
# compute_86
# find gpu devices, 1
# cuda:0, NVIDIA GeForce RTX 3090
# end
最後に
ようやくpytorchのdockerを設定できた!
追記
pip --version
# pip 24.3.1 from /usr/local/lib/python3.10/dist-packages/pip (python 3.10)
python v3.10が入っていた(2024/12/26現在)
この時点で知っておくべきTipsや基本的内容があればぜひコメントください!