「TensorFlowによる深層強化学習入門」の環境構築～Windows版GPUあり

牧野先生と西崎先生の[「TensorFlowによる深層強化学習入門」](https://www.ohmsha.co.jp/book/9784274226731/)をやってみたいと思いました。
本書の「第1章　はじめに」に環境構築方法が書かれていますがCPU前提のようなので、GPUを使う場合の環境構築の方法をメモしておきます。あとWindowsだとOpenAI Gymの拡張インストールでハマる部分があるので、その点についても記載しておきます。

#前提条件
- Windows 10 Home 20H2
- GeForce GTX 1060 with Max-Q Design (ドライバは記事執筆辞典で461.92)
- Anaconda 4.9.2 (Python 3.8)

#Visual Studioのインストール
自分の場合は[Visual Studio Community版](https://visualstudio.microsoft.com/ja/vs/community/)をインストールしてから進めました。
これをインストールしていないとCUDA Toolkitインストールの際にエラーが出るようです。
ただし[Windows端末にCUDAをインストールする際に、「Visual Studio Integration」のインストールに失敗する場合](https://qiita.com/rhene/items/2a2eac7d1c0a8edc3ac5)に解説されている方法であれば、この手順は飛ばしてもいいかもしれません。

#CUDA関連のインストール
##バージョンの確認
[https://www.tensorflow.org/install/source_windows#gpu](https://www.tensorflow.org/install/source_windows#gpu)に書いてあるバージョンを確認します。
今回はtensorflow-2.4を使おうと思うので、Pythonは3.6～3.8、cuDNNは8.0、CUDA Toolkitは11.0になります。

##CUDA Toolkitのインストール
CUDA Toolkitを[https://developer.nvidia.com/cuda-toolkit](https://developer.nvidia.com/cuda-toolkit)からダウンロードしてインストールします。
ただし、このページから行くと最新版になってしまうので以前のバージョンを使いたい場合は[https://developer.nvidia.com/cuda-toolkit-archive](https://developer.nvidia.com/cuda-toolkit-archive)から所定のバージョンを選択してください。

##cuDNNのインストール
cuDNNを[https://developer.nvidia.com/cudnn](https://developer.nvidia.com/cudnn)からダウンロードします。
以前のバージョンを使いたい場合は[https://developer.nvidia.com/rdp/cudnn-archive](https://developer.nvidia.com/rdp/cudnn-archive)から所定のバージョンを選択してください。

cuDNNはインストーラではないので、解凍して出てきたファイルを`C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v〇〇〇`にコピーします。


#Conda仮想環境構築
続いてCondaのプロンプトを開いて仮想環境を構築します。先に確認したTensorFlowと対応したバージョンのPythonを入れるようにします。

```
conda create -n 仮想環境名 python=3.8
```

仮想環境に入ります。

```
conda activate 仮想環境名
```


#各種モジュールインストール
テキストを参考にしつつ各種モジュールをインストールします。

##TensorFlowのインストール
テキストではバージョンを指定していませんが、GPUを使う場合はTensorFlowも先に確認したバージョンを指定して入れるようにします。

```
pip install tensorflow==2.4.0
```

インストールしたらPythonを起動してTensorFlowのバージョンを確認します。

```python
import tensorflow as tf
print(tf.__version__)
```

どうやらCUDA Toolkitの11.xを入れていると、Anacondaの起動ログに`cusolver64_10.dll`が見つけられなったという旨のエラーが出てくるようです。この場合、`C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin`内の`cusolver64_11.dll`を`cusolver64_10.dll`に名称を変更すると回避できるようです。
詳しくは[こちらを参照](https://stackoverflow.com/questions/65608713/tensorflow-gpu-could-not-load-dynamic-library-cusolver64-10-dll-dlerror-cuso)



TensorFlowをインストール出来たらGPUが利用できるか確認します。Pythonを起動して以下を入力し、GPUの項目が出てくれば成功です。

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


##TF-Agentsのインストール
これはテキスト通りで大丈夫なはず。

```
pip install tf-agents
```

##OpenAI Gymのインストール
これもテキスト通りで大丈夫なはず。

```
pip install gym
```


##PyBulletのインストール
これもテキスト通りで大丈夫なはず。

```
pip install pybullet
```



##OpenAI GymのAtari拡張版のインストール
テキストではOpenAI Gymの拡張版のインストール方法が出てきますが、Windowsだとたぶん「ale_c.dllが見つからない」というエラーが出てうまくいかないと思います。
自分の場合は以下の手順で成功しました。

```
pip install cmake
pip install gym[atari]
pip uninstall atari-py
pip install -f https://github.com/Kojoley/atari-py/releases atari_py
```


#参考資料
[GeForce RTX 3060搭載のWindows10のPCでTensorFlowとCUDAを有効にする](https://qiita.com/drafts/374057f8c8cbb1b13bce/edit)
[Windows 10でtensorflow-gpuを使う方法](https://intellectual-curiosity.tokyo/2019/06/17/windows-10%E3%81%A7tensorflow-gpu%E3%82%92%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%95/)
[Windows版TensorFlow 1.13～1.15でGPUを使う (CUDAのインストール)](https://qiita.com/rhene/items/31bf4713b9dbda28bcc1)