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

4 min read読了の目安(約3700字

Unity+ML-Agentsで強化学習

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

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

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

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

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

Windowsの例は、ネットにたくさん情報あると思いますので、そちらを参考にしてください。

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

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

順に説明していきます。

Python環境セットアップ

以下記事参照にセットアップください。

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

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

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

ML-Agentsセットアップ

ターミナルで、以下実行してセットアップします。

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

Unityインストール

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

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

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

$ brew install unity

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

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

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

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

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

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