見出し画像

Google Colab ではじめる Unity ML-Agentsのクラウド学習

「Google Colab」による「Unity ML-Agents」のクラウド学習の手順をまとめました。

・Unity ML-Agents Release 19
・Unity 2021.3.6f1

1. Unity ML-Agentsの学習環境

「Unity ML-Agents」には、18以上の学習環境のサンプル提供されています。

2. プロジェクトの準備

プロジェクトの準備手順は、次のとおりです。

(1) 以下のサイトから「Unity Hub」をダウンロードしてインストールし、「Unity Hub」で「Unity 2021.3」をインストール。

(2) 「Unity 2021.3」にモジュール「Linux Build Support (Mono)」を追加。

(3) 以下のサイトの「Release 19」の「Souce Code(zip)」から、zipファイルをダウンロードして解凍。
「ml-agents-release_19」というフォルダができます。

(4) Unityの3Dプロジェクトを新規作成。
(5) メニュー「Window → Package Manager」を開き、「+ → Add package from disk」を選択し、「ml-agents-release_19/com.unity.ml-agents/package.json」を選択。

3. 学習環境の準備

今回は「3DBall」を利用します。準備手順は、次のとおりです。

(1) 「ml-agents-release19/Project/Assets/ML-Agents」にある「Examples」をプロジェクトの「Assets」にコピー。
(2) 「Examples」内の「PushBlockWithInput」を削除。
「PushBlockWithInput」は、追加パッケージのインストールが必要でそのままだとエラーになるため、一旦削除します。
(3) 「Assets/Examples/3DBall/Scenes/」の「3DBall」を開く。

4. 学習環境のビルド

「Google Colab」で学習するには「Linux」の「x86_64」でビルドします。

(1) Unityのメニュー「File → Build Settings」を選択。
(2) 「Platform」で「Windows, Mac, Linux」を選択し、「Target Platform」で「Linux」を選択し、「Build」ボタンを押す。

(3) 「3DBall」の「学習設定ファイル」(ml-agents-release_19/config/ppo/3DBall.yaml)を出力フォルダに追加。

出力フォルダの構成は次のようになります。

・3DBall
 ・3DBall_BurstDebugInformation_DoNotShip
 ・3DBall_Data
 ・3DBall.x86_64
 ・3DBall.yaml
 ・UnityPlayer.so

5. Google Colabでのクラウド学習

「Google Colab」でクラウド学習します。

(1) 出力フォルダをGoogleドライブにアップロード。
今回は、マイドライブ直下にworkフォルダを作成し、そこに出力フォルダ(3DBall)をアップロードします。

(2) Colabのノートブックを作成し、メニュー「編集 → ノートブックの設定」のハードウェアアクセラレータで「GPU」を選択。

(3) Googleドライブのマウントと作業フォルダへの移動

# Googleドライブのマウントと作業フォルダへの移動
from google.colab import drive
drive.mount('/content/drive')
%cd '/content/drive/My Drive/work'

(4) 実行ファイル (.x86_64, .so)の実行権限を付加。

# ファイルに実行権限を付加
!chmod -R 755 3DBall/3DBall.x86_64
!chmod -R 755 3DBall/UnityPlayer.so

(5) ML-Agentsパッケージのインストール。

# ML-Agentsパッケージのインストール
!git clone --branch release_19 https://github.com/Unity-Technologies/ml-agents.git
!pip install -e ml-agents/ml-agents-envs/
!pip install -e ml-agents/ml-agents/

(6) TensorBoardの準備。

# TensorBoardの準備
%load_ext tensorboard
%tensorboard --logdir results

(7) 学習の開始。
「mlagents-learn」で学習を開始します。Colabで学習するには、「--no-graphics」で描画を無効にする必要があります。「Visual Observation」を使うものは学習できなさそうです。

# 学習の実行。
!mlagents-learn 3DBall/3DBall.yaml --run-id=3DBall-ppo1 --env=3DBall/3DBall.x86_64 --no-graphics
            ┐  ╖
        ╓╖╬│╡  ││╬╖╖
    ╓╖╬│││││┘  ╬│││││╬╖
 ╖╬│││││╬╜        ╙╬│││││╖╖                               ╗╗╗
 ╬╬╬╬╖││╦╖        ╖╬││╗╣╣╣╬      ╟╣╣╬    ╟╣╣╣             ╜╜╜  ╟╣╣
 ╬╬╬╬╬╬╬╬╖│╬╖╖╓╬╪│╓╣╣╣╣╣╣╣╬      ╟╣╣╬    ╟╣╣╣ ╒╣╣╖╗╣╣╣╗   ╣╣╣ ╣╣╣╣╣╣ ╟╣╣╖   ╣╣╣
 ╬╬╬╬┐  ╙╬╬╬╬│╓╣╣╣╝╜  ╫╣╣╣╬      ╟╣╣╬    ╟╣╣╣ ╟╣╣╣╙ ╙╣╣╣  ╣╣╣ ╙╟╣╣╜╙  ╫╣╣  ╟╣╣
 ╬╬╬╬┐     ╙╬╬╣╣      ╫╣╣╣╬      ╟╣╣╬    ╟╣╣╣ ╟╣╣╬   ╣╣╣  ╣╣╣  ╟╣╣     ╣╣╣┌╣╣╜
 ╬╬╬╜       ╬╬╣╣      ╙╝╣╣╬      ╙╣╣╣╗╖╓╗╣╣╣╜ ╟╣╣╬   ╣╣╣  ╣╣╣  ╟╣╣╦╓    ╣╣╣╣╣
 ╙   ╓╦╖    ╬╬╣╣   ╓╗╗╖            ╙╝╣╣╣╣╝╜   ╘╝╝╜   ╝╝╝  ╝╝╝   ╙╣╣╣    ╟╣╣╣
   ╩╬╬╬╬╬╬╦╦╬╬╣╣╗╣╣╣╣╣╣╣╝                                             ╫╣╣╣╣
      ╙╬╬╬╬╬╬╬╣╣╣╣╣╣╝╜
          ╙╬╬╬╣╣╣╜
             ╙
        
 Version information:
  ml-agents: 0.28.0,
  ml-agents-envs: 0.28.0,
  Communicator API: 1.5.0,
  PyTorch: 1.8.1+cu102
[INFO] Connected to Unity environment with package version 2.2.1-exp.1 and communication version 1.5.0
[INFO] Connected new brain: 3DBall?team=0
    :

(8) 学習の停止
十分学習したら(今回は「Mean Reward」が100に近くなったら)、Colabのメニュー「ランタイム → 実行の中断」で学習を停止させます。「results/<id>」に学習したモデル(3DBall.onnx)が生成されます。

6. ローカルでの推論

学習したモデルで推論を行う手順は、次のとおりです。

(1) Googleドライブから学習したモデル(3DBall.onnx)をダウンロード。
(2) 学習環境のプロジェクトのAssetsにモデル(3DBall.onnx)を追加。
(3) エージェント「3DBall/Prefabs/3DBall」の「BehaviorParameters」の「Model」に学習したモデル(3DBall.onnx)を指定。

(4) Playボタンで実行。

7. 関連

【おまけ】 PushBlockWithInputの実行

「PushBlockWithInput」は、「InputSystem」や「com.unity.ml-agents-extensions」など依存関係が厳しいですが、「ml-agents-release_19/Project」をUnityで直接開くことで実行することができます。



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