Windows11のノートPCでGPUで動作するjupyter notebookの環境を作成する

# 環境
 - Windows11
 - RTX4070搭載

# Anacondaのインストール

https://www.anaconda.com/download

にメールアドレスを入力するとダウンロード画面に遷移するので，ダウンロードする．

インストーラーを起動すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/af0477d5-5c84-5a38-b3ab-d0f8db9668f7.png)

のような画面となるので，手順に沿ってインストール


# CUDA Toolkitのインストール

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

にアクセスし，CUDA Toolkit 11.6.2を選択する．
その後，WindowsのOSのバージョンなどを設定し，ダウンロードを実行する．
のちにインストールするtensorflow-gpu 2.10.0 がこのバージョンでないと合わないので，
最新版は使用しないこと．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/997f1351-3e69-ac11-762c-77f99388e99f.png)

ダウンロード後は，インストーラーを起動し，手順に沿ってインストール


# cuDNNのインストール

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

にアクセスし，CUDA 11.xに対応したcuDNNをダウンロードする
今回は，v8.9.7をダウンロードし，解凍する．
※ CUDA 12.x版のv8.9.7と間違えないように．一見インストールは問題なく行えたように見えるが，GPUで計算させる際に動かない．
ダウンロードする際には，アカウントの登録が必要なので，登録を行う．

すると下記のようなファイルがあるので，これを

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/3b4d4957-3ba0-2e34-1fda-26ab255817b5.png)


C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6
を開き，そこにある,bin, include, libに移動させる．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/d7170660-73aa-1066-3b1e-4d2163f88e0a.png)


# zlibのインストール

https://docs.nvidia.com/deeplearning/cudnn/archives/cudnn-891/install-guide/index.html#install-windows
にアクセスし，

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/cb9293b9-cda7-cefb-9c34-483b2e9eced5.png)

のZLIB DLLの部分をクリックし，ダウンロードする．
ブラウザによっては，ダウンロードする際に不審なファイルと判断される場合があるので，
ダウンロードを許可してやらないといけない．

解凍すると下記のようなファイルがあるので，

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/b87563e1-18c2-daf9-3f73-e886bd47c160.png)

dll_x64のzlibwapi.dllを
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\bin
にコピーする．

# tensorflow-gpuのインストール

先ほどインストールしたAnaconda Navigaterを起動する．

Environmentsを選択し，左下のCreateから仮想環境を作成する．
作成する際は，名前はなんでも良いが，pythonのバージョンは3.7～3.10の間にする必要がある．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/2a6a328e-24eb-2344-f67f-84d5ed5cd391.png)


作成後は，三角ボタンからターミナルを開く

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/c5eda6be-c393-1cba-69f6-31ccdc5737f3.png)


ターミナルを起動後，下記の手順でtensorflow-gpuのインストールを行う．
numpyがver 1.xでないと動かないので，ダウングレードする．

```
(GPU)> python -m pip install -U pip setuptools
(GPU)> pip install "numpy<2.0.0"
(GPU)> pip install tensorflow-gpu==2.10.0
```

GPU環境がうまくできたかの確認

```
(GPU)>python
>>> from tensorflow.python.client import device_lib
>>> device_lib.list_local_devices()
```

```
"/device:GPU:0"
device_type: "GPU"
memory_limit: 5797576704
locality {
  bus_id: 1
  links {
  }
}
```
のようにGPUの表示がでればGPUが動作している．


# jupyter notebook上で動作するように設定


ipykernelをインストール
```
(GPU)>pip install ipykernel
```

```
(GPU)>ipython kernel install --user --name=xxxxx
```
仮想環境のカーネルをjupyter notebook上で使用できるようにする
xxxxxの部分には，今回作成した仮想環境名を設定．
今回であれば，GPUと記述すれば良い

Windows上のjupyter notebookを立ち上げる．

右上のnewからNotebookを選択．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/81378766-886b-54f0-a38f-26ce9147bb3e.png)


Kernelを選択する画面がでるので，先ほど作成した仮想環境の名前を選択することでGPUが使用できるようになっている．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189046/49304b07-32da-d1ab-1be3-87bf55eac8c8.png)


追加でpandasなどのpythonのライブラリをインストールする場合は，jupyter notebook上でインストールするのではなく，anacondaの仮想環境のターミナルでインストールする必要がある．