見出し画像

Unity ML-Agents 0.14.0 の訓練高速化

1. 学習速度の比較

チュートリアル」のサンプルを元に、以下の7つの環境で、平均報酬が1.0になるまでの時間を比べてみます。「summary_freq」は1000、「グラフィックスなし」の画面サイズはデフォルト(84x84)としました。

(1) Unity Editorで学習(チュートリアルと同じ)
(2) アプリ化して学習
(3) アプリ化して学習 + グラフィックなし
(4) 複数のアプリを起動して学習
(5) 複数のアプリを起動して学習 + グラフィックなし
(6) 1つの環境内に複数のエージェントを配置して学習
(7) 1つの環境内に複数のエージェントを配置して学習 + グラフィックなし

2. Unity Editorで学習

チュートリアルと同じ学習方法です。

$ mlagents-learn config/trainer_config.yaml --run-id=RollerBall1 --train
Step: 18000. Time Elapsed: 196.169 s Mean Reward: 0.992. Std of Reward: 0.088. Training.
Step: 19000. Time Elapsed: 208.821 s Mean Reward: 0.984. Std of Reward: 0.127. Training.
Step: 20000. Time Elapsed: 221.235 s Mean Reward: 1.000. Std of Reward: 0.000. Training.

3. アプリ化して学習

ビルドによって、アプリ化して学習します。Unity 2018では、「Player Settings」の「Display Resolution Dialog」を「Disabled」とします。

$ mlagents-learn config/trainer_config.yaml --env=RollerBall --run-id=RollerBall2 --train
Step: 12000. Time Elapsed: 138.930 s Mean Reward: 0.979. Std of Reward: 0.142. Training.
Step: 13000. Time Elapsed: 149.448 s Mean Reward: 0.979. Std of Reward: 0.144. Training.
Step: 14000. Time Elapsed: 160.487 s Mean Reward: 1.000. Std of Reward: 0.000. Training.

4. アプリ化して学習 + グラフィックなし

「Visual Observation」を使ってない場合は、「--no-graphics」の指定で更なる高速化が期待できます。

$ mlagents-learn config/trainer_config.yaml --env=RollerBall --run-id=RollerBall2 --no-graphics --train
Step: 16000. Time Elapsed: 29.976 s Mean Reward: 0.975. Std of Reward: 0.155. Training.
Step: 17000. Time Elapsed: 31.778 s Mean Reward: 0.967. Std of Reward: 0.180. Training.
Step: 18000. Time Elapsed: 33.617 s Mean Reward: 1.000. Std of Reward: 0.000. Training.

5. 複数のアプリを起動して学習

「--num-envs=<n>」によって、複数のアプリを起動して学習します。

$ mlagents-learn config/trainer_config.yaml --env=RollerBall --run-id=RollerBall3 --num-envs=9 --train
Step: 17000. Time Elapsed: 78.716 s Mean Reward: 0.979. Std of Reward: 0.142. Training.
Step: 18000. Time Elapsed: 83.314 s Mean Reward: 0.980. Std of Reward: 0.139. Training.
Step: 19000. Time Elapsed: 87.921 s Mean Reward: 1.000. Std of Reward: 0.000. Training.

6. 複数のアプリを起動して学習 + グラフィックなし

「--no-graphics」を指定します。

$ mlagents-learn config/trainer_config.yaml --env=RollerBall --run-id=RollerBall3 --no-graphics --num-envs=9 --train
23000. Time Elapsed: 25.150 s Mean Reward: 0.964. Std of Reward: 0.187. Training.
24000. Time Elapsed: 26.214 s Mean Reward: 0.966. Std of Reward: 0.180. Training.
25000. Time Elapsed: 27.370 s Mean Reward: 1.000. Std of Reward: 0.000. Training.

7. 1つの環境内に複数のエージェントを作成して学習

1つの環境内に複数のエージェントを配置して学習します。

$ mlagents-learn config/trainer_config.yaml --env=RollerBall --run-id=RollerBall4 --train
Step: 21000. Time Elapsed: 63.792 s Mean Reward: 0.992. Std of Reward: 0.090. Training.
Step: 22000. Time Elapsed: 68.172 s Mean Reward: 0.992. Std of Reward: 0.091. Training.
Step: 23000. Time Elapsed: 72.325 s Mean Reward: 1.000. Std of Reward: 0.000. Training.

1つの環境内に複数のエージェントを配置する手順は、次のとおりです。

(1) Hierarchyウィンドウで空のGameObjectを生成し、名前に「Area」を指定。

画像1

(2)「Floor」「Target」「RollerAgent」を「Area」の子ノードに移動。

画像2

(3)「Area」をProjectウィンドウにドラッグ&ドロップしてプレハブ化。
(4)「Area」をコピーして合計9つに増やし、XZ座標に15ユニット単位で並べる。

画像3

(5)スクリプト「RollerAgent」のposition(ワールド座標)をlocalPosition(ローカル座標)に変更。

8. 1つの環境内に複数のエージェントを作成して学習 + グラフィックなし

「--no-graphics」を指定します。

$ mlagents-learn config/trainer_config.yaml --env=RollerBall --run-id=RollerBall4 --no-graphics --num-envs=9 --train
Step: 12000. Time Elapsed: 22.362 s Mean Reward: 0.962. Std of Reward: 0.191. Training.
Step: 13000. Time Elapsed: 24.041 s Mean Reward: 0.973. Std of Reward: 0.162. Training.
Step: 14000. Time Elapsed: 25.916 s Mean Reward: 1.000. Std of Reward: 0.000. Training.

9. 比較

結果は訓練のたびにバラツキがあるので、参考までに。

(1) Unity Editorで学習 : 221秒
(2) アプリ化して学習 : 160秒
(3) アプリ化して学習 + グラフィックなし: 33秒
(4) 複数のアプリを起動して学習 : 87秒
(5) 複数のアプリを起動して学習 + グラフィックなし: 27秒
(6) 1つの環境内に複数のエージェントを配置して学習 : 72秒
(7) 1つの環境内に複数のエージェントを配置して学習 + グラフィックなし : 25秒


この記事が気に入ったらサポートをしてみませんか?