【Windows+venv】GPUを用いたDeepLearningを行うにあたっての環境構築手順メモ

WindowsマシンでGPUを用いたDeepLearningの実行環境の構築を行ったので手順についてまとめました。あくまで作業メモであるので、必ずしもこの手順を推奨するというわけではありません。活用にあたってはご注意ください。


## 前提
### 概要
```
・Python3.12+venvを使用
・プロジェクトごとにPyPIからpipを用いてパッケージを入手する
・PyTorchはpipを単に用いるとCPU版がインストールされるので注意が必要
```


### 選定の背景
```
・Anacondaを活用するとブラックボックスになりやすい
・プロジェクトごとに環境を分けて実行できる状況が望ましい
```
上記より、当記事ではPython+venvに基づいた環境の構築について取りまとめました。



## 環境構築
### CUDAの入手
まず、使用するマシンにGPU(Graphics Processing Unit)が入っているか確認が必要です。Windowsの場合は「タスクマネージャー」の「パフォーマンス」から「GPU」を選択することでGPUの確認ができます。

![CUDA1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936087/50c1cf62-51c6-93a6-428d-1fad70893876.png)

[CUDAのインストーラの入手](https://developer.nvidia.com/cuda-downloads)

CUDAのインストーラは上記から入手することができます、OSやバージョンについては手元のマシンに一致するものを選択する必要があることにご注意ください。インストーラの入手が完了したらインストーラの実行が必要です。インストーラの指示に従いインストールが完了したら、下記のコマンドを実行することでインストールができたか確認できます。

```cmd
> nvcc -V
```

・実行結果
```
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
...
```


### Pythonのインストール
Pythonのインストールにあたっては下記に沿って進めると良いです。

```
1. インストーラの入手
2. インストール
3. インストールの確認(コマンドプロンプトより、`python --version`などを実行すればよい)
```

インストーラの入手にあたっては下記からバージョンを選ぶ必要があります。

![Python1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936087/27dc9d17-8013-7424-0259-eccb587a3c12.png)
[Pythonのインストーラの入手①](https://www.python.org/downloads/)

バージョンの選択にあたっては最新版は安定しないことがあるので、少し前のものを選択する方が無難です。当記事ではバージョン`3.12.7`を選択した前提で以下、手順を確認します。

![Python2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936087/4ebf8e77-15ab-abb8-1bed-aa69b7c66006.png)
[Pythonのインストーラの入手②](https://www.python.org/downloads/release/python-3127/)

インストーラの入手にあたっては上記より、手元のOSにあったインストーラを入手すれば良いです。Windowsのビット数については「システム情報」などから確認できます。

```cmd
> python --version
```

・実行結果
```
Python 3.12.7
```

インストールが完了したら上記のように`python --version`を実行することでインストールがうまくいったかを確認することができます。


### venvを用いた実行環境の作成
前項の内容に基づいてPythonのインストールが完了していれば、コマンドプロンプトより下記を実行することでPythonの仮想環境を構築することが可能です。

```cmd
> python -m venv env_1
> .\env_1\Scripts\activate
```

上記では1行目の`python -m venv env_1`で実行環境を構築し、2行目で有効にしています。基本的には1行目は作成時に1度のみの実行、2行目はPCを起動するたびに実行します。また、`activate`状態から元に戻すには`deactivate`を実行すれば良いです。

venvを用いた仮想環境の構築にあたっては、基本的にディレクトリ毎に仮想環境を構築すると理解しておけば良いです。たとえば、開発用の作業ディレクトリを`development`とする場合は、`development/env_1`、`development/env_2`～のようにディレクトリ毎に仮想環境を構築すると作業しやすいです。

```
development/
  env_1
  env_2
```


### PyPIからのライブラリのインストール
venvを用いる場合、構築した各仮想環境には`NumPy`や`Matplotlib`などのライブラリがインストールされていません。なので、ライブラリはそれぞれインストールする必要があります。

ライブラリのインストールにあたっては`pip`を用いてPyPIから入手するとスムーズです。たとえば`NumPy`の場合は`pip install numpy`を実行すると良いです。ソースコードやライブラリが使用するライブラリのバージョンを指定している場合も多いので、`pip install numpy==x.x.x`のようにバージョンを指定してインストールする方法も抑えておくと良いです。

また、`pillow`のように「Pythonのソースコード内では`import PIL`のように読み込む一方でインストールの際は`pip install pillow`を実行する必要がある」場合もあることに注意が必要です。このような場合もあり得るので、ライブラリをインストールする際はPyPIのサイトを参照した上でインストールを行うと確実です。

https://pypi.org/project/pillow/

ここまでのインストール方法は開発しながらライブラリをインストールする場合に有用である一方で、ソースコードを共有する際などには再現にやや手間が生じます。このような場合は`requirements.txt`にライブラリのバージョンを書き出して配布すると効率的です。

1. 書き出し
```
> pip freeze > requirements.txt
```
2. 再現
```
> pip install -r requirements.txt
```

`requirements.txt`に基づくライブラリのインストールは基本的には有用な一方で、GPU用のPyTorchのインストールの場合など、個別でインストールが必要な場合もあります。このような場合もあるので、環境の共有・再現にあたっては状況に応じて詳細の手段を選択すると良いと思います。また、ライブラリのアンインストールは`pip uninstall numpy`などを実行すればよいです。


### GPU対応のPyTorchのインストール
GPU対応のPyTorchのインストールにあたっては、CUDAを入手したうえでPyTorchのサイトから手順に沿って入手する必要があるので注意が必要です。

```cmd
> nvcc -V
```

・実行結果
```
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
...
Cuda compilation tools, release 12.6, V12.6.77
...
```

まず、上記を実行することでCUDAがインストールされているかを確認し、下記を実行することでGPU版のPyTorchのインストールを行います。

```
> pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
```

PyTorchのバージョンについてはCUDAのバージョンと対応するものを選ぶ必要があります。当記事ではCUDAの`12.6`をインストールしたので、PyTorchには最新版の`cu124`を選択しました。

![PyTorch1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936087/9a777baa-46bb-7470-2516-4985f6121854.png)

[PyTorchのインストール](https://pytorch.org/)

インストールに用いる`pip`のコマンドについては正確には上記から確認すると良いです。インストールが確認できたかについては下記のように`pip freeze`を実行すると良いです。

```cmd
> pip freeze
```

・実行結果
![PyTorch2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936087/b1862244-c435-3d2f-decd-5c7ba86f0c17.png)

GPU版をインストールした場合は上記のように`+cu124`が付加されることに着目しておくと良いです。