Ml-Agents Release 6(0.19.0) 環境構築まとめ【Windows】

ML-Agentsを触ることがあったのですが、前触ったときといろいろ変わってたので、環境構築のやり方について整理してみました。

# 使用環境
- Windows 10 Pro 1909
- Python 3.7.9 x86-64
    - 最新は3.8.5ですが、ML-Agents（というかvenvなのかな？）は今のところ3.6.x又は3.7.x系のみサポートしてるようなので3.7系の最新バージョンを使いました。
- Unity 2019.4.10f1(LTS)
- ML-Agents Release 6 (0.19.0)

# 参考資料
いろいろな解説サイトあるけど、結局は公式サイトにすべて書いてありました！英語ですがGoogle先生の力も借りながら読みました笑
[Installation](https://github.com/Unity-Technologies/ml-agents/blob/release_6_docs/docs/Installation.md)

# 流れ
1. Unityのインストール
2. Pythonのインストール
3. ML-Agents Unity packageのインストール
4. mlagents Python packageのインストール

と公式マニュアルには書いてありますが、1と3、2と4はセットなので、順番入れ替わっても大丈夫です。（2→4→1→3みたいに）

# やっていくぞい
## 1.Unityのインストール
Unity Hubを使って2018.4より新しいものをインストールしましょう。
僕は現時点(2020/9/15)での最新LTS版2019.4.10f1をインストールしました。

[Download - Unity](https://unity3d.com/jp/get-unity/download)

## 2.Pythonのインストール
公式サイトからPython3.7系の最新バージョンをインストールしました。
「Looking for a specific release?」と書いてある表の中から3.7.x系の一番上にあるやつ(最近更新されたやつ)をダウンロードすればいいと思います。
必ず64bit版(x64-86ってかいてあるやつ)をダウンロードしてください。

[Download Python | Python.org](https://www.python.org/downloads/)

## 3.ML-Agents Unity packageのインストール
UnityのProjectにpackageをインストールします。
ここが昔と比べて格段に分かりやすくなりましたね。
~~(昔はbarracudaをインストールしろとか直感的じゃなかった)~~

UnityでML-Agentsを使いたいプロジェクトを開いてください。

メニューバーから「Window→Package Manager」をクリックして、Package Managerを開いて下さい。
そして、下の画像の赤いところが同じようになっているかを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255360/7d45683f-a070-bb2f-a03f-b702632ff312.png)

次に、右上の検索ボックスから、「ML-Agents」と検索します。すると、ML Agentsのパッケージが出てくると思うので選択して、右下のインストールボタンからインストールしてさい。

これでML-Agents Unity Packageのインストールは完了です。
（Barracudaなどの依存するパッケージもまとめてインストールしてくれます。）


## 4.mlagents Python packageのインストール

### 4-1.仮想環境の構築
ML-AgentsはPythonのいろいろなモジュールを使ってるらしく、既にインストールされているとの被ってたりすると上手く動かないことがあるそう(例えば、numpyモジュールは最新バージョンは対応してない)なので、そこらへん分からない人はおとなしく仮想環境を構築しましょう。
ML-Agentsのバージョンが変わったときにも対応しやすいですし。

前は、Anacondaで環境作るように言われてましたが、今はvenvを使うのが推奨らしいです。

>We do not provide support for Anaconda installation on Windows.

ってことで、venv使って仮想環境を構築していきます。

仮想環境の構築方法も公式マニュアルに載ってて、「[Using Virtual Environment](https://github.com/Unity-Technologies/ml-agents/blob/release_6_docs/docs/Using-Virtual-Environment.md)」に書いてあります。親切！

#### Pipのインストール
公式の手順にはpipをインストールして！と書いてありますが、どうもPython 3.4以降には標準でインストールされているようなので、割愛します。

pipとは簡単に言うと便利なモジュールの管理ツール(install,update,uninstall etc...)です。

#### 仮想環境作成
まずは仮想環境を保存しておくフォルダを作ります。あらかじめ、フォルダを作りたい場所にカレントディレクトリを移動しておいてください。
僕は自分のユーザフォルダ（C:\Users\ユーザ名）下に作ります。

コマンドプロンプトやPowershellなどで、下記のコマンドを入力してください。
すると、「python-envs」というフォルダが作成されたと思います。

```
md python-envs
```

次に、仮想環境を作成します。下記のコマンドを入力してください。
すると、「mlagents-release6」という名前の仮想環境が作成されます。
この「mlagents-release6」という部分は自分の好きな名前に変えてください。ちなみに公式マニュアルでは「sample-env」となってます。

```
py -3.7 -m venv python-envs\mlagents-release6
```

次に、先ほど作成した仮想環境を使えるようにします。この操作を「アクティベート」と呼びます。これをしていないと、「あれ、この前モジュールインストールしたのに使えないなぁ」ってなるので気を付けてください。

```
.\python-envs\mlagents-release6\Scripts\activate
```

上のコマンドを実行して、下のようにコマンド書くところの前に仮想環境の名前が表示されたらアクティベート完了です。


```
PS C:\Users\kamekyame>
# アクティベート後↓
(mlagents-release6) PS C:\Users\kamekyame>
```

ここからは、仮想環境がアクティベートされている前提で進めていきます。

#### Pipのアップグレード
仮想環境内のpipを最新バージョンにアップグレードしておきます。下記のコマンドを実行してください。

```
pip install --upgrade pip
```

人によっては、下のエラーが出るかもしれませんが、とりあえずpipのアップグレードはできてるみたいなので、気にせず、とりあえず放置しておきます。

```
ERROR: Could not install packages due to an EnvironmentError: [WinError 5] アクセスが拒否されました。
```

#### mlagentsのインストール
さいごにmlagentsのインストールです。
ここら辺も昔と比べて随分と楽になって、依存するモジュールもすべてコマンド1行でインストールできるようになりました。
下のコマンドを実行してください。

```
pip install mlagents
```

しばらくすると、`Successfully installed (いろんなモジュールの名前がいっぱい)`と表示されて、インストールが完了します。

この`Successfully installed`の上の方に下記のようなERRORが出る場合があります。

```
ERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts.

We recommend you use --use-feature=2020-resolver to test your packages with the new resolver before it becomes the default.

mlagents-envs 0.19.0 requires numpy<1.19.0,>=1.14.1, but you'll have numpy 1.19.2 which is incompatible.
tensorflow 2.3.0 requires numpy<1.19.0,>=1.16.0, but you'll have numpy 1.19.2 which is incompatible.
```

まぁGoogle先生に聞けば翻訳してくれると思いますが、これは、既にインストールされてたnumpyのバージョンが1.19.0だったけど、mlagents-envsとtensoflowモジュールでは1.16.0~1.19.0(1.19.0は含まない)がサポートされてませんよと言われています。

なので、numpyのバージョンを1.19.0より下のバージョンに変更します。下記のコマンドを実行してください。

```
pip install numpy==1.18.5
```

これで環境構築は終わりです！

# さいごに
これで環境構築は終わりです！
あとは`mlagents-learn`コマンドを使うなりして、良い機械学習ライフを。

新しいことをするのに出くわす最初の壁「環境構築」！
ML-Agentsも例外ではなく、ちょっと混乱しますが、公式マニュアルをよく読めばちゃんとできますね。

ML-Agentsは公式マニュアルが充実していて、だいたいは公式マニュアルで知りたいことが分かります。というか、ML-Agentsは仕様変更も多く、昔のバージョンのコードでは使えないこともしばしば。ML-Agentsについて調べるときには、公式を見るか、誰かの記事ならML-Agentsのバージョンを確認してからにするといいと思いますよ！

さいごに使いそうなリンクを少しだけ貼っておきます。
ここまでご覧いただきありがとうございましたm(__)m

# リンク集
[Unity ML-Agents Github](https://github.com/Unity-Technologies/ml-agents)
[Unity ML-Agents Release 6 Source code & Sample code download page](https://github.com/Unity-Technologies/ml-agents/releases/tag/release_6)
[Unity ML-Agents Toolkit Documentation](https://github.com/Unity-Technologies/ml-agents/blob/release_6_docs/docs/Readme.md) ←ここがすべて
[Unity ML-Agents Installation Documentation](https://github.com/Unity-Technologies/ml-agents/blob/release_6_docs/docs/Installation.md)