はじめに
目的
深層学習の学習を始めるにあたり、環境を用意する必要があります。
google colabなど便利なサービスはありますが、せっかくGPU付きのPCを持っているということでDockerを利用してpytorchを学習する環境を構築することを目的とします。
得られる成果物
Dockerを使用したPytorchの学習環境
環境
今回の前提として以下の環境が整っているものとします。
- OS : Windows11 home
- GPU : NVIDIA Geforce RTX 3060 12GB
- Nvidia Driver : Version 560.94
- Docker Desktop : Docker version 24.0.6
WSL2+Dockerで環境を作るメリット
後段で説明しますが、nvidia-container-toolkitをインストールし、CUDA環境が用意されているdocker imageを使用することでローカル環境にCUDAやCuDNNをインストールする必要がなくなります。
ローカルに環境を構築する場合はNvidia DriverのバージョンによってCUDAとCuDNNのバージョンが決まるなどインストールが煩わしいものでした。そんな煩わしさをDockerによって克服することができます。
WSL2のインストール
※WSLの使用にはWindows側の設定も必要となりますが今回は割愛します。
Ubuntu 24.04 LTSのインストール
$ wsl --install -d Ubuntu-24.04
Ubuntu 24.04 LTSをデフォルトのディストリビューションに登録
$ wsl -s Ubuntu-24.04
Ubuntu 24.04の起動
$ wsl
Nvidia Diriverのバージョン確認
Nvidia Driverのバージョン確認
$ nvidia-smi
真ん中の”Driver Version:”以降が、自身のNvidia Driverのバージョンになります。
GPUにあったCUDAバージョンの確認
CUDAとは
CUDA(クーダ)とは、NVIDIA(エヌビディア)社が開発したGPU(グラフィックボード)を利用した開発プラットフォームです。Compute Unified Device Architectureの頭文字をとった言葉で、GPUの並列処理能力を最大限に活用して、汎用の計算用途で利用できるようにするものです。
ディープラーニングを行う上で、このアーキテクチャは不可欠です。
CUDAバージョンの確認
以下を参照してCUDAのバージョンを確認します。
上記の表によるとRTX 3060のMicro-architectureはAmpereでComputecapabilityが8.6あることが分かります。
上記の表からRTX 3060で使用できる具体的なCUDAのバージョンを確認します。
Micro-architectureがAmpereでComputecapabilityが8.6のCUDA SDK Version(s)を確認すると使用できるCUDAのバージョンは11.1-11.4であることが分かります。
nvidia-container-toolkitのインストール
参照情報
DockerコンテナからNVIDIA GPUを扱うためにはnvidia-container-toolkitをインストールする必要があります。詳細は下記のURLを確認してください。
nvidia-container-toolkitのインストール
上記URLに倣い、Ubuntu環境の中で、以下のコマンドを実行しnvidia-container-toolkitをインストールします。
$ 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
$ sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
$ sudo apt-get update
$ sudo apt-get install -y nvidia-container-toolkit
Docker Desktopの起動
最後にDocker Desktopを起動しておきます。
PytorchとCUDAが使えるDockerコンテナを確認
自身のCUDAバージョンに対応したイメージの確認
下記URLには様々なCUDAバージョンに対応したDocker imageが用意されています。前項で確認したCUDAバージョンに対応したDocker imageを選択します。
CUDA11.4のDocker imageがなかったため、今回は下記URLのCUDA11.3のDocker imageを使用します。
Dockerfileの記述
まずは、Dockerのビルドに必要なDockerfileを書きます。
FROM pytorch/pytorch:1.12.1-cuda11.3-cudnn8-runtime
SHELL ["/bin/bash", "-c"]
RUN mkdir workspace
RUN apt-get update &
RUN pip install --upgrade pip
RUN pip install jupyter
RUN pip install jupyter --upgrade
RUN pip install ipywidgets --upgrade
RUN jupyter nbextension enable --py widgetsnbextension
docker-compose.ymlの記述
続いて、Dockerfileを管理するための、docker-compose.ymlを記述します。
version: '3'
services:
app:
build: .
volumes:
- ./:/workspace
ports:
- 8888:8888
tty: true
Dockerコンテナの起動
Dockerコンテナの起動
以下のコマンドをwsl2で用意したUbuntuの環境内で実行します。
$ docker compose up -d
最後の2行が表示されていれば問題なくコンテナが起動できています。
コンテナが起動していることの確認
コンテナが問題なく起動していることを確認します。
$ docker ps
pytorch-appが起動していることを確認します。
Dockerコンテナの中に移動
問題なく起動していることが確認できたら、起動したコンテナの中に入ります。
$ docker exec -it pytorch-app-1 bash
Jupyter Notebookの起動
Jupyter Notebookの起動
コンテナの中に入ったら、jupyter Notebookを起動していきます。
$ jupyter notebook --port=8888 --ip=0.0.0.0 --allow-root --NotebookApp.token=''
オプションの意味は以下です。
--port=8888
- 8888ポートを利用する
--ip=0.0.0.0
- 外部からのアクセスを許可する
- ホストからアクセスするために設定する
--allow-root
- rootでの起動を許可する
- dockerコンテナのユーザー権限がデフォルトでは
root
ユーザーになっているため
--NotebookApp.token=''
- ブラウザでアクセスするときのトークン入力を無効にする
以下のように表示されれば問題なく起動できています。
Jupyter Notebookへのアクセス
http://localhost:8888/にアクセスして、以下のようにJupyter Notebookが表示されていればJupyter Notebookが問題なく起動できています。
Pytorchが使用できることの確認
Jupyter Notebookが表示できることを確認したら、Pytorchが使えるかどうかを確認していきます。
確認用ファイルの作成
New > Python3からファイルを作成します。
pytorchのインポート
続いてpytorchが使用できるかを確認します。
import torch
print(torch)
として、以下のような画面になれば問題なくJupyter Notebookからpytorchが使用できていることが分かります。
参考
今回の構築では、以下のサイトを参考にさせていただきました。
コメント