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