Jupyter NotebookでローカルのGPUを使う方法

## はじめに
Jupyter NotebookでローカルPCのGPUを使ってみたいなぁ・・・せっかくワークステーション持ってるんだし。
というのが今回のモチベーション。

### やったこと
とにかくやったことを順番に解説していきます。

#### ①Anacondaで仮想環境を構築
スタートメニューからAnaconda Navigatorを起動。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/69792db9-6202-bf6d-8369-74c545f82c67.png)

Environments→Createをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/58fe36ab-81e7-b742-6a6b-6929092ab393.png)

任意の名前を入力（今回は、"local_GPU"とした。）して、Createボタンをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/024d852b-5d0b-38b6-7628-09a400b9c562.png)

仮想環境（local_GPU）が作成されました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/51a985f8-7d38-cb57-5363-aebd3823fc76.png)

#### ②CUDA toolkitをインストール
下記のサイトから最新のインストーラをダウンロードします。
https://developer.nvidia.com/cuda-toolkit-archive
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/7a434a7c-adad-3383-8d44-8f3c6ad79542.png)

PCの環境に合わせて選択し、Downloadをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/5e61478b-6d3d-e057-6800-ae1f24d46c03.png)

ダウンロードした実行ファイルを実行してインストーラを起動。

そのままOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/f9ddb448-cb67-d622-d59e-530504218ccb.png)

同意して続行するをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/03582564-ea45-9822-2f20-08b85a618e34.png)

高速（推奨）を選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/cd6e66e7-6e4e-2997-dcc8-df09ff094a07.png)

インストールが始まりますので、しばらく待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/8f30726a-c09c-3b25-5711-cbea4f739f6f.png)

次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/4f557171-7db1-973f-d12a-f148aa966f4e.png)

閉じる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/7da89401-c09c-6f13-e17e-8a2c4a349044.png)

#### ③cuDNNをインストール
下記のサイトから最新のものをウンロードします。
https://developer.nvidia.com/rdp/cudnn-archive

右上のJoinをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/b176d6d3-9cbf-a4e2-38a2-96c091303838.png)

メールアドレスを入力してNEXT
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/4811b589-99bc-5442-f1f2-0c1dd80b5958.png)

・アカウント登録していない場合
パスワードを入力してアカウントを作成する画面が表示されますので、画面に従ってアカウント登録をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/e950ed42-12e4-4ae4-8d6c-4096ed1dc800.png)

・既にアカウント登録している場合
今はしないをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/52215c0b-491c-a99e-3a49-79e96b6fe618.png)

認証後、インストーラを選択してダウンロードします。
今回は、"Download cuDNN v8.6.0 (October 3rd, 2022), for CUDA 11.x"を選択しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/32ef9e77-f1b8-67e4-c720-4fd74dd7e6f2.png)

ZIPファイルでダウンロードされるので、解凍します。
（ちなみに解凍した中身はこんな感じです。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/b90bb3bd-da77-dd68-c3e6-ebaf93875020.png)


次に、CUDA toolkitをインストールしたディレクトリ(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0\)に解凍したファイルをすべてコピーします。

・bin
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/cf169dc7-dee5-aa7c-be15-06b057c7a35b.png)


・include
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/22741f66-1b5d-018c-f805-f5e58775b2a6.png)

・lib
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/d948f1b4-6894-4b2a-ed73-8bfac493f9de.png)

#### ④zlibをインストール
下記のサイトを開き、ZLIB.DLLを右クリック→名前を付けてリンク先を保存をクリック。
https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#install-zlib-windows
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/ac1d3b6b-e4c1-2ad1-7a56-b510a807361e.png)

ZIPファイルでダウンロードされるので、解凍します。
（ちなみに解凍した中身はこんな感じです。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/3e115106-910c-1b05-f37b-b30648c524a6.png)

zlib123dllx64\dll_x64のzlibwapi.dllをCUDA toolkitをインストールしたディレクトリ(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0\bin)にコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/75dedff4-ecc8-d9ba-24f6-5a1bd33441b0.png)

#### ⑤Tensorflow-gpuをインストール
Anaconda Navigatorより、先ほど作成した仮想環境（local_GPU）からTerminalを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/f29c91c1-8574-136d-13f6-f4f8b3ac3bcd.png)

下記のコマンドを実行します。
```
pip install tensorflow-gpu==2.6.0
```

インストールが完了したら、下記のコマンドを実行します。
```
>python
>>> from tensorflow.python.client import device_lib
>>> device_lib.list_local_devices()
```

実行結果がこんな感じになっていればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/c8a1430b-1fbf-5aef-ff57-9915eab045c6.png)
↑↑device_type:GPUってのが表示されればOKですね。

#### ⑥Jupyter Notebookに仮想環境を追記
仮想環境（local_GPU）のTerminal上で下記のコマンドを実行します。
```
pip install ipykernel
```
インストールが完了したら、さらに下記のコマンドを実行します。
xxxxxの部分は仮想環境名（今回の場合は"local_GPU"）に置き換えてください。
```
ipython kernel install --user --name=xxxxx
```
Kernelに仮想環境が追加されているのが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980545/e9fff3c4-c7eb-c6c8-7139-aeeabda21758.png)

以上！

## おわりに
上から順番にやっていけば環境構築できるようにまとめたつもりです。
私が実践したときはたくさんのエラーと出会い、いろんなサイトを調べながら行ったり来たりで大変でした・・・。

みなさんの一助となれば幸いです！