🦾

Unity+ML-Agentsで強化学習環境の構築

2021/04/17に公開

Unity+ML-Agentsで強化学習

Unityで強化学習をやりたくなったので、セットアップしてみました。

公式のマニュアルは以下です。

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

ただ、凄い丁寧というわけではないので、Unity全然知らない自分は、結構悩んで色々なサイトのやり方を試行錯誤したり、バージョン違いに苦しみながらセットアップしました。メモとして残しておきます。

環境は、Intel Mac/Apple Silicon Mac/Linux/Windows(WSL2)を想定しています。Linux(Ubuntu)はまだ試していませんが、同じ要領でセットアップできると思います。

実際に、学習まで実施するには、以下の5ステップが必要です。

  • Python環境セットアップ
  • ML-Agentsセットアップ
  • Unityインストール
  • UnityでML-Agentsを使う
  • mlagents-learnで学習テスト

順に説明していきます。

Python環境セットアップ

pyenvかMiniForgeで環境を構築します。

pyenvは以下記事参照ください。

https://zenn.dev/karaage0703/articles/5af7ce4b8b1a8a

MiniForgeに関しては以下記事参照にセットアップしてください。

https://zenn.dev/karaage0703/articles/f3254b14898b4d

ML-AgentsはバックエンドとしてPyTorchを使います(以前はTensorFlowでしたが、途中でPyTorchに変更になりました)。PyTorchもインストールしておきましょう。Intel Mac/Linuxはpipで簡単に入りますが、Apple Silicon(M1) Macの場合は、以下記事のPyTorchのインストールの箇所を参考にセットアップしましょう。

https://zenn.dev/karaage0703/articles/0ab9e654cfb0ec

ML-Agentsセットアップ

ターミナル(WindowsはWSL2上)で、以下コマンドを実行してセットアップします。

$ mkdir mla_test && cd mla_test
$ git clone --depth 1 --branch release_18 https://github.com/Unity-Technologies/ml-agents.git
$ cd ml-agents
$ git checkout -b release_18
$ pip install -e ./ml-agents-envs
$ pip install -e ./ml-agents

Unityインストール

たくさんネットに情報ありますが、以下が参考になりました。

https://qiita.com/tommy1317/items/148fde8765f612af1f61

MacのHomebrewでインストールする場合は、以下コマンドとなります。

$ brew install unity

Linuxの場合は、以下を参考にしました。

http://pineplanter.moo.jp/non-it-salaryman/2020/08/09/unity-ubuntu/

UnityのサイトからUnityHub.AppImageをダウンロードして、適当な場所~/Unityに移動して、実行権限を与えから実行しましょう。実行権限を与えないといけないのがポイントです。GUIを使わずコマンドで実施する場合は以下です。

$ chmod 755 UnityHub.AppImage
$ ./UnityHub.AppImage

VS Codeエディタが好きなので「External Script Editor」の設定はVS Codeエディタにしてみました。VS Codeエディタ自体に関しては、以下記事参照ください。

https://zenn.dev/karaage0703/books/80b6999d429abc8051bb

VS CodeエディタのUnityでの使い方に関しては、以下記事が参考になりそうです。

https://qiita.com/riekure/items/c45868f37a187f8e1d69

UnityでML-Agentsを使う

Unity Hubを開き、「リストに追加」をクリックし mla_test/ml-agents/Projectを選択します。ML-Agents関係のAssetsが読み込まれて起動します。

UnityのAssetsでAssets/ML-Agents/Examples/3DBall/Scenes/3DBall.unityをダブルクリックで開くと、以下のように表示されます。

学習済みのモデルが設定されているので、実行すると以下のようにボールが落ちないようにバランスを取っているのが見られます。

mlagents-learnで学習テスト

次は自分で学習させてみましょう。学習にはmlagents-learnというソフトを使うのが簡単なので試してみます。

ml-agentsフォルダで、以下コマンドを実行します。

$ mlagents-learn config/ppo/3DBall.yaml --run-id=test3DBallRun

実行するたびにrun-idは変えてください。続きから実施する場合は--resumeオプションをつけましょう。

GPU関係のエラーが出る場合は、CUDAのセットアップするか--torch-deviceオプションでcpuを指定しましょう。

$ mlagents-learn config/ppo/3DBall.yaml --run-id=test3DBallRun --torch-device cpu

Unityを再生しろというメッセージが表示されるので、Unityの再生ボタンをクリックすればOKです。

以下のように凄い勢いで学習が始まります。

https://twitter.com/karaage0703/status/1382685895455821830

ログ確認

学習を実行するとresultsディレクトリ以下に指定したrun-idでディレクトリが作成され、その下にログが格納されます。ログを確認したい場合は、以下のようにtensorboardで確認します。

$ tensorboard --logdir results/<run-id>

エラー対応

実行した際、環境によってはエラーが出るかもしれません。

Symbol not found:が表示された場合は、以下コマンド実行しましょう。

$ conda install grpcio

参考: Symbol not found: _deflate from grpc 1.12.0 #15510

OMP: Error #15: Initializing libiomp5.dylib, but found libomp.dylib already initialized.とエラーが表示された場合は、mlagents-learnのコードを修正します。

まず、ファイルの場所を調べます。

$ which mlagents-learn

私の環境では、/Users/karaage/miniforge3/envs/python38/bin/mlagents-learnだったので、エディタで修正します。具体的には、以下2行を追加すればOKでした。

import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'

参考: OMP: Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initialized.

まとめ

UnityとML-Agentsで強化学習のサンプルを動かすところまでやってみました。Unity、ハマると大変そうだと思ってなかなか手を出せずにいたのですが、いよいよ少し試してみようかなと思っています。

しかし、Unity少し触っているのですがバージョン違いなどによる問題がディープラーニング並みに大変な予感…

参考リンク

https://github.com/Unity-Technologies/ml-agents/blob/release_12_docs/docs/Getting-Started.md

https://tech.morikatron.ai/entry/2020/05/08/100000

https://note.com/npaka/n/n660d5e9f7c43

https://note.com/npaka/n/nccaed59e1505

https://note.com/npaka/n/n2aec1a398694

https://www.suzu6.net/posts/270-isntall-unity-ml-agents/

https://gametukurikata.com/machinelearning/mlagents

https://np2lkoo.hatenablog.com/entry/2021/05/01/230254

関連記事

https://karaage.hatenadiary.jp/entry/2021/04/30/073000

https://karaage.hatenadiary.jp/entry/2021/05/07/073000

https://karaage.hatenadiary.jp/entry/rl-tutorial

Discussion