Unity3D ML – Ml Agents Command Line Training Options

簡介

在Unity Editor端的虛擬環境、訓練程式都做完之後,就要進入Training Config與開啟這篇要講的Command Line指令輸入。我們在先前的3D平衡小球有跑過全部的流程,而在跑小球時有提到最基本也最重要的Command Line指令,這邊在小題一下如下,就可以完成所有的動作並產生(nn)訓練模型檔在資料夾中。而這篇我們來介紹更多的ml指令。

mlagents-learn <trainer-config-path> --run-id=<run-identifier> --train
//執行ml training
tensorboard --logdir=summaries
//開啟tensor board

Training with mlagents-learn

Unity透過ml-agents來訓練Unity Editor中的Agent元件,ml-agents支援幾種AI Branch中的選項,例如機器學習中的增強學習(Reinforcement Learning)、課程學習(Curriculum Learning)與行為複製模仿學習(Behavioral Cloning Imitation Learning)。在此我再來更深入的說明主要ml-agent的Command Line指令對應的東西與必要的參數。

mlagents-learn <trainer-config-file> --env=<env_name> --run-id=<run-identifier> --train

1.mlagents-learn – 這是在command line 要喚起訓練時的指令,例如你要使用到git時候,你必須先安裝好git軟體,透過command line輸入 git clone + 網址,此時電腦就會喚起git來複製網路上的檔案。
2.trainer-config-file – 這邊就是要告訴你的Unity ml-agents的train_config.yaml的路徑,這樣電腦才知道我要去哪裡讀取你所設定好的訓練設定檔。必須要提到的是你假如是自己創建一個訓練虛擬環境,你會將自己的Brain檔案命名,要注意的是在你的train_config檔名稱也必須與你的Brain檔名稱一樣才會運行正常。

3.env_name – (此指令是選用,不一定要用),此功能是Unity可執行文件的名稱(包括路徑),其中包含要訓練的場景,但假如你已經透過command line進入你Unity場景檔案路徑中的話,其實這指令可以不用輸入在裡面,當你將上方整串指令輸入後,按下Enter看電腦是否有回覆你,“Start training by pressing the Play button in the Unity Editor” ,你就可以在Unity Editor中按下Play開始訓練。
4.run-identifier – 是一個可選的標識符,可用於識別單個訓練跑步的結果,你在此指令中可以鍵入你對該次訓練出來的(nn)檔所要賦予的名稱,訓練出來後會產生如下圖紅色框框中的資料夾,資料夾中將會有該次的訓練的model檔。

Command Line Training Options

除了傳遞包含您的訓練環境的Unity可執行文件的路徑之外,還可以在調用mlagents-learn時設置以下命令行選項,以下的指令也可以透過輸入『 mlagents-learn -h 』查詢(要注意你的Anaconda環境是否有安裝好ml-agent),在此來解釋一些指令。如下圖,所呈現是較為簡單的描述,在下面會更為進階的講述。

千篇一律的Sample Command Line:
mlagents-learn <trainer-config-file> --run-id=<run-identifier> --train

1. –env=<env> : 指定要訓練的Unity可執行環境,預設是不用鍵入在指令中。

2. –curriculum=<file> : 指定課程JSON文件,以定義用於課程培訓的課程。假如你的Unity有使用到課程學習(Curriculum Learning)才需要是否要選用,並且你要擁有你的課程學習JSON檔案,如下圖一。

有機會我會研究加入課程學習的功能,官方說會提升學習效率,如上圖二。以下是官方提供使用到此指令的command line。

mlagents-learn config/trainer_config.yaml --curriculum=config/curricula/wall-jump/ --run-id=wall-jump-curriculum --train

3. –sampler=<file> : 指定一個採樣器YAML文件,以定義用於泛化訓練的採樣器。就拿3D平衡小球來說,在基本的條件下,球體大小、質量、重力等參數,在一開始訓練前就是設定好的,訓練完之後也是不會有所改變,但是當你的以上參數要隨著每次訓練不同時(泛化訓練),就需要弄到此功能加此指令,下圖是示意圖(新版新增功能)。官方說明

4. –keep-checkpoints=<n> : 指定要保留的模型檢查點的最大數量。此參數與第9點共同運作。

5. –lesson=<n> : 指定執行課程培訓時要開始的課程。假如你有使用到Curriculum Learning功能,可以透過此指令來指定從哪一個課程開始訓練。

6. –num-runs=<n> : 設置要執行的並行培訓課程的數量。

7. –num-envs=<n> : 指定培訓時要從中收集經驗的並發Unity環境實例的數量。

8. –run-id=<path> : 指定每次訓練運行的標識符。此標識符用於命名保存訓練後的模型和摘要統計信息的子目錄以及保存的模型本身。在上一章節第四點有提到。

9. –save-freq=<n> : 指定在訓練期間保存模型的頻率(分步進行),在train_config檔案中也可以做設定,所以基本上指令不需要鍵入此。

10. –seed=<n> : 指定一個數字,用作訓練代碼使用的隨機數生成器的種子。

11. –env-args=<string> : 指定可執行環境的參數。

12. –base-port : 指定起始端口。每個並發的Unity環境實例將從基端口開始依次分配一個端口。

13. –train : 指定是訓練模型還是僅在推理模式下運行。

14. –load : 如果鍵入此指令,則訓練代碼將加載一個已經訓練的模型,以在訓練之前初始化神經網絡。

15. –no-graphics : 指定此選項以-batchmode模式運行Unity可執行文件,並且不初始化圖形驅動程序。

16. — debug : 指定此選項可為代碼的某些部分啟用調試級別的日誌記錄。

17. –multi-gpu : 設置此標誌可以在訓練期間使用多個GPU。

18. –cpu : 僅使用CPU強制訓練。

小結

透過此篇可以了解複雜的Unity ML世界中其中一個核心元素,Command Line有點像是將一個電器插上電一般,有了以上的指令輸入才可以驅動整個訓練,進而完成AI Unity ML Training的全貌,並產生model檔案。在下篇我來來述說train_config檔案。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *