8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

記事投稿キャンペーン 「AI、機械学習」

【初心者向け】Docker + VSCode + Git でPytorchのGPU環境を構築してみた【Windows11】

Last updated at Posted at 2023-11-06

はじめに

この記事は、Docker初心者でPytorchをGPUを使って学習させたい方向けに作成しました。Dockerの仮想環境に詳しい方や、ローカル環境で学習させたい方、Macを利用している方は他の記事を参考にすることをおすすめします。

作者の構築前の実行環境は以下の通りになります。

OS:Windows11
エディタ:VSCode
Docker Desktop for Windows
GeForce RTX 3060 Ti

Dockerとは

image.png

Dockerは、コンテナ仮想化プラットフォームであり、アプリケーションとその依存関係を独立したコンテナとしてパッケージ化し、異なる環境での実行を可能にするツールです。Dockerは以下のような特徴を持っています。

Dockerコンテナは、アプリケーションとその依存関係を一つのパッケージとして包み込むため、異なる環境での動作が一貫しています。開発環境からテスト環境、本番環境まで、アプリケーションのポータビリティが向上し、展開が簡略化されます。

また、Dockerは軽量なコンテナ仮想化を提供し、ホストOS上でコンテナを共有するため、システムリソースの最適な利用が可能です。コンテナは素早く起動し、メモリとCPUの効率的な割り当てができます。

1. wsl2の準備

公式のインストール方法はこちらになります。

Windows11では、1つのコマンドを使用して、WSLを実行するために必要なすべてのものをインストールできるようになりました。 右クリックして [管理者として実行] を選択することで、PowerShellまたはWindowsコマンド プロンプトを管理者モードで開き、wsl --installコマンドを入力し、マシンを再起動します。

PowerShell
wsl --install

実行すると、同時に最新版のUbuntuもインストールされます(とても便利)。

注意
Ubuntuをインストールしただけでは起動させようとしてもエラーが発生してしまう。

これに対応するため、Windowsの設定 を変更する必要があります。

①「設定」をクリック
②「アプリ」の「オプション機能」をクリック
③「Windowsのその他の機能」をクリック
④「Linux用Windowsサブシステム」にチェックを入れる

image.png

これで事前準備は完了です。

再度、PowerShellからUbuntuを起動すると、 ユーザ名パスワード の入力を求められます。入力後、以下のコマンドを実行してください。

PowerShell
wsl -l -v

無事、Ubuntuが確認出来たらUbuntuのインストールは完了です(ここではUbuntuさえ表示されていれば問題ありません)。

image.png

これでWSLの設定は完了です。

2. VSCodeのインストール

こちらからVSCodeをインストールできます。Windows版 をインストールしてください。

インストールする過程で、環境変数を設定するチェックボックスがあります。こちらに チェックを入れる のを忘れないでください。それ以外の項目は 次へ をクリックして構いません。

image.png

これでVSCodeのインストールは完了です。

3. Gitのインストール

こちらからGitをインストールできます。こちらも Windows版をインストールしてください。

こちらも同様にインストールの過程で注意することがあります。Gitを使用するエディタの選択で、"Use Visual Studio Code as Git's default editor" を選択してください。
image.png

これにより、VSCodeからGit Bashをわざわざ起動することなく、開発環境から直接バージョン管理が可能になります。

これでGitのインストールは完了です。

4. Docker Desktopのインストール

こちらからDocker Desktopがインストールできます。こちらもWindows版を インストールしてください。

Docker Desktopのインストールの過程では特に注意することはありません。

ただし、インストール完了後に1つ注意することがあります。

①Docker Desktopを起動し、右上の設定(歯車マーク)をクリックする。
②"Resources"の"WSL integration"をクリックする。
③"Ubuntu"の項目を有効にする。

image.png

image.png

これによりUbuntuからDockerを操作することができます。

これで、Docker Desktopのインストールは完了です。

5. NVIDIA Driver & CUDA Toolkitのインストール

PytorchをGPU環境で実行するには、主に二つの準備が必要です。

①NVIDIA Driver
②CUDA Toolkit

NVIDIA Driver

まずは NVIDIA Driver のインストールから始めていきましょう。

インストールはこちらからできます。

作者は Windows11GeForce RTX 3060Ti のGPUを使用しているので以下のような設定になります。この設定は、自身の環境を調べて入力してください。

image.png

ダウンロード完了後、そのままインストールまで行って構いません。

これで、NVIDIA Driverのインストールは完了です。

CUDA Toolkit

次は CUDA Toolkit のインストールから始めていきましょう。

インストールの手順は、こちらの ガイド から確認できます。

他の方の記事を見ると、Windowsのターミナルから実行できるようですが、作者は Ubuntu から実行しました。

まずは、Ubuntuから以下のコマンドを実行します。

Ubuntu
sudo apt-key del 7fa2af80

これは古いGPG鍵を削除しているようです。これを行わないとインストールの過程で、エラーが発生する可能性があります。

次に、UbuntuにCUDA Toolkitをインストールしていきます。

ガイドを見ると、2つのインストール方法があるようですが、作者はOption1を選択しました。

注意
Option2の場合だと、インストールしたWidnowsのドライバを上書きしてしてしまう。

Option 1:
Installation of Linux x86 CUDA Toolkit using WSL-Ubuntu Package - Recommended
The CUDA WSL-Ubuntu local installer does not contain the NVIDIA Linux GPU driver, so by following the steps on the CUDA download page for WSL-Ubuntu, you will be able to get just the CUDA toolkit installed on WSL.

Option 2:
Installation of Linux x86 CUDA Toolkit using Meta Package
If you installed the toolkit using the WSL-Ubuntu package, please skip this section. Meta packages do not contain the driver, so by following the steps on the download page for Ubuntu, you will be able to get just the CUDA toolkit installed on WSL.
The installation instructions for the CUDA Toolkit can be found in the CUDA Toolkit download page for each installer. But DO NOT choose the “cuda”, “cuda-12-x”, or “cuda-drivers” meta-packages under WSL 2 as these packages will result in an attempt to install the Linux NVIDIA driver under WSL 2. Install the cuda-toolkit-12-x metapackage only.
You can also install other components of the toolkit by choosing the right meta-package.

CUDA Toolkitのインストールは、Ubuntuにコマンドを入力する必要があります。以下のサイトに移動し、実行環境(この記事の方法であれば、画像と同じ環境で問題無ありません)を入力後、表示されたコマンド群をUbuntuに入力します。

image.png

image.png

Ubuntu
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda-repo-wsl-ubuntu-12-0-local_12.0.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-0-local_12.0.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-0-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

インストールには十数分ほど時間はかかります。

Ubuntuに以下のコマンドを実行してみましょう。

Ubuntu
cat  /usr/local/cuda/version.json

以下が表示されたらCUDA Toolkitのインストールは完了です。

Ubuntu
{
   "cuda" : {
      "name" : "CUDA SDK",
      "version" : "12.3.0"
   },
   "cuda_cccl" : {
      "name" : "CUDA C++ Core Compute Libraries",
      "version" : "12.3.52"
   },
   "cuda_cudart" : {
      "name" : "CUDA Runtime (cudart)",
      "version" : "12.3.52"
   },
   "cuda_cuobjdump" : {
      "name" : "cuobjdump",
      "version" : "12.3.52"
   },
   "cuda_cupti" : {
      "name" : "CUPTI",
      "version" : "12.3.52"
   },
   "cuda_cuxxfilt" : {
      "name" : "CUDA cu++ filt",
      "version" : "12.3.52"
   },
   "cuda_demo_suite" : {
      "name" : "CUDA Demo Suite",
      "version" : "12.3.52"
   },
   "cuda_gdb" : {
      "name" : "CUDA GDB",
      "version" : "12.3.52"
   },
   "cuda_nsight" : {
      "name" : "Nsight Eclipse Plugins",
      "version" : "12.3.52"
   },
   "cuda_nvcc" : {
      "name" : "CUDA NVCC",
      "version" : "12.3.52"
   },
   "cuda_nvdisasm" : {
      "name" : "CUDA nvdisasm",
      "version" : "12.3.52"
   },
   "cuda_nvml_dev" : {
      "name" : "CUDA NVML Headers",
      "version" : "12.3.52"
   },
   "cuda_nvprof" : {
      "name" : "CUDA nvprof",
      "version" : "12.3.52"
   },
   "cuda_nvprune" : {
      "name" : "CUDA nvprune",
      "version" : "12.3.52"
   },
   "cuda_nvrtc" : {
      "name" : "CUDA NVRTC",
      "version" : "12.3.52"
   },
   "cuda_nvtx" : {
      "name" : "CUDA NVTX",
      "version" : "12.3.52"
   },
   "cuda_nvvp" : {
      "name" : "CUDA NVVP",
      "version" : "12.3.52"
   },
   "cuda_opencl" : {
      "name" : "CUDA OpenCL",
      "version" : "12.3.52"
   },
   "cuda_sanitizer_api" : {
      "name" : "CUDA Compute Sanitizer API",
      "version" : "12.3.52"
   },
   "libcublas" : {
      "name" : "CUDA cuBLAS",
      "version" : "12.3.2.9"
   },
   "libcufft" : {
      "name" : "CUDA cuFFT",
      "version" : "11.0.11.19"
   },
   "libcufile" : {
      "name" : "GPUDirect Storage (cufile)",
      "version" : "1.8.0.34"
   },
   "libcurand" : {
      "name" : "CUDA cuRAND",
      "version" : "10.3.4.52"
   },
   "libcusolver" : {
      "name" : "CUDA cuSOLVER",
      "version" : "11.5.3.52"
   },
   "libcusparse" : {
      "name" : "CUDA cuSPARSE",
      "version" : "12.1.3.153"
   },
   "libnpp" : {
      "name" : "CUDA NPP",
      "version" : "12.2.2.32"
   },
   "libnvjitlink" : {
      "name" : "JIT Linker Library",
      "version" : "12.3.52"
   },
   "libnvjpeg" : {
      "name" : "CUDA nvJPEG",
      "version" : "12.2.3.32"
   },
   "nsight_compute" : {
      "name" : "Nsight Compute",
      "version" : "2023.3.0.12"
   },
   "nsight_systems" : {
      "name" : "Nsight Systems",
      "version" : "2023.3.3.42"
   },
   "nvidia_fs" : {
      "name" : "NVIDIA file-system",
      "version" : "2.18.3"
   }
}

6. コンテナの作成

Dockerの仮想環境を使用するには以下の手順を踏む必要があります。

①dockerfileの作成。
②dockerfileからdocker imageを作成。
③docker imageからdocker container(コンテナ)を構築。

ここで、VScodeには以上の手順を簡略化するDev Containersという拡張機能があります。これはVScode上で Dockerfile を作成し、 devcontainer.json を使用することで、Dockerコマンドをわざわざ使用することなくコンテナを構築することが出来ます。

メモリを消費する、VSCodeでしか開発できないというデメリットもありますが、VSCodeユーザにはとても便利なのでおすすめです。

説明は以下のサイトに記載されています。

Ubuntuから任意の開発を行いたいディレクトリで以下のコマンドを実行します。

Ubuntu
code .

これにより、現在のディレクトリでVSCodeを開くことが出来ます。

VSCodeの拡張機能から Dev Containers をインストールします。

image.png

VSCodeを再起動すると、ディレクトリ内にdevcontainer.jsonファイルが作成されているはずです。

まずは、dockerfile の作成をしていきます。今回はPytorchがGPU環境で動くことを確認したいので最低限のパッケージやライブラリ、フレームワークをインストールします。

以下は実行したdockerfileです。
requirements.txtは同ディレクトリにあります。

dockerfile
FROM  nvidia/cuda:12.2.2-devel-ubuntu22.04

RUN apt update \
    && apt install -y \
    git\
    python3\
    python3-pip

RUN apt-get autoremove -y && apt-get clean && \
    rm -rf /usr/local/src/*

COPY requirements.txt /tmp/

RUN pip install --no-cache-dir -r /tmp/requirements.txt

COPY . /tmp/
requirements.txt
torch
torchvision
transformers

注意したいのが、ベースのnvidia/cudaです。 Docker hubからイメージを捜すことになるのですが、自身のUbuntuのバージョンと対応していないと、コンテナの構築の過程でエラーが発生します。

Ubuntuから以下のコマンドを実行して、Ubuntuのバージョンを確認してください。

Ubuntu
cat /etc/issue
Ubuntu 22.04.2 LTS \n \l #自身のバージョンを確認

以下のリンクから、最適なイメージを探してください。

image.png

次はdevcontainer.jsonの設定です。

以下が実行したdevcontainer.jsonです。これはdevcontainer.jsonの初期フォーマットを流用しています。

devcontainer.json
{
	"name": "Existing Dockerfile",
	"build": {
		"context": "..",

		"dockerfile": "../dockerfile"
	},
	"runArgs": ["--gpus", "all","--shm-size","8gb"],

		"customizations": {
		"vscode": {	
			"extensions": [
				"ms-python.python",
				"ms-toolsai.jupyter",
				"mhutchie.git-graph",
				"MS-CEINTL.vscode-language-pack-ja"
			]
		}
	}
}

重要なのは "runArgs""extensions" です。

"runArgs" ではコンテナ立ち上げ時のオプションを設定することが出来ます。ここではGPUの設定を行っています。

--gpus all : すべてのGPUを利用できるようにするため。
--shm-size 8gb : コンテナ内の共有メモリ(Shared Memory)のサイズを8ギガバイトに設定。

"extensions" では、コンテナ内のVSCodeにインストールする拡張機能を設定することが出来ます。

"ms-python.python" : Pythonの拡張機能
"ms-toolsai.jupyter" : Jupyterの拡張機能
"ms-toolsai.git-graph" : Git-graphの拡張機能。バージョン管理の可視化に便利。
"MS-CEINTL.vscode-language-pack-ja" :日本語化の拡張機能。

追加で拡張機能をインストールしたい場合は、"extensions"拡張機能のID を追記してください。

拡張機能のIDは、拡張機能の項目から 歯車のアイコン をクリックし、""拡張機能のIDをコピー"" をクリックしてください。

image.png

これで、準備は完了です。

それでは、Ctrl + Shift + P またはVSCode左下の青いマークから "Reopen in Container"(コンテナーで再度開く) をクリックしてください。コンテナの起動が開始されます。
image.png

コンテナの起動が確認出来たら、.pyファイルを作成し、pytorhを使用してGPUが使用できるか確認してみましょう。

image.png

image.png

無事に、Tureが返されたらPytorchのGPU環境構築は完了です。

お疲れ様でした!

余談:Gitのバージョン管理

グループでの活動やプロジェクトの開発において、リモートリポジトリでバージョン管理を行うことはマストです。

この記事では、PytorchでGPUを使って学習させたモデルを管理、アプリに応用させたりするなどの目的で、仮想環境にて作成したファイルをVSCodeからGitで管理できるようにしています。

image.png

image.png

まとめ

ここまでお読みくださり、ありがとうございます。

今回はDocker初心者に向けたPytorchのGPU環境構築について説明しました。

私もDockerを学習して1週間も経っていないので、間違った解釈をしている点もあるかと思いますが何卒ご容赦ください。

この仮想環境を構築できれば、わざわざローカル環境を用意する必要なく、すぐにバージョン管理が可能なpytorchのGPU環境を用意できます。

この記事で皆様の、学習モデル開発へのハードルが少しでも下がれば幸いです。

参考文献

Windows11にWSL2を使ってLinux環境(ubuntu) を構築してみた
Visual Studio Code のインストール
WSL2でCUDAをインストールする

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?