天天看點

強化學習中仿真環境下大規模并行采樣的可行性分析——以仿真環境為例

強化學習中仿真環境下大規模并行采樣的可行性分析——以視訊遊戲為例

仿真環境下大規模并行采樣,顧名思義,就是同時并行化運作多個仿真環境并從其進行資料采樣、互動等操作,仿真環境的運作基本可以分為CPU上運作和GPU上運作兩種,在CPU上運作仿真運作的比較熟悉的有atari遊戲的atari_py子產品+gym庫,使用gym+retro_gym+steam同樣可以在cpu上運作,而在GPU上運作仿真環境的暫時我所接觸到的有 warp-drive 和 Isaac 兩個,其中warp-drive是國外某實驗室開發的,其功能比較簡單,暫時可以運作的仿真環境隻有tag遊戲(無畫面的遊戲),而isaac遊戲則是有大型硬體廠商nvidia公司開發的。

下面給出warp-drive 和 isaac這兩個仿真環境的相關資料:

​​https://gitee.com/devilmaycry812839668/warp-drive​​

​​NVIDIA公司推出的GPU運作環境下的機器人仿真環境(NVIDIA Isaac Gym)—— 到底實作了什麼功能,意義價值又是什麼???​​

===================================

仿真環境,或者說遊戲仿真大概的組成為邏輯處理部分和圖像渲染顯示兩部分。 像atari這種CPU上運作的遊戲,其邏輯處理部分和圖像渲染顯示部分都是在CPU上進行的。而我們平時生活中玩的dota之内的遊戲基本上都是在CPU上進行邏輯處理,在GPU上進行圖像渲染。可以說除了上面我給出的兩個完全在GPU上運作的遊戲仿真環境,其他的遊戲要麼就是邏輯處理和圖像渲染全部在CPU端進行,要麼就像dota這類遊戲在CPU端進行邏輯處理,在GPU上進行圖像渲染,而上面給出的兩個仿真環境:warp-drive 和 isaac 則是将邏輯處理部分也搬到了gpu端。

由于CPU的核心數較少,一般家用CPU的核心也就10個以内,而大型商用CPU的核心數一般也在100以内,如果一個遊戲仿真環境在運作的時候需要CPU進行處理那麼我們是難以進行大規模仿真環境并行的,而現在使用CPU運作大規模仿真環境的都是使用伺服器叢集的方式,如使用MPI等建構一個大型的CPU伺服器叢集。遊戲仿真環境運作的時候需要CPU進行處理這一部分包括CPU進行邏輯處理也包括CPU進行圖像渲染,這兩個部分有一個在CPU上運作都是難以進行大規模仿真環境并行的,而使用MPI建構大規模CPU伺服器叢集這一操作又需要大量資金做積累,而這又是普通使用者難以做到的,為了解決該問題也就有了将仿真環境邏輯處理部分和圖像渲染部分全部搬到GPU上運作的嘗試,比較成功的也就是上面介紹的這兩個仿真環境。

GPU具有幾千甚至幾萬的處理核心,也叫流核心,是以一塊GPU也可以同時進行幾千甚至幾萬的并行操作,這也是為什麼将仿真環境邏輯處理部分和圖像渲染部分全部搬到GPU上後可以輕松實作大規模仿真環境的并行化,但是使用GPU運作仿真環境也存在一定的問題,那就是GPU雖然有上萬的處理核心但是邏輯控制核心較少,也就是說GPU可以對數值計算類的任務進行較好的并行化但是對于一些需要複雜邏輯控制的操作卻性能較低,可以看到上面給出的兩個GPU上運作的仿真環境其邏輯控制部分都比較簡單,不需要複雜的邏輯控制,是以可以在GPU上完全運作這兩個仿真環境,但是想Atari這樣的遊戲往往需要較為複雜的邏輯控制,是以是很難将其完全搬到GPU上運作的。

複雜邏輯控制的仿真環境是難以在GPU上運作的,即使将其邏輯控制部分放在CPU上圖像渲染在gpu上也是難以進行大規模運作的,單機條件下gpu上大規模仿真環境并行化的前提就是仿真環境需要完全運作在GPU端。如果非要将一些複雜邏輯控制的仿真遊戲搬到GPU上我們就需要考慮能否将複雜邏輯控制重新程式設計為數值計算操作,進而實作GPU上完全運作仿真環境的可能。

上面的仿真環境中warp-drive的代碼規模較小,可以作為在GPU上編寫仿真環境的入門學習所用。在warp-drive的基礎上我們也可以自行編寫一些簡單的仿真遊戲:

如棋牌類遊戲(圍棋,象棋等),貪吃蛇,走迷宮,搬箱子,五子棋,掃雷,坦克大戰,2048,華容道等簡單遊戲。

其中最為重點的是GPU仿真環境​​NVIDIA Isaac Gym​​是可以支援較多的機器人控制環境的,之是以​​NVIDIA Isaac Gym​​可以支援多個遊戲的邏輯控制是因為NVIDIA公司本身就有最為成熟的GPU端實體邏輯控制核心軟體(可以在gpu上運作的實體引擎 physx  等),也正是由于NVIDIA公司在其自身實體引擎基礎上進行開發進而實作了isaac完全運作在gpu上。而如果沒有成熟的可以在GPU上運作邏輯控制的代碼,那麼從頭開發一個仿真環境的GPU端邏輯控制部分是有很大難度的。但是我們也需要知道NVIDIA公司的引擎元件隻能處理某一類問題的邏輯控制,如鋼體和流體的實體運動的邏輯控制處理,這也是為什麼isaac仿真環境主要運作的仿真任務是機器人控制,而Atari主要的遊戲我們難以對其給出統一的邏輯控制代碼,是以我們如果要把Atari遊戲搬到GPU上運作那麼我們需要手動的為每個遊戲編寫cuda版本的邏輯控制代碼。

現階段比較好用的GPU端仿真環境還是屬NVIDIA的ISAAC平台,而大規模仿真環境采樣也是主要應用于基于政策的強化學習算法,因為基于政策的強化學習算法其動作空間主要為連續動作,動作空間為離散的環境一般使用異政策的強化學習算法如DQN等,雖然大規模仿真環境采樣也能提高異政策算法的性能但是并不是那麼必要,而動作空間連續的同政策算法需要對目前政策下的資料分布進行采樣,是以大規模的仿真環境采樣更加适用。

繼續閱讀