ローカル環境におけるGPUを活用したPytorchの環境構築

```py
import torch

# 使用するデバイスを決定
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# GPUの利用について出力j
print(f"GPU が利用可能であるか: {str(torch.cuda.is_available())}")

if torch.cuda.is_available():
  print(f"GPU の個数: {torch.cuda.device_count()}")
  
  for i in range(torch.cuda.device_count()):
    if i == torch.cuda.current_device():
      print(f"[{i}] \t: {torch.cuda.get_device_name()} （利用中）")
    else:
      print(f"[{i}] \t: {torch.cuda.get_device_name()}")
    print(f"\t  CUDA Compute Capability={torch.cuda.get_device_capability()}")
```

# はじめに
次のようなに ```pip``` コマンドで ```pytorch``` を単純にインストールしても、GPU を活かした機械学習の処理ができない場合がある。

```py
%pip install pytorch
```

次のコードで開発環境において GPU を利用できるか確認ができる。

```py
import torch
print(torch.cuda.is_available())
print(torch.__version__)
```

```False``` が出力された場合はGPUが利用できていない状態である。続いて ```x.x.x+cpu``` が出力されている場合、インストールした ```torch``` ライブラリは GPU に対応していないことが原因である。

```
False
2.3.0+cpu
```

## 備考: 筆者の環境
|項目|内容|
|---|---|
|OS|Windows 11 Pro 64bit|
|CPU|Intel(R) Core i9-10900K|
|ストレージ|500GB SSD + 4TB HDD + 4TB HDD|
|GPU|NVIDIA GeForce RTX 3060 × 2枚|
|RAM|128GB|

# GPUドライバのインストール
## グラフィックボードの確認
タスクマネージャーからグラフィックボードの型番を確認する。
型番は画面右上に記載されている。

次の画像では、```NVIDEA GeForce RTX 3060``` と記載されている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/6301e08f-8823-d2ad-a7ef-b0f75caca146.png)

## インストーラのダウンロード
次のサイトから GPU のドライバを検索して、インストールできる。

https://www.nvidia.com/ja-jp/geforce/drivers/

サイトにアクセスすると次のような画面になる。各項目を自分の環境に応じて選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/4aba9308-64a8-29d9-95e1-01ddf4c5b7f5.png)

```NVIDEA GeForce RTX 3060``` の場合は次のように選択する。

|項目|内容|
|---|---|
|製品の種類|GeForce|
|製品シリーズ|GeForce RTX 30 Series|
|製品|GeForce RTX 3060|

項目の指定後に、[検索開始] をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/0d60bfa9-d5b1-aa36-b04b-9053d99e3a78.png)

「GeForce Game Ready ドライバー - WHQL」の [ダウンロード] をクリックすると、ドライバのインストーラを入手できる。
次の画像では、```560.81-desktop-win10-win11-64bit-international-dch-whql.exe``` がダウンロードされる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/1dd78173-aa22-f4d0-c5c7-925bfbae6f26.png)


## ドライバのインストール
先ほどダウンロードしたインストーラを起動すると、次の画面が表示される。 [同意して続行する] をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/a780daf8-ce34-fe5e-cd84-d8815916ea3a.png)

[次へ] をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/1e0f6bf4-b0e0-c89f-feaf-280cd917a676.png)

インストールが開始される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/79447e6d-57a0-c454-2940-b7b475820079.png)

次の画面になると、インストールが終了している。各項目のチェックは任意で指定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/688cf30f-e29c-f7cb-0bf1-bf47f0226616.png)


## インストールの確認
次のコマンドでドライバがインストールされているか否かを確認できる。
```sh: ドライバの確認
> nvidia-smi
Sun Oct 20 04:48:40 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.81                 Driver Version: 560.81         CUDA Version: 12.6     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                  Driver-Model | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3060      WDDM  |   00000000:01:00.0  On |                  N/A |
|  0%   40C    P0             45W /  170W |     377MiB /  12288MiB |      1%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
|   1  NVIDIA GeForce RTX 3060      WDDM  |   00000000:02:00.0  On |                  N/A |
|  0%   36C    P8             16W /  170W |      33MiB /  12288MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

### 省略 ###
```



# CUDA Toolkitのインストール
## PyTorch のバージョン確認
次のサイトにアクセスして PyTorch のバージョンを確認する。ここで確認したバージョンに適したツールキットと cuDNN（後述）をインストールする必要がある。

https://pytorch.org/

Compute Platform の最新バージョンを確認する。ここでは ```CUDA 12.4``` である。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/f0603a91-dc1a-1075-16e7-94ee370ee562.png)

## ツールキットのインストール
次のサイトから、上記と同一バージョンの CUDA Toolkit を選択する。
今回の場合は、 ```CUDA Toolkit 12.4.0``` が該当する。

https://developer.nvidia.com/cuda-toolkit-archive


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/6a13277a-4ebf-55de-d6e8-b9fb6bb44629.png)

OSやアーキテクチャなど、自分の環境に応じて選択する。その後、 [Download (29.6 MB)] をクリックすると、インストーラがダウンロードされる。
次の画像の場合は ```cuda_12.4.0_windows_network.exe``` がダウンロードされる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/4e45b6c2-8da7-af64-32e6-d42610816254.png)

インストーラを起動すると、次のウィンドウが表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/c1e5d3a7-9836-7a1b-e601-8775a65cbd54.png)

[同意して続行する] をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/e5306cd6-9b82-f5df-b36f-1705aa04ac12.png)

[次へ] をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/32018572-0f37-ebc1-144b-4fd1a5240831.png)

Visual Studio で開発する場合は事前にインストールをする必要がある（未検証）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/5ea20e40-4205-5bad-5db8-7cc6b0ec986f.png)

Visual Studio を利用しない場合はチェックを入れて、無視して [Next] をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/70741f78-0136-136c-bf36-310cd4a34da6.png)

インストールが開始される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/0d94bded-4c1b-2dec-d3c8-9a239c6f1f55.png)

インストールが終了すると、次の画面になる。 [次へ] をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/56f03f0b-dbcf-8b9f-7b11-a937753e76f3.png)

[閉じる] をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/faa0ab44-8526-62dc-e1cc-d4a248c408ab.png)

# cuDNNのインストール
次のサイトから CUDA のバージョンにあった cuDNN をダウンロードする。

https://developer.nvidia.com/rdp/cudnn-archive

まずは、「for CUDA xx.x」の箇所を自分のものと合わせて cuDNN のバージョンを選択する。今回は [```Download cuDNN v8.9.7 (December 5th, 2023), for CUDA 12.x```](##cuda-toolkitのインストール) を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/82d2520e-20a3-8a22-aafa-281684ee1ed4.png)

複数種類のインストーラが表示されるので、自分の環境にあったインストーラを選択する。
今回は ```Local Installer for Windows (Zip)``` をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/50999cfb-d9c9-8509-c373-8b6474524d5f.png)

アカウントの登録もしくはサインインを求められる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/b5a86073-6d3b-a619-2821-9727d131df11.png)

もう一度、cuDNN のバージョンとインストーラを選択すると ```zip``` ファイルがダウンロードされる。
上記の選択では ```cudnn-windows-x86_64-8.9.7.29_cuda12-archive.zip``` がダウンロードされる。

これを解凍して作成された ```cudnn-windows-x86_64-8.9.7.29_cuda12-archive``` を ```C:\Users``` ディレクトリへ移動する。

※ ```zip``` ファイルを解答すると ```cudnn-windows-x86_64-8.9.7.29_cuda12-archive``` の中に ```cudnn-windows-x86_64-8.9.7.29_cuda12-archive``` フォルダがある。後者を移動させること。

# 環境変数の登録
CUDA ToolkitとcuDNNのpathを順次通していく。
「システム環境変数の編集」を起動する。

次のような画面が表示される。[詳細設定 > 環境変数] をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/89cdfd21-526f-e7a2-8529-558bb5dadace.png)

[システム環境変数] の [Path] を選択して、 [編集] をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/1796a577-8706-9d6b-f70b-44f192c1be1e.png)

次のような画面が表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/3f411e93-d306-1aed-cb33-4d180701d4f5.png)

[新規] をクリックして、次のパスを1つずつ登録する。

```
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\libnvvp
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\extras\CUPTI\lib64
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\include
C:\Users\cudnn-windows-x86_64-8.8.1.3_cuda11-archive\bin
```

CUDA のパスが通っているかを確認する。
コマンドプロンプトを起動して，次のコマンドを実行する

```sh
nvcc -V
```

次のように出力されると成功である。

```sh
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Tue_Feb_27_16:28:36_Pacific_Standard_Time_2024
Cuda compilation tools, release 12.4, V12.4.99
Build cuda_12.4.r12.4/compiler.33961263_0
```

# Pytorchのインストール
[先ほど開いたサイト](https://pytorch.org/) でバージョンを選択してコマンドをコピーする。

今回は [```CUDA 12.4```](##cuda-toolkitのインストール) を選択する。

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

これで GPU の利用が可能である。

```py
import torch

# Pytorchのバージョン
print(torch.__version__)

# GPUが利用可能であるか否か
print(torch.cuda.is_available())

# 利用可能なGPUの名前
print(torch.cuda.get_device_name(0))  
```

```
2.5.0.dev20240818+cu124
True
NVIDIA GeForce RTX 3060
```

# トラブルシューティング
私が調査した手順を上記までにまとめてきたが、実際に各手順を実行してみたところ、私はうまくいかなかった。

## エラー
具体的には、```import torch``` を実行するとき、次のエラーが確認された。
一部のディレクトリを省略して ```~``` と記載している。
```python
Traceback (most recent call last):
  File "~\xxx.py", line 1, in <module>
    import torch
  File "~\Lib\site-packages\torch\__init__.py", line 148, in <module>
    raise err
OSError: [WinError 126] 指定されたモジュールが見つかりません。 Error loading "~\Lib\site-packages\torch\lib\fbgemm.dll" or one of its dependencies.
```

以下、さらに試した対策をまとめる。

## Pytorchの別バージョンをインストールする
[CUDA Toolkitのインストール](##cuda-toolkitのインストール) にて、私は Pytorch Build の項目を ```Stable (2.4.0)``` と指定してPytorchをインストールした。これを ```Preview (Nightly)``` に変更するとエラーが解決された。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/6b1d8fdb-b232-5b81-f0d9-077b5302e07c.png)


次に詳細な項目の指定内容を示す。

|項目|エラー発生時|解決後|
|---|---|---|
|Pytorch Build|**Stable (2.4.0)**|**Preview (Nightly)**|
|Your OS|Windwos|Windwos|
|Package|Pip|Pip|
|Language|Python|Python|
|Compute Platform|CUDA 11.8|CUDA 11.8|

解決後のPytorchをインストールするコマンドを次に示す。

```
pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu118
```

インストール後、[確認用プログラム](##確認用プログラム) を実行して動作を確認されたい。

## Microsoft Visual C++ パッケージのインストール
次のサイトにアクセスして、Microsoft Visual C++ Redistributable を入手する。

https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170

[Latest Microsoft Visual C++ Redistributable Version] から自分のアーキテクチャを選択する。
今回の場合は、[X64] をクリックすると、 ```VC_redist.x64.exe``` がダウンロードされる。


```VC_redist.x64.exe``` を起動すると、次のウィンドウが表示される。
[ライセンス条項および使用条件に同意する]にチェックを入れて、[インストール]をクリックする。

![スクリーンショット 2024-08-20 153502.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/782c469d-7c31-84ca-b0ca-c84b861c8b8e.png)

インストールが始まると次の画面になる。

![スクリーンショット 2024-08-20 153523.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/57529821-9349-223b-2db3-374746abf55a.png)

インストール終了後、[再起動]をクリックして、コンピュータを再起動する。

![スクリーンショット 2024-08-20 153533.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2844961/a39d7056-c4b5-1c0f-670c-1587c0d4ad45.png)


再起動後、システム環境変数に次を追加する

```
C:\Windows\SysWOW64
```

もう一度、再起動をした後に [確認用プログラム](##確認用プログラム) を実行して動作を確認されたい。

## 確認用プログラム
次の Python プログラムを実行されたい。

```py
import torch

# Pytorchのバージョン
print(torch.__version__)

# GPUが利用可能であるか否か
print(torch.cuda.is_available())

# 利用可能なGPUの名前
print(torch.cuda.get_device_name(0))  
```

次のような出力を確認できると成功である。
1行目の出力は Pytorch のバージョンなので一致してなくともよい。
特に，```True``` と GPU の型番が出力できているかを確認されたい。

```sh
2.5.0.dev20240818+cu118
True
NVIDIA GeForce RTX 3060
```

# 参考
https://qiita.com/rikinumata/items/b3729ad5144a3e98c6b4#3gpu%E3%81%AE%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B

https://qiita.com/kunishou/items/b1789c446770c8c97613