0
雷鋒網(wǎng) AI 科技評論按:在之前的文章 Uber論文5連發(fā)宣告神經(jīng)演化新時代 中,我們介紹了 Uber AI Lab 在深度進(jìn)化算法方面的研究成果,從多個角度展現(xiàn)了進(jìn)化算法解決強(qiáng)化學(xué)習(xí)問題的能力,也展現(xiàn)了進(jìn)化策略 ES(evolution strategies)與梯度下降之間的聯(lián)系。這些研究成果非常精彩、給人啟迪。不過當(dāng)時我們沒有提到的是,這些成果消耗了相當(dāng)多的計(jì)算資源:實(shí)際上論文中的實(shí)驗(yàn)是在 720 到 3000 個 CPU 組成的大規(guī)模高性能計(jì)算集群上運(yùn)行的,這樣的集群固然有充沛的計(jì)算能力運(yùn)行進(jìn)化算法,但在 Uber AI Lab 的研究人員們看來,這種級別的計(jì)算能力要求也就把領(lǐng)域內(nèi)多數(shù)的研究人員、學(xué)生、企業(yè)以及愛好者攔在了門外。
近日 Uber AI Lab 開源了一組進(jìn)化算法代碼,它的特點(diǎn)是可以高速(同時也更廉價地)進(jìn)行進(jìn)化策略研究。根據(jù)介紹,訓(xùn)練神經(jīng)網(wǎng)絡(luò)玩 Atari 游戲的時間可以從原來在 720 個 CPU 組成的集群上花費(fèi) 1 個小時,到現(xiàn)在在一臺桌面級電腦上只需要 4 個小時。這一點(diǎn)很重要,因?yàn)樗鼧O大地刷新了我們對進(jìn)行這類研究所需的資源多少的認(rèn)識,從而使更多的研究人員能夠著手研究。雷鋒網(wǎng) AI 科技評論下面對其中的改進(jìn)做個詳細(xì)的介紹。
![]() | ![]() |
實(shí)際上,擁有多個虛擬內(nèi)核的現(xiàn)代高端桌面 PC 本身就像一個中型計(jì)算集群。如果能正確地并行執(zhí)行訓(xùn)練過程,在 720 個核心上如果需要運(yùn)行 1 個小時的訓(xùn)練過程,在帶有 48 核 CPU 的個人計(jì)算機(jī)上運(yùn)行就需要 16 個小時。這雖然也是較慢的,但不會令人望而卻步。不過,現(xiàn)代臺式機(jī)還有 GPU,它們運(yùn)行深度神經(jīng)網(wǎng)絡(luò)(DNN)的速度很快。Uber AI Lab 的代碼能夠最大化并行使用 CPU 和 GPU。它在 GPU 上運(yùn)行深度神經(jīng)網(wǎng)絡(luò),CPU 上運(yùn)行要訓(xùn)練的這個任務(wù)(例如電子游戲或物理仿真器),并可以在每個批當(dāng)中并行運(yùn)行多個訓(xùn)練過程,從而可有效地利用所有可用的硬件。如下所述,它還包含自定義的 TensorFlow 操作,這顯著提高了訓(xùn)練速度。
允許在 GPU 上進(jìn)行訓(xùn)練需要對神經(jīng)網(wǎng)絡(luò)的計(jì)算過程進(jìn)行一些修改。在 Uber AI Lab 的研究人員的設(shè)置中,單個神經(jīng)網(wǎng)絡(luò)在單個 CPU 上的速度比在 GPU 上更快,但是 GPU 在大批量類似的并行計(jì)算(例如,神經(jīng)網(wǎng)絡(luò)的前饋傳播)時有很大好處。為了盡量榨干 GPU 的計(jì)算能力,他們將多個神經(jīng)網(wǎng)絡(luò)的前饋傳播聚合成批次。這樣做在神經(jīng)網(wǎng)絡(luò)研究中是常見的,但通常是同一個網(wǎng)絡(luò)處理不同的輸入。然而,進(jìn)化算法中上有一批參數(shù)不同的神經(jīng)網(wǎng)絡(luò),但是即使網(wǎng)絡(luò)不同,也可以用同樣的做法進(jìn)行加速(雖然內(nèi)存的需求會相應(yīng)增加)。他們用基本的 TensorFlow 運(yùn)算實(shí)現(xiàn)了神經(jīng)網(wǎng)絡(luò)群的批量操作,并且它產(chǎn)生了大約 2 倍的加速,把訓(xùn)練時間減少到了大約 8 小時。
不僅如此,研究人員們還覺得他們可以做得更好。雖然 TensorFlow 提供了所有需要的運(yùn)算指令,但這些運(yùn)算并不那么適合于這種類型的計(jì)算。因此,他們添加了兩種自定義的 TensorFlow 運(yùn)算,加起來可以再把速度提升兩倍,相比在之前一臺機(jī)器上最初提到的 16 小時,將訓(xùn)練減少到大約 4 小時。
第一種定制的 TensorFlow 運(yùn)算顯著加快了 GPU 上的運(yùn)算速度。它是專為異構(gòu)神經(jīng)網(wǎng)絡(luò)計(jì)算定制的,在 RL 領(lǐng)域,每步運(yùn)算操作所需時間具有不同的長度,這在 Atari 游戲和許多模擬機(jī)器人學(xué)習(xí)任務(wù)中是確實(shí)存在的。它允許 GPU 只運(yùn)行需要運(yùn)行的那幾個網(wǎng)絡(luò),而不需要在每次迭代中都運(yùn)行整批固定的網(wǎng)絡(luò)集。
到目前為止所描述的改進(jìn)使得 GPU 比 CPU 更具成本效益。事實(shí)上,GPU 是如此之快,以至于運(yùn)行在 CPU 上的 Atari 模擬器無法跟上,即使已經(jīng)使用了多處理庫做并行化加速計(jì)算。為了提高仿真性能,研究人員們添加了第二組定制的 TensorFlow 運(yùn)算。這些將 Atari 模擬器的接口從 Python 改為定制的 TensorFlow 命令(reset,step,observation),利用了 TensorFlow 提供的多線程快速處理能力,因而沒有 Python 與 TensorFlow 交互時的典型速度下降問題。
總的來說,所有這些變化使得雅達(dá)利模擬器獲得了大約 3 倍加速。這些創(chuàng)新應(yīng)該可以加快任何有多個并行任務(wù)實(shí)例的強(qiáng)化學(xué)習(xí)研究(例如 Atari 游戲或 MujoCo 物理模擬器),這種多實(shí)例的做法在強(qiáng)化學(xué)習(xí)中也是越來越常見,例如分布式深度 Q 學(xué)習(xí)(DQN)和分布式策略梯度(例如 A3C)。
只要有能力在 GPU 上運(yùn)行多個網(wǎng)絡(luò)和及在 CPU 上運(yùn)行更快的任務(wù)模擬器,挑戰(zhàn)就只剩下了如何讓計(jì)算機(jī)上的所有資源盡可能地運(yùn)行。如果我們對每一個神經(jīng)網(wǎng)絡(luò)做了一個前饋傳播,詢問它在當(dāng)前狀態(tài)下應(yīng)該采取什么行動,那么當(dāng)每個神經(jīng)網(wǎng)絡(luò)都在計(jì)算答案時,運(yùn)行游戲模擬器的 CPU 就空閑下來了。同樣,如果我們采取了行動,并問任務(wù)模擬器「什么狀態(tài)會從這些行為中產(chǎn)生?」在模擬步驟中,運(yùn)行神經(jīng)網(wǎng)絡(luò)的 GPU 將空閑(注:下圖的左 1)。如果改為了(下圖的第 2 個)多線程 CPU + GPU 選項(xiàng),從圖中可以看到雖然改進(jìn)了單線程計(jì)算,但仍然是低效的。
一個更好的解決方案是將兩個或多個神經(jīng)網(wǎng)絡(luò)子集與模擬器配對,并且始終保持 GPU 和 CPU 同時運(yùn)行,這取決于準(zhǔn)備采取哪一個步驟(神經(jīng)網(wǎng)絡(luò)或模擬器)來更新來自不同集合的網(wǎng)絡(luò)或模擬器。這種方法是最右邊的「流水線 CPU + GPU」選項(xiàng),如下圖右 1 所示。通過它以及上文提到的其他改進(jìn),使得我們訓(xùn)練 4 百萬參數(shù)的神經(jīng)網(wǎng)絡(luò)所需時間降到在一臺計(jì)算機(jī)上只需 4 小時。
Uber AI Lab 的代碼使研究社區(qū)的每一個人,包括學(xué)生和自學(xué)成才的學(xué)生,能夠快速實(shí)驗(yàn)性地反復(fù)訓(xùn)練諸如玩 Atari 游戲的挑戰(zhàn)性深度神經(jīng)網(wǎng)絡(luò),而后者是迄今為止僅限于資金充足的工業(yè)和學(xué)術(shù)實(shí)驗(yàn)室的奢侈品。
更快的代碼會帶來研究進(jìn)展。例如,新代碼使 Uber AI Lab 能夠只花很少的成本就可以為遺傳算法展開一個廣泛的超參數(shù)搜索,與他們最初報(bào)告的性能相比,將改進(jìn)大多數(shù) Atari 游戲的性能。論文已經(jīng)發(fā)表在 arXiv。同樣地,更快的代碼也催化了研究的進(jìn)步,通過縮短迭代時間來改進(jìn)深度神經(jīng)進(jìn)化,使他們能夠嘗試更多的任務(wù)中的每一個新的想法,并且更長時間地運(yùn)行算法。
Uber AI Lab 的新軟件庫包括深度遺傳算法的實(shí)現(xiàn)、來自 Salimas 等人的進(jìn)化策略算法,以及(非常具有競爭力的!)隨機(jī)搜索控制。他們由衷地希望其他人也使用他們的代碼來加速自己的研究活動。他們也邀請整個研究社區(qū)參與構(gòu)建我們的代碼并改進(jìn)它,例如,分布式 GPU 訓(xùn)練和添加為這種類型的計(jì)算定制的其他 TensorFlow 運(yùn)算時,有可能獲得進(jìn)一步的運(yùn)算提速。
深度神經(jīng)進(jìn)化領(lǐng)域的研究現(xiàn)在非?;馃?。除了 Uber AI Lab 自己的研究和 OpenAI 的研究,最近也有來自 DeepMind、谷歌大腦和 Sentient 的深度學(xué)習(xí)進(jìn)展。Uber AI Lab 希望通過開源使他們的代碼有助于這個領(lǐng)域的發(fā)展。
以及最根本地,Uber AI Lab 的目標(biāo)是降低進(jìn)行這項(xiàng)研究的成本,使所有背景的研究者能夠嘗試自己的想法來改進(jìn)深層神經(jīng)進(jìn)化,并利用它來實(shí)現(xiàn)他們的目標(biāo)。
即便文中提到的 48 核 CPU 「桌面 PC」引起了一些爭議(7k 人民幣的 AMD 銳龍 Threadripper 1950X16 核 32 線程,15k 人民幣的 Intel i9 7980XE 18 核 36 線程),但也確實(shí)是十分有價值的研究成果。
論文地址:https://arxiv.org/abs/1712.06567
via: Accelerating Deep Neuroevolution: Train Atari in Hours on a Single Personal Computer ,雷鋒網(wǎng) AI 科技評論編譯整理。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。