前往
大廳
主題

Unity 教學 (02) - ML-Agents 安裝與測試

Jerry | 2023-05-02 06:35:12 | 巴幣 3004 | 人氣 1685

這篇文章會教各位如何從無到有,準備好在Unity使用ML-Agents。
ML-Agents (Machine Learning Agents) 是一個由 Unity 開發的開源套件,旨在幫助開發者在 Unity 引擎中訓練和測試強化學習模型。它提供一個訓練環境和一個 API,讓你可以在 Unity 中訓練AI代理,從而實現自主學習和決策。
如果好奇的話,可以先看文章最後面的影片,那是我之前用來測試ML-Agents訓練的小遊戲,也是下一篇要做的內容。

開始前我想先提醒,除非你知道自己在做什麼,或是你看到這篇文章的時候已經過了發布時間很久,不然我會建議你盡量按照文章的教學走(步驟、各種軟體和套件的版本),否則容易出問題。
另外,請確認你要安裝的硬碟有至少5GB左右的空間。


首先安裝Unity,這邊我安裝的是2021年LTS版,如果你安裝的是不同版本,待會在程式內安裝ML-Agents的介面會有些許不同。
這邊請注意,根據官方文件,安裝的Unity版本要是2018.4或以上。
Unity下載頁面: (需登入並取得個人免費License才能使用)

再來安裝Python,這邊如果已經有安裝了,也建議看一下這段,確保你的版本符合要求。
這邊有趣的是,Unity官方要求Python版本至少要3.6以上,並建議使用3.6或3.7。另外,待會我們要安裝的PyTorch,只支援Python 3.7-3.9,也就是說,各位乖乖安裝Python 3.7吧。
Python 3.7.9下載頁面:
這邊有個小建議,在一開始的介面中,要勾選Add Python 3.7 to PATH這個選項。詳細理由後面有記得的話再講。
直接點Install Now,等待成功安裝畫面即可。

接著建立新的Unity專案,這邊強烈建議路徑上只有英文和數字,不要有中文或是其他的符號,詳情後面會提到,這邊建立一個3D專案用來測試。
記得選取剛才安裝的Unity版本。

程式打開後,安裝ML-Agents套件,從Window點選Package Manager。
在Package Manager中,將左上角的Packages改為Unity Registry。
搜尋com.unity.ml-agents
點選右下角的Install,等待安裝完成。

接著在剛才的專案底下建立Python虛擬環境。
在檔案總管打開剛才建立的Unity專案位置。假如你忘了,可以在Unity Hub找到。在路徑中輸入cmd,這會直接將cmd導向現在的位置,或是不嫌麻煩的會,可以在開啟cmd後,輸入cd “專案位置”,這邊就不多示範了。
按下Enter後,可以看到cmd視窗,並且路徑已經是專案的位置。
輸入py,可以看到現在使用的Python版本。
假如你的電腦上安裝了其他版本的Python,而且這時候顯示的版本不是你要的,先輸入exit()退出,並輸入where python,這時會出現所有的Python安裝路徑,複製你要的那個,然後直接貼上並Enter,就可以看到現在執行的是你選的Python版本了。
參考下圖:
exit()退出當前環境,輸入指令建立Python虛擬環境,py -m venv venv,假如你是用上面說的第二種方法才找到正確的Python版本,你需要先exit()退出,並將整個路徑連同指令輸入,如下圖。
等待指令執行完畢,回到等待輸入指令的狀態,這時可以看到Unity的專案路徑下多了一個venv資料夾,裡面就是剛才建立的Python虛擬環境。
這時在cmd輸入venv\Scripts\activate,注意是反斜線。
成功的話,視窗就會跳到執行虛擬環境的狀態了。
這邊先更新pip,py -m pip install --upgrade pip。
假如你在執行的時候跳出一串錯誤,錯誤最後有提示關於字元編碼的問題,並且pip沒有被成功更新,那很有可能是你的檔案路徑上有中文或其他特殊文字,或是系統語言的問題。解法有兩種,假如是路徑問題,可以直接再開一個專案,並且這次要注意專案位置,或是要修改虛擬環境中的檔案,讓他以utf-8編碼開啟虛擬環境的設定檔。
檔案位在虛擬環境中的這個位置 \venv\Lib\site-packages\pip\_internal\utils\virtualenv.py,開啟後,修改第54行附近,open()加入 ,encoding="utf-8",完成後務必存檔且關閉檔案。接著再執行一次應該就沒問題了,參考下圖。

接著安裝PyTorch,
以下畫面出現後,靜待安裝完成。

安裝ML-Agents,pip3 install mlagents==0.29.0,等待安裝完成。

接著測試環境是否都成功安裝,輸入 mlagents-learn --help,有可能會出現ModuleNotFoundError,這時只要再自行安裝對應的程式庫即可。
假如可以看到和下圖一樣一長串的內容,基本上就沒問題了。

假如順利操作到這邊,那麼恭喜,你已經可以開始使用ML-Agents了。

這邊先透過簡單的程式碼來測試我們安裝的ML-Agents。
首先,建立一個C#檔案。
開啟檔案,加入Unity.MLAgents;
假如你到這邊發現打了Unity之後沒有自動出現提示,將Visual Studio關閉,到Unity專案的Edit > Preferences,選擇你的External Script Editor,重新開啟檔案,輸入文字時應該就可以看到提示了,這邊沒有提示的話會寫得比較辛苦,而且沒辦法及時除錯。
將class改為繼承Agent,也就是ML-Agents,刪掉class裡面的預設程式碼。
加入以下程式碼。可以想成這段程式碼會去接收ML-Agents的指令,再透過除錯視窗輸出。這邊只是先進行測試,這段程式碼本身並無意義。
回到Unity專案,在場景中加入空物件。
將剛才的程式碼加入這個物件底下。
將其中的Branch 0 Size改為5。
這邊要是有發現,可以注意到Discrete就是程式碼中的actions.DiscreteActions,這邊修改的作用在於讓這個回傳值的第0個位置有5個選擇。詳細內容會在之後的文章中討論,這邊可以先看過就好。
在Component > ML Agents中加入Decision Requester。
Decision Requester會像Agent發出傳送命令的請求,若是缺少這個物件,等於Agent和遊戲之間沒有溝通,也無法進行訓練。
準備完成後,空物件的元件會像這樣

接著在虛擬環境中輸入mlagents-learn --force,順利的話會出現以下畫面,代表ML-Agents已經準備好執行訓練了。
這時若是出現錯誤,可嘗試執行pip install importlib-metadata==4.8,然後再一次執行上述指令。
接著來到Unity專案,按下Play,可以看到ML-Agents開始執行。
在Unity的除錯視窗中,可以看到0到4的數字隨機出現,這就是Agent的輸出,也就是在實際應用中,Agent對遊戲的操作,這部分我在之後的文章再細講。這邊出現的警告可以先忽略。
要停止ML-Agents基本上有兩種方式,一個是再按一次Play,停止偵錯並等待ML-Agents timed-out,或是停止偵錯後,在虛擬環境按下Ctrl+C,兩種方法都可以。

我們可以試著將Continuous Actions改為1,並修改程式碼。
再次依照先前的步驟執行ML-Agents (mlagents-learn --force)。
可以看到輸出由整數改為0到1的浮點數了。

Discrete的英文是離散,在這裡代表的就是像0123這種不連續的數值,而Continuous剛好相反,可以是由0到1之間的任一小數。ML-Agents就是透過這些數值來操作遊戲,例如0和1可以代表Agent決定角色是否跳躍,0-1則可以決定角色行走的速度及方向。
Agent在執行的過程可以視為一個迴圈,在這個迴圈中會不斷重複 觀察 > 決定 > 動作 > 接收回報,藉由這些動作,不斷嘗試獲得最大的回報。我們剛才的程式就是看Agent如何做出動作,其他部分會在之後的文章提到,這邊先讓各位有點概念。

這篇教學到這邊告一段落,接下來會比較詳細講解ML-Agents,並實際帶各位訓練你們的第一個ML-Agent,讓Agent學會玩一個小遊戲。應該會做一個跟下面影片類似或一樣的東西出來。
如果你對Unity相當不熟悉,可以參考這篇,Unity 入門教學 - (01) 製作一個小遊戲,裡面有講到如何製作出一個和影片中差不多的遊戲。
謝謝各位看到這裡,有任何問題或建議都歡迎在下方留言或私訊。


話說回來,從原本預計去年12月要發完整的ML-Agents教學,到現在只發了安裝說明,這拖得實在有點久啊…
因為現在還是沒有什麼空閒,下一篇可能又要等上一段時間,如果有人希望能快點看到之後的內容,也歡迎留個訊息或是給GP支持,說不定我會想辦法擠出時間來生出一點內容w
這篇到這邊真的結束了,謝謝各位。

創作回應

起老
不好意思請問安裝CUDA後是要怎麼用
2023-11-21 17:55:17
Jerry
CUDA安裝後會直接生效,不需要再做其他動作,不過你的狀況現在看起來不太像這個問題
2023-11-21 20:40:14
起老
對了請問作業系統版本會有差別嗎?
2023-11-21 19:57:38
Jerry
可能有影響,方便請問你的系統版本嗎?
2023-11-21 20:40:46
Jerry
我剛才也執行了一次文章的操作,我的電腦上是可以正常安裝pytorch的https://truth.bahamut.com.tw/s01/202311/ec1b43f325e73ee21de3dd3feef9b0fd.JPG
2023-11-21 20:42:30
起老
我的作業系統是Win11專業版
2023-11-21 21:04:32
起老
我剛剛去看好像只有win10的嗎?
2023-11-21 21:05:18
Jerry
我是用win10,不過應該不至於因為是win11就不行。
可以參考這兩篇的內容,看起來比較有機會成功:
https://stackoverflow.com/questions/77068908/how-to-install-pytorch-with-cuda-support-on-windows-11-cuda-12-no-matching
https://stackoverflow.com/questions/9727688/how-to-get-the-cuda-version
2023-11-21 21:24:33
Jerry
可以用 nvidia-smi指令找到最高支援的CUDA版本,再用上面那個連結的方式安裝看看
2023-11-21 21:27:20
起老
我稍早是有用3.10的python去安裝CUDA然後去用CUDA安裝2.0.0的pytorch可是執行mlagent後說版本太新需要往下降版本
2023-11-21 22:13:09
Jerry
這樣的話可以試試看安裝官方現在最新手冊的版本,
pip3 install torch~=1.13.1 -f https://download.pytorch.org/whl/torch_stable.html
2.0.0應該太新了,ml agents不支援
2023-11-21 22:31:28
Jerry
這邊官方現在最新的安裝說明給你參考
https://github.com/Unity-Technologies/ml-agents/blob/develop/docs/Installation.md
如果你照現在的官方手冊安裝,一些軟體版本也要注意,會比這篇文章用的還要新
剛才看了一下,ml agents 2.0和3.0在基礎操作上應該是一樣的
2023-11-21 22:40:46

更多創作