#0. はじめに
どうも、Yuulisです。2021年の4月下旬にML-AgentsのRelease 17が公開されたので、今回はそれを導入していきます。
ML-Agentsの公式ドキュメントも参考に。英語ですが。
前回の記事はこちら。
なお、この解説の前提条件は、
・Unity 2020.3以上がインストールされていること
・Anacondaがインストールされており、環境変数にAnacondaのPathが追加されていること
とします。
#1. ML-Agents toolkitをダウンロード
Release 17のbranchからzipファイルをダウンロード。branchじゃないとダメっぽい。
好きなところに展開しておきます。
#2. Anacondaで仮想環境を構築
Anacondaを起動し、Python3.7を導入。必ず3.6か3.7を導入してください。
(base) C:\Users\Yuulis>conda create -n ML-Agents2 python=3.7.9 anaconda
ここでの仮想環境名は、ML-Agents2
としました。
Solving environment:
と出て読み込みがされていれば成功です。環境によっては、ここで結構時間がかかるかもしれません。
#3. mlagentsパッケージとPyTorchをインストール
まずは、ML-Agentsのパッケージをインストールします。
次のコマンドで先ほど作成した仮想環境をアクティブ化します。
(base) C:\Users\Yuulis>conda activate ML-Agents2
(ML-Agents2)
と一番左に出ていればOKです。
続いて、先ほどダウンロードしたmlagentsのディレクトリに移動し、mlagentsのパッケージを2つインストール。
(mlagents2) C:\Users\Yuulis>cd (ml-agents-release_17_branchのPath)
(mlagents2) C:\Users\Yuulis>cd ml-agents-envs
(mlagents2) C:\Users\Yuulis>pip install -e .
(mlagents2) C:\Users\Yuulis>cd ..
(mlagents2) C:\Users\Yuulis>cd ml-agents
(mlagents2) C:\Users\Yuulis>pip install -e .
インストールが終わったら、pip freeze
で確認しときましょう。
# Editable install with no version control (mlagents==0.26.0)
-e c:\users\Yuulis\ml-agents\ml-agents-release_17_branch\ml-agents
# Editable install with no version control (mlagents-envs==0.26.0)
-e c:\users\yuulis\ml-agents\ml-agents-release_17_branch\ml-agents-envs
torch==1.7.1+cu110
こうなればOK。
次に、以下のコマンドでPyTorchをインストール。インストール場所はブランチのディレクトリ上です。
(mlagents2) C:\Users\Yuulis>pip install torch==1.7.1 -f https://download.pytorch.org/whl/torch_stable.html
#4. Unityにmlagentsパッケージをインストール
今度は、Unityにmlagentsのパッケージを入れます。
Unityで新しいプロジェクトを作ります。今回はUnity 2020.3.6f1を使用。
プロジェクトが開いたら、上の「ウィンドウ」から「Package Maneger」を選択。
左上の+ボタンから、「Add package from disk...」を選択。
com.unity.ml-agents/package.json
と、com.unity.ml-agents.extensions/package.json
を選択して導入。
Package Manegerの操作は完了。
そして、「ファイル」から「ビルド設定」、「プレイヤー設定」を選択。
謎のインポートが出ますが、終わるまで待って、「API 互換性レベル」のところを、「.NET 4.x」に変更。
ここまでで、UnityでMl-Agentsが使えるようになりました。
#5. サンプルを学習させてみる
##5-1. 学習の準備
では、サンプルを学習させてみます。
Release 17のサンプルを動かすには、いくつか追加でパッケージをインストールしなければいけません。
Package Manegerを開き、Input System 1.1.0 -preview.3をインストール。
インストール完了後、こんな警告が出るので、いったん「YES」を選択。Unityが再起動します。
しかし、これだと旧バージョンのInput Systemが使えないので、「ビルド設定」から「プレイヤー設定」を開き、「使用中の入力処理」を「両方(both)」に変更。
また警告が出るので、「Apply」を選択。Unityが再起動します。
さらに、ローカルフォルダでML-Agents2_test\Packages\manifest.json
を開き、"com.unity.nuget.newtonsoft-json": "2.0.0"
の一行を追加します。
今度は、ダウンロードしたブランチのファイルから、.\Project\Assets\ML-Agents
のフォルダをUnityのAssetsフォルダにドラッグアンドドロップ。
好きなモデルのシーンを選択してください。今回は、3DBallを試してみます。
ここでエラーが出る場合は、Unity上でPushBlockWithInput
というフォルダを削除してみてください。
「Play」ボタンを押すとこんな感じ。かわいい。
##5-2. 学習させてみる
Anaconda3で次のコマンドを打ちます。
# 仮想環境の起動
(base) C:\Users\Yuulis>conda activate mlagents2
(mlagents2) C:\Users\Yuulis>cd (ml-agents-release_17_branchのPath)
そして、次のコマンドで学習を実行します。
(mlagents2) C:\Users\Yuulis\ML-Agents\ml-agents-release_17_branch>mlagents-learn .\config\ppo\3DBall.yaml --run-id=test3DBall
こんな感じのアスキーアートが出たらOK。
▄▄▄▓▓▓▓
╓▓▓▓▓▓▓█▓▓▓▓▓
,▄▄▄m▀▀▀' ,▓▓▓▀▓▓▄ ▓▓▓ ▓▓▌
▄▓▓▓▀' ▄▓▓▀ ▓▓▓ ▄▄ ▄▄ ,▄▄ ▄▄▄▄ ,▄▄ ▄▓▓▌▄ ▄▄▄ ,▄▄
▄▓▓▓▀ ▄▓▓▀ ▐▓▓▌ ▓▓▌ ▐▓▓ ▐▓▓▓▀▀▀▓▓▌ ▓▓▓ ▀▓▓▌▀ ^▓▓▌ ╒▓▓▌
▄▓▓▓▓▓▄▄▄▄▄▄▄▄▓▓▓ ▓▀ ▓▓▌ ▐▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▌ ▐▓▓▄ ▓▓▌
▀▓▓▓▓▀▀▀▀▀▀▀▀▀▀▓▓▄ ▓▓ ▓▓▌ ▐▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▌ ▐▓▓▐▓▓
^█▓▓▓ ▀▓▓▄ ▐▓▓▌ ▓▓▓▓▄▓▓▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▓▄ ▓▓▓▓`
'▀▓▓▓▄ ^▓▓▓ ▓▓▓ └▀▀▀▀ ▀▀ ^▀▀ `▀▀ `▀▀ '▀▀ ▐▓▓▌
▀▀▀▀▓▄▄▄ ▓▓▓▓▓▓, ▓▓▓▓▀
`▀█▓▓▓▓▓▓▓▓▓▌
¬`▀▀▀█▓
Version information:
ml-agents: 0.26.0,
ml-agents-envs: 0.26.0,
Communicator API: 1.5.0,
PyTorch: 1.7.1+cu110
[INFO] Listening on port 5004. Start training by pressing the Play button in the Unity Editor.
UnityのPlayボタンを押して、学習をスタート。高速で学習が進みます。
実行中のログはこんな感じ。
[INFO] 3DBall. Step: 12000. Time Elapsed: 37.150 s. Mean Reward: 1.158. Std of Reward: 0.748. Training.
[INFO] 3DBall. Step: 24000. Time Elapsed: 67.693 s. Mean Reward: 1.321. Std of Reward: 0.811. Training.
[INFO] 3DBall. Step: 36000. Time Elapsed: 104.730 s. Mean Reward: 1.813. Std of Reward: 1.146. Training.
[INFO] 3DBall. Step: 48000. Time Elapsed: 159.660 s. Mean Reward: 2.754. Std of Reward: 1.822. Training.
[INFO] 3DBall. Step: 60000. Time Elapsed: 187.318 s. Mean Reward: 4.802. Std of Reward: 4.031. Training.
[INFO] 3DBall. Step: 72000. Time Elapsed: 212.711 s. Mean Reward: 10.345. Std of Reward: 9.217. Training.
[INFO] 3DBall. Step: 84000. Time Elapsed: 237.549 s. Mean Reward: 27.109. Std of Reward: 26.229. Training.
[INFO] 3DBall. Step: 96000. Time Elapsed: 259.744 s. Mean Reward: 68.819. Std of Reward: 29.598. Training.
[INFO] 3DBall. Step: 108000. Time Elapsed: 281.904 s. Mean Reward: 78.619. Std of Reward: 35.049. Training.
[INFO] 3DBall. Step: 120000. Time Elapsed: 303.880 s. Mean Reward: 88.169. Std of Reward: 26.931. Training.
[INFO] 3DBall. Step: 132000. Time Elapsed: 328.001 s. Mean Reward: 94.977. Std of Reward: 17.400. Training.
[INFO] 3DBall. Step: 144000. Time Elapsed: 353.802 s. Mean Reward: 98.850. Std of Reward: 3.814. Training.
[INFO] 3DBall. Step: 156000. Time Elapsed: 380.172 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 168000. Time Elapsed: 410.259 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 180000. Time Elapsed: 437.282 s. Mean Reward: 95.615. Std of Reward: 15.189. Training.
[INFO] 3DBall. Step: 192000. Time Elapsed: 462.558 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 204000. Time Elapsed: 502.204 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 216000. Time Elapsed: 542.187 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 228000. Time Elapsed: 580.243 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 240000. Time Elapsed: 613.892 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 252000. Time Elapsed: 639.569 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 264000. Time Elapsed: 664.050 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 276000. Time Elapsed: 699.197 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 288000. Time Elapsed: 734.714 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 300000. Time Elapsed: 761.823 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 312000. Time Elapsed: 789.209 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 324000. Time Elapsed: 820.857 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 336000. Time Elapsed: 848.906 s. Mean Reward: 93.792. Std of Reward: 20.591. Training.
[INFO] 3DBall. Step: 348000. Time Elapsed: 872.485 s. Mean Reward: 98.331. Std of Reward: 5.782. Training.
[INFO] 3DBall. Step: 360000. Time Elapsed: 898.045 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 372000. Time Elapsed: 939.385 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 384000. Time Elapsed: 986.738 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 396000. Time Elapsed: 1043.034 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 408000. Time Elapsed: 1080.173 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 420000. Time Elapsed: 1112.859 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 432000. Time Elapsed: 1132.707 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 444000. Time Elapsed: 1163.200 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 456000. Time Elapsed: 1198.443 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 468000. Time Elapsed: 1229.967 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 480000. Time Elapsed: 1259.384 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
[INFO] 3DBall. Step: 492000. Time Elapsed: 1287.441 s. Mean Reward: 100.000. Std of Reward: 0.000. Training.
3DBallでは50万stepで学習が終わります。
終わったら、ブランチのディレクトリの中に.\resluts\test3DBallRun\3DBall.onnx
というファイルができていると思います。これをUnityのヒエラルキーウィンドウの以下のところにドラッグアンドドロップ。
名前を3DBall_test
に変えときました。
##5-3. 学習結果をグラフでチェック
学習後、次のコマンドで学習結果をグラフで見ることができます。
(ML-Agents2) C:\Users\Yuulis\ML-Agents\ml-agents-release_17_branch>tensorboard --logdir results
こんな感じにlocalhostのリンクが出るので、コピペしてアクセス。
TensorFlow installation not found - running with reduced feature set.
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.5.0 at http://localhost:6006/ (Press CTRL+C to quit)
以上で環境構築は完了です。
#6. 終わりに
今回は、ML-Agents Release 17の環境構築をしてみました。環境構築はエラーとの戦いといっても過言ではありません。エラーが出たらコピペしてググるか、Unity ML-Agentsの公式フォーラムで質問してみるのも一つの手です。Unity公式の方が教えてくれるはずです。
最後までお読みいただきありがとうございました。