WSL2+Docker+Jupyter Notebookで作るPytorch学習環境

Docker

はじめに

目的

深層学習の学習を始めるにあたり、環境を用意する必要があります。

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をインストールする必要がなくなります。

つまり、煩わしいGPU関連のソフトウェアはNvidia Driverとnvidia-container-toolkitをローカル環境に用意すればよく、CUDAやCuDNNなどはDocker側に用意させることができるということです。

ローカルに環境を構築する場合は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のバージョンを確認します。

CUDA - Wikipedia

上記の表によると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を確認してください。

Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit 1.16.2 documentation

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を選択します。

https://hub.docker.com/r/pytorch/pytorch

CUDA11.4のDocker imageがなかったため、今回は下記URLのCUDA11.3のDocker imageを使用します。

https://hub.docker.com/layers/pytorch/pytorch/1.12.1-cuda11.3-cudnn8-runtime/images/sha256-0bc0971dc8ae319af610d493aced87df46255c9508a8b9e9bc365f11a56e7b75?context=explore

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が使用できていることが分かります。

参考

今回の構築では、以下のサイトを参考にさせていただきました。

【2024年版】WSL2+Ubuntu24.04+Docker+GPUでつくる機械学習環境
Jupyter notebookをdockerコンテナで起動してホストのブラウザから使えるようにする

コメント

タイトルとURLをコピーしました