ml-agents 0.8.0 で自分のプロジェクトで機械学習させる (Windows)(Tensorflow-GPU導入編)

# 前段

Macでのml-agents導入は[こちら](https://qiita.com/warapuri/items/2fb7211a946e6f607bf5)を参照してほしい。

今回はWindows用、それもtensorflow-gpu を使ってやりたい。基本的に以下の本家のページの通りだが

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Installation-Windows.md

ハマリポイントがいくつかあったので、それには注意を促したい、というのがこの記事の趣旨だ。
あと１年後は100%忘れる自信がある私自身のためのものでもある。

# 環境設定

### １、　ml-agents をダウンロード
　　https://github.com/Unity-Technologies/ml-agents/tags/0.8.0
　　をダウンロードして、適当なところに配置

### ２、 anaconda をインストール
　　ターミナルで「conda」と打って反応があれば既にインストール済み

### ３、 仮想環境を作る

```
conda info -e
```

　で[ml-agents]があれば良い。なければ↓でつくる。

```
conda create -n ml-agents python=3.6
```

　で仮想環境を作る（なんか聞かれたら「y」と入力）

```
conda activate ml-agents
```

　で仮想環境切り替え。

### ４、 CUDA toolkit のインストール
　　[Unity ML-agentsドキュメント](https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Installation-Windows.md#optional-step-4-gpu-training-using-the-ml-agents-toolkit)によると、CUDA toolkitのバージョンは「9.0.176」限定であるらしいので、それをダウンロードする。[ダウンロードサイト直リンク](https://developer.nvidia.com/compute/cuda/9.0/Prod/network_installers/cuda_9.0.176_win10_network-exe)

### ５、cuDNN library のインストール

  - [NVIDIAサイトでcuDNN](https://developer.nvidia.com/cudnn)のサイトに行って、ダウンロードの手続きをする。ディベロッパー登録やらアンケートやらをやる必要がある。(こちらもCUDA toolkit 同様、バージョンが限定されているので要注意。「7.0.5」らしい。[ダウンロードサイト直リンク](https://developer.nvidia.com/compute/machine-learning/cudnn/secure/v7.0.5/prod/9.0_20171129/cudnn-9.0-windows10-x64-v7) )
  - ダウンロードしたzipを展開すると「bin」「include」「lib」フォルダができるので、それをCUDA toolkitのインストール先である`C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0`に配置する。

### ６、環境変数の設定
　　`CUDA_HOME` という環境変数を新規に作り、

```
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0
```

　　を設定する。
　　次に、`Path` 環境変数に、以下の二つを追加する。 

```
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\extras\CUPTI\libx64
```

([Unity ML-agentsドキュメント](https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Installation-Windows.md#set-environment-variables)には「関連するパスを__置き換えろ__」と書いてあるが、CUDA toolkit インストール時に書き加えられたパスを消してはいけないので注意が必要)
以下の感じにパスが張っていればＯＫ。
![スクリーンショット_2019-05-02_00_34_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72960/c7065ce0-5ca6-de92-d515-412a551eee5c.png)

### ７、tensorflow-gpu のインストール
　３で作った仮想環境で

```
pip install tensorflow-gpu==1.7.1
```
とやって tensorflow-gpu を仮想環境にインストール。
確認のために、

```bash
python
```
とやって、pythonを起動後、

```python
import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
```
で、tensorflow-gpu が起動するのを試してみる。

```python
Found device 0 with properties ...
```
とかなんとか出れば成功。出てなければ、tensorflow-gpu がインストールできていない可能性がある。

### ８、ML-Agents が使うライブラリをインストール
　　__★★★ここで注意★★★__
　　このままML-Agents の使うライブラリをインストールしようとすると、せっかくいれたtensorflow-gpu に 通常のCPUを使う tensorflow が上書きインストールされてしまう。
なので、ml-agents/setup.py を以下のように編集する必要がある。

```python:setup.py
      :
    packages=['mlagents.trainers'],  # Required
    zip_safe=False,

    install_requires=[
        'mlagents_envs==0.8.0',
#        'tensorflow>=1.7,<1.8', # ←ここをコメントをしておく
        'Pillow>=4.2.1',
        'matplotlib',
        'numpy>=1.13.3,<=1.14.5',
        'jupyter',
      :
```

そして、改めて以下を実行して ml-agents のライブラリをインストールする。

```
cd ml-agents-envs
pip install -e .
cd ..
cd ml-agents
pip install -e .
cd ..
```

確認のために

```
mlagents-learn
```
とやってみてちゃんとUnityロゴのアスキーアートが出ていれば成功。
![スクリーンショット_2019-05-02_00_56_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72960/890ae220-1074-b33a-954d-5b5c7c93f14f.png)

念の為、先ほどのPythonを動かしてみて

```python
import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
```

で、tensorflow-gpu が正常に動いていることを確認する。（たまにCPUに切り替わってたりするので要注意）