【Python】Jupyter環境において、TensorFlowでGPUを使う

# はじめに
TensorFlowを用いて機械学習を行う際に、GPUを使用しないと、処理が遅いので
GPUを使用して解析する設定にしました。
本記事では、Visual Studio Codeをエディターとして用い、GPUを用いる際に必要なソフトウェアのインストール方法から、仮想環境とJupyter環境の構築まで説明します。
## 環境
### ハードウェア環境
|項目|値|
|:--------------:|:-----------------:|
|OS|Windows 11|
|CPU|12th Gen Intel(R) Core(TM) i7-12700|
|GPU|NVIDIA GeForce RTX 3060 Ti|
### ソフトウェア環境
2024/4/1において、TensorFlowはPython 3.9 ～ 3.11に対応
|項目|値|
|:----:|:-----:|
|Python|3.9.13|
|Editor|Visual Studio Code|
# Microsoft Visual C++ 再頒布可能パッケージのインストール
（既にインストールされている可能性もあります。以下のアプリケーションがインストールされているか確認し、入っていなければインストールします。）
確認場所：コントロールパネル → プログラム → プログラムと機能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760884/d396b0bb-f7ab-8695-1fff-6e95677cc3e2.png)

Visual Studio 2015、2017、および 2019 の Microsoft Visual C++ 再頒布可能パッケージを
[このリンク](https://learn.microsoft.com/ja-JP/cpp/windows/latest-supported-vc-redist)よりインストールします。

# NVIDIA® GPU ドライバ のインストール
[こちらのリンク](https://www.nvidia.com/download/index.aspx)よりお使いのGPUにあったドライバーをインストールします。
次の手順でCUDA® 11.2 をインストールします。
CUDA® 11.2 にはNVIDIA® GPU ドライババージョン 450.80.02 以降が必要となります。
そのため、お使いのGPUが古い場合、対応していない場合があります。

# CUDAのインストール
CUDA Toolkit 11.2を[こちらのリンク](https://developer.nvidia.com/cuda-11.2.2-download-archive)よりダウンロードします。
Window11の対応はありませんでしたが、今のところ問題はありません。
デフォルトだと、以下のディレクトリに格納されると思います。
```
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760884/e0f3afb1-55c1-d8b8-b738-3420b97d7efd.png)

# cuDNNのインストール
cuDNN v8.1.1をダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760884/5360adf1-511a-cf61-c8d5-8464405d4dc4.png)
後で環境変数のPATHを設定するため、ダウンロードしたファイルを以下のディレクトリに保存します。
今回は、Cドライブの直下に「tools」という名前のフォルダを作成し("C:\tools")、その中にダウンロードしたファイルを解凍して入れます。
(バージョンに関しては、CUDAに対応したものであればよいと思います。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760884/716071de-aa79-5692-602b-30bce45d18d5.png)

# 環境変数の設定
環境変数のPATHを設定します。
様々な方法がありますが、やりたいことは、環境変数の「PATH」にダウンロードしたCUDAファイル内の「bin」「lib64」「include」と保存先として選んだフォルダ(今回はCドライブ直下)に格納したcuDNNファイル内の「bin」までのディレクトリを環境変数のPATHに入れてあげることです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760884/df776ed4-a7c2-f235-715f-87e7fb4e0f85.png)
上の図のPathに以下のディレクトリを入れてあげます。
(保存場所やファイル名によって、ディレクトリは適切に変更してください。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760884/e0eb3712-0b35-c9f6-2612-d11c115146c5.png)

# 仮想環境の構築
コマンドプロンプトを開きます。
仮想環境を作りたい先のディレクトリに移動し、以下のコマンドを入力します。
今回は仮想環境の名前を「.venv_ml」にしました。
私の場合、仮想環境をNドライブの中の「.python」というフォルダの下に作りました。
```
N:\.python\python -m .venv_ml
```

```
#仮想環境の名前を「.venv_ml」にしたい場合
python -m venv .venv_ml


#仮想環境の名前を「ML」にしたい場合
python -m venv ML
```
エクスプローラーでも仮想環境用のファイルを作成できていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760884/85d2860e-fedf-1535-a201-645447b91437.png)
仮想環境を作ったので仮想環境に入ります。
まず、作成した名前のフォルダの中にある「Scripts」というフォルダまで移動します。
```
N:\.python\cd .venv_ml\Scripts

N:\.python\.venv_ml\Scripts
```
エクスプローラーで確認すると、以下のフォルダです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760884/28a0f8ae-a879-ee12-8fec-c8ee02a46d4d.png)
この中の「activate」というファイルを実行したいので、コマンドプロンプト上で「activate」と記述し、「Enter」を押します。
```
N:\.python\.venv_ml\Scripts>activate
```
そうすると、以下のような画面に移ります。
```
(.venv_ml) N:\.python\.venv_ml\Scripts>
```
仮想環境の名前がかっこ書きで示されています。
これで仮想環境に入ることができました。
# TensorFlowのインストール
TensorFlow 2.11以降はWindowsでGPUをサポートしていません。
そのため、以下のコマンドでTensorFlowをインストールします。
```
(.venv_ml) N:\.python\.venv_ml\Scripts>pip install "tensorflow<2.11"
```
# Jupyter環境の構築
Jupyter環境で動かすため、ipykernelをインストールします。
```
(.venv_ml) N:\.python\.venv_ml\Scripts>pip install ipykernel
```
以下のコマンドでカーネルを追加します。
```
#カーネルの名前を「ipy_ml」にする場合
(.venv_ml) N:\.python\.venv_ml\Scripts>ipython kernel install --user --name=ipy_ml

#カーネルの名前を「ml」にする場合
(.venv_ml) N:\.python\.venv_ml\Scripts>ipython kernel install --user --name=ml
```

# 動作確認
### コマンドプロンプト上で確認する場合
コマンドプロンプト上で確認する場合、以下のコマンドを打ち込みます。
（仮想環境に入った状態で行ってください。）
```
python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
```
GPUが設定された場合以下の内容が出力されます。
```
(.venv_ml) N:\.python\.venv_ml\Scripts>python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
```
### Jupyter環境上で確認する場合
ソースコードの内容は同じですので、カーネルの起動方法を説明することになります。
エディターはVisual Studio Codeを用いた手順となります。
まず、適当なディレクトリに「.ipynb」を拡張子とするファイルを作成してください。
今回は、Nドライブのディレクトリの下に「work」というフォルダを作成し、その下に「test.ipynb」というファイルを作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760884/8dafad10-5218-32a2-9ff9-a79989e0aecd.png)
「Select Kernel」をクリックすると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760884/09d33369-973f-80a3-5919-f3a33e3ec37d.png)
以下のような画面が出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760884/c9be58b1-5d06-1f0f-ce3c-d7e56cc9eef5.png)
Jupyter Kernelをクリックすると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760884/55f89bc5-4011-6bdf-2c5e-a1bf96b3ddc5.png)
先ほど作成した「Kernel」がでてきます。
これをクリックします。すると、先ほど「Select Kernel」と記載されていた場所が設定した「Kernel」の名前になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760884/669ff95e-354e-ddfb-1c1b-81804c0be5d0.png)
以下のコマンドを入力します。
```python:test.ipynb
from tensorflow.python.client import device_lib
device_lib.list_local_devices()

#以下のような出力が得られます(私のPC環境の場合)
....(略)
 name: "/device:GPU:0"
 device_type: "GPU" ....(略)

```
ここにGPUが出てこれば、GPUを認識しています。
この状態でTensorFlowを動かせば、GPUを使用できます。

# さいごに
初心者の方でもわかりやすいよう、丁寧に説明しました。
不明点等ございましたら、コメントお願いいたします。
今後、機械学習を学ばれる方の参考になれば幸いです。