部署Model trainning的container服務在AWS Cloud上,目前還沒有完成。先用以下內容說明,與成大學生頌宇討論的內容。
Unity和Python程式(AI+ML+IoT Bridge)之間,決定先透過gRPC/ProtoBuf(全名Protocol Buffers,format可以參考google)來溝通,是以序列化(二進制)方式儲存replay的transform資料,這與ROS type個格式接近,比如PointStamped資料在ProtoBuf中可以這樣定義:
message PointStamped {
message Header {
uint32 seq;
time stamp;
string frame_id;
}
message Point {
float64 x = 1;
float64 y = 1;
float64 z = 1;
}
}
另外ProtoBuf可以儲存圖片轉成二進制的資料,所以圖片資料就可以先壓縮再傳送;然後再獨立一個connector(也就是之前架構圖中的Unity env creator)負責啟動與接收來自Python程式的資料。
ML部份採用RL(reinforcement learning) library來跑AI,使用PettingZoo這個open source API,支援 Multi-Agents、與OpenAI Gym也相似。
並以State-based的方式記錄frames(fixedUpdate,非更新每一個frame,而是間隔時間相同的更新),並最終將replay的transform資訊upload至DynamoDB。
之前說明仍然會需要使用GPU去render我們跑機器學習的結果,會使用VirtualGL來完成GPU的headless渲染(需先棄用mlagents)。
因為跑3D用到大量GPU機器,資源有限,到時候也需要message queue(這此可能選用Apache Kafka)來安排要render的比賽,動態產生Unity與Python程式的containers。
後續有時間再補充程式碼與scripts的部份。