【2021年版, Win10】Anaconda + kerasのためのGPU構築方法

**画像系のディープラーニングにおいて必要不可欠なGPU環境の構築方法**を説明します。１からやり方を紹介していきますので、引用記事を含めて本記事のみで構築できるかと思います。

基本的に以下の記事を基に構築しました。非常に分かりやすい記事で度々参考にさせていただきましたが、やり方によっては詰まってしまう箇所がいくつかあったので、その点を踏まえた上で記事を書きました。

参考記事：[Anaconda + Keras でGPUを使用する環境を構築する](https://qiita.com/nemutas/items/c7d9cca91a7e1bd404b6)

# 実行環境
Windows 10 Home
NVIDIA GeForce GTX 1050

# 構築の流れ
1. インストールするソフトのバージョン対応確認
2. Anacondaの仮想環境構築
3. Microsoft Visual Studio C++のインストール
4. CUDAのインストール
5. cuDNNのインストール
6. TensorFlow-GPU・Kerasのインストール
7. GPU動作確認

**順番には意味があるので、必ず順番通りに行いましょう。**インストールが終わる前に次のインストールを始めないようにしてください。

#構築作業
## インストールするソフトのバージョン対応確認
**ソフト間でバージョンの合う合わない**があるので、まず対応するバージョンを調べます。インストールするソフトは以下の通りです。（括弧内は私が構築したバージョン）
・Python（3.6）
・TensorFlow-GPU（2.0.0）
・Keras
・Microsoft Visual Studio C++（MVSC）（2017）
・CUDA（10.0）
・cuDNN（7.4）

TensorFlowが公表している[GPU環境構築のためのテスト済みバージョン対応表](https://www.tensorflow.org/install/source_windows?hl=us#gpu)（※）を参考にします。表の``Build tools``以外をインストールする形になります。例えば、``tensorflow-gpu-2.2.0``を使う必要がある場合、３行目の``Python3.5～3.8``のどれか、``MSVC2019``、``cuDNN7.6``、``CUDA10.1``をインストールします。
**※[日本語ドキュメントの対応表](https://www.tensorflow.org/install/source_windows?hl=ja#gpu)だと古いバージョンが出てくるので注意！また、対応表も変わっている可能性があるので、ドキュメントを必ず確認してください。**

####・[英語版テスト済みバージョン対応表](https://www.tensorflow.org/install/source_windows?hl=us#gpu)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403809/57ec59d5-282e-3b2c-d58a-4ad1d629d82b.png)


しかし、**どの組み合わせを選んでもよいというわけではありません。**選ぶ上での条件が２点あります。下記２点を踏まえた上で、対応表から選択してください。

### ① Kerasに対応するPythonバージョンを調べる
[Keras](https://keras.io/about/)の``Installation & compatibility``に対応するPythonバージョンが書いてあります。2021/02/12現在は``Python 3.5–3.8``となっているので、その中から選択します。
**※こちらも[日本語ドキュメント](https://keras.io/ja/)だと古い対応バージョンが出てくるので注意！**
####・[kerasとPythonのバージョン対応](https://keras.io/about/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403809/3e78c120-1f6b-d386-e844-42d97a287f95.png)

### ② CUDAに対応するcuDNNのバージョン存在確認
[cuDNNをインストールするサイト](https://developer.nvidia.com/rdp/cudnn-download)からインストールしたいcuDNNのバージョンが存在するか確認します。入るためにはユーザー登録が必要です。手順は次で説明します。

CUDAは、GPUを使用するためのプラットフォームです。cuDNNは、CUDAのディープラーニング用ライブラリという位置づけになります。CUDAのバージョンを選択してcuDNNをインストールするのですが、**私が構築した際、対応表にある組み合わせが存在しなかったことがあります。**念のため、インストールしたいcuDNNが存在するか確認しましょう。登録が地味に面倒くさいですが、インストールするときには結局必要になります。

####・手順
ユーザー登録後、下のような画面で``Archived cuDNN Releases``を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403809/605118cc-565f-8a58-6d12-baeb221337b7.png)
cuDNNの一覧が出てきます。CUDAに対応するcuDNNが存在するかどうかをここで確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403809/92aabbac-067c-e43e-1e29-e57e26717c07.png)


## Anacondaの仮想環境構築
[Anaconda + Keras でGPUを使用する環境を構築する - 仮想環境の構築](https://qiita.com/nemutas/items/c7d9cca91a7e1bd404b6#%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%81%AE%E6%A7%8B%E7%AF%89)（本章と次章はこのサイトを参照）

余談：Jupyter LabやJupyter Notebookを私は使いましたが、このサイトのようにVScodeで開発できるようにしたかったですね。（続き→注2：オススメのエディター）


## Microsoft Visual Studio C++のインストール
[Anaconda + Keras でGPUを使用する環境を構築する - MSVC（Microsoft Visual Studio C++）のインストール](https://qiita.com/nemutas/items/c7d9cca91a7e1bd404b6#msvcmicrosoft-visual-studio-c%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)

#### ・補足
既に他のバージョンが入っている場合は、追加する形でインストールして問題ありません。

## CUDAのインストール
[初心者がGPU搭載Windows10にPython + Anaconda + TensorFlow + Kerasの環境を構築してみた[2018/4/28]]
(https://qiita.com/jonpili/items/e5444c31fbd16f30725a#cuda%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)

####・インストール確認方法
コマンドプロンプトにて``nvcc -V``と入力し、以下のように出てくれば成功です。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403809/8e4b499a-6d23-a990-80f6-2728366b1c08.png)
もし出てこない場合は、**CUDAへのパスが通っていない可能性があります。**その場合は次のサイトの回答を参考にしてパスを調べてみてください。
https://teratail.com/questions/308928

## cuDNNのインストール
[【Keras/TensorFlow】GPUを使うまでの手順と注意点などを解説します](https://keita-blog.com/data_science/keras-tensorflow-gpu)

####・インストール手順の補足
> 解凍したフォルダの中にbin,include,libと３つのフォルダがあります。binの中のファイルはbinのフォルダの中に、includeの中のファイルはincludeフォルダの中に、libの中のファイルはlibフォルダの中に上書き保存してください。

という文がありますが、解凍したフォルダの中の３つのフォルダ内のファイルと同名のファイルが``NVIDIA GPU Computing Toolkit/CUDA/v.○○/lib``等の下にあるので、それに上書き保存するという意味です。私が意味をはき違えてフォルダごと置き換えてしまったので補足します。

## TensorFlow-GPU・Kerasのインストール～GPU動作確認
[Anaconda + Keras でGPUを使用する環境を構築する - TensorFlow-GPU、Kerasのインストール～確認](https://qiita.com/nemutas/items/c7d9cca91a7e1bd404b6#tensorflow-gpukeras%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)

####・GPU動作確認の補足
mnist学習によるGPU動作確認のコードがありますが、``tensorflow-gpu 2.0.0``でないバージョンで行うと対応してない関数が出てきてエラーになります。GPUデバイスの認識さえされていればGPUは基本的に動くので、該当コードは動かなくても問題ないです。

# トラブルシューティング
私が躓いたポイントを基に、よくあるトラブルへの対処方法を書きます。経験則で書いていますのでご了承ください。環境構築だけでなく、Anacondaを使用している中での話も混ぜてます。
####・構築したがプログラムを動かしてもGPUが動かない。
原因①：バージョンを間違えている。

原因②：インストールしたカーネルで実行していない。
→解決策：``conda activate (仮想環境名)``(注3)
でkerasをインストールした環境に切り替える。それでできない場合は、[Jupyter上での切り替え](https://qiita.com/tomochiii/items/8b937f15c79a0c3eae0e)をする。

####・GPUが突然動作しなくなった。
原因：GPU自体のエラーの可能性
解決策：https://teratail.com/questions/309146

####・色々試しても原因不明でGPUが動かない。
解決策：緊急回避策として[Google Colab](https://colab.research.google.com/notebooks/intro.ipynb?hl=ja)を使う。Google Colabとは、グーグルが提供するブラウザからPythonを実行できるサービスです。GPUが無料で使えてめちゃくちゃ便利です。一方、無料版だとメモリや容量の制限があり、大量の画像を使用する場合は厳しいです。他にも、一定時間経過すると初期化されるなど様々な問題があるので、GPUが回復するまでの一時的な回避策としてのオススメになります。
（参考：Google Colabの使い方まとめ https://qiita.com/shoji9x9/items/0ff0f6f603df18d631ab）

####・（Jupyter Notebook・Labの場合）セルの実行をするとブラウザが固まる。
原因：Jupyter Notebook・Labの実行処理が重い。
解決策：再起動する。または、Spyderなどの他のエディターを使う。

# 便利なカスタマイズ（Jupyter用）
・コード補間設定
https://www.soudegesu.com/post/python/jupyter-autocomplete/

・複数カーネル表示設定（Jupyterで複数カーネルを簡単に選択するための設定）
https://qiita.com/tomochiii/items/8b937f15c79a0c3eae0e

# 最後に
大学の研究で必要となり自力で構築しましたが、研究よりも大変だったと思うくらいきつかったです。この記事が少しでもお役に立てればと思います。
もし何か不明点等がありましたら、コメントいただけると幸いです。

# 脚注
注1：TensorFlowがテスト済みというだけなので、別のバージョンでも動くことはあります。実際、間違えて対応表と違うバージョンをインストールしていたときも動きました。

注2：オススメのエディター：Pythonに慣れていない人はJupyter NotebookかJupyter Lab、慣れている人はVScodeがいいと思います。前者は逐次的に実行しやすく、少しずつ進められます。後者は、使い慣れているエディターだったり、ファイルを分割して進められたりします。個人的には、ネットに転がっているコードは``.py``形式が多く、``.pynb``形式のJupyterNotebookではそのまま使えないので、VScodeでやりたかったですね。

注3：condaかpipのどちらかに統一してインストールすることが推奨されていますので、適宜変更してください。https://www.python.jp/install/anaconda/pip_and_conda.html