4小時學會雅達利遊戲,AI需要幾臺電腦?
原作 Felipe Petroski Such, Kenneth O. Stanley and Jeff Clune
Root 編譯自 Uber Engineering blog
量子位 出品 | 公眾號 QbitAI
一臺足矣。
昨天,優步AI Lab開源了深度神經進化的加速程式碼。其部落格上稱,哪怕使用者只有一臺電腦(桌上型電腦),用這個程式碼也能訓練出會打雅達利的AI。而且只需要4!小!時!
要知道,此前用深度神經進化方法,讓AI一小時學會玩雅達利,需要720個CPU。
720個CPU啊……誰來算算要多少錢……
別費勁算了。反正就是貴到爆炸。想訓練出自己的AI?不是壕根本不要想。
優步還是決心伸出援手,拉貧苦大眾一把。他們研發出這個深度神經進化加速程式碼,是希望降低AI研究的資金門檻。至少讓那些窮得只能買得起遊戲配置的學生們,想自己動手玩玩AI時還有機會。
用神經進化技術,解決深度強化學習問題是非常promising的。玩雅達利(↖)和MuJoCo機器人運動模擬(↗)都可以用神經進化技術。
只用一臺電腦,4小時?怎麼做到的?
弱弱地先補充個小前提:這臺式電腦的配置得高階一點。
△ 也不用這麼“高階”
事實上,高階的臺式電腦是有幾十個虛擬核的,這相當於中型計算叢集了。
如果能恰當的平行執行評估環節的話,那原本需要720核CPU跑1小時的任務現在48核的個人電腦只要16小時。
但別忘了高階的電腦還有GPU可以用,畢竟GPU跑深度神經網路更快。
整體思路:CPU和GPU同時用起來
優步這次開源的程式碼可以同時最大化“榨”幹CPU和GPU。讓GPU跑深度神經網路,讓CPU跑電子遊戲或物理模擬器,然後平行批量執行多個評估程式。另外,它也包含調整過的TensorFlow運算,這對於訓練速度的提高相當重要。
先改進GPU
在優步的setup裡,執行單個神經網路,用CPU比GPU要快。
但GPU更擅長平行執行多個神經網路。
所以,為了充分發揮GPU的優勢,優步把多個神經網路整合到了一起,放在同一批裡執行。這種做法,在神經網路研究裡還是挺常見的,通常用於同樣的神經網路處理不同的輸入的情況。
不過,神經網路的進化是不一樣的。它需要用到不同類的神經網路。這對記憶的容量要求就變高了。
一開始,優步AI研究團隊用基礎的TensorFlow運算跑了一次,只用8小時就搞定。但他們覺得還有空間優化。
於是,他們進一步調整TensorFlow,增加了兩類自定義的運算,於是速度又提升了一倍,訓練用時再降到4小時。
其中,第一個自定義TensorFlow運算顯著加速了GPU。它專門針對強化學習中的異構神經網路強化學習運算,比如雅達利遊戲和大多數機器人運動模擬任務,在這些任務中,各個神經網路的訓練週期長度都不同。有了這個自定義運算,GPU可以只呼叫必需的神經網路進行運算,而不必每一次任務都跑完所有的網路,這樣能夠大大節省計算量。
再針對CPU
上述提到的所有改進,側重點都在GPU上。不過,GPU快到一定程度,也會受制於CPU的速度。為了提高CPU執行遊戲模擬器的表現,就需要第二個自定義的TensorFlow運算。
具體來說,就是把雅達利模擬器的wrapper從Python改成自定義TensorFlow指令(reset,step,observation)。
這樣不僅能利用TensorFlow多執行緒的快速處理能力,還避免了因為Python和TensorFlow相互作用而造成的減速。
總體上,這些調整極大地提升了雅達利模擬器的執行速度。確切來說,大概是原來的3倍。
對於任何一個域(比如雅達利模擬器、物理模擬器等)裡包含多個例項的強化學習研究,上面提到的這些創新方法都能幫它們加速。這類研究越來越常見,比如深度Q學習DQN,或策略梯度A3C的強化學習都是這樣。
分開優化後,整體再協調
單拎GPU或CPU來看,速度上已經提升到極致了。但下一個要面臨的挑戰是如何讓所有的計算資源都同時開動起來。
比方說,我們在每個神經網路上都加個前饋傳遞,問它當下狀態應該採取什麼行動,那麼當每個神經網路計算答案的時候,執行遊戲模擬器的CPU只能空轉。
同樣,如果我們問域模擬器——現在這些行為會產生什麼狀態,那麼CPU在模擬出結果的時候,GPU就沒事幹了。
下圖就是CPU+GPU多執行緒的示意圖。
從這張圖可以瞭解到,如何逐步優化強化學習裡處理不同型別神經網路的執行效果。
藍框指的是域模擬器,在這篇文章裡是雅達利遊戲模擬器,或者是MuJoCo物理模擬器。這兩個模擬器都有不同時間長度的場景。
最左側,是最原始的處理方法,效果最差。既沒有充分利用到平行計算的能力,也沒浪費了GPU或CPU等待對方處理資料的時間。
中間是多執行緒方法稍微好一點,一個CPU可以同時處理多個模擬任務,等到GPU執行時,也可以接上CPU處理好的多組資料。不過還是存在互相等造成的時間浪費。
優步的方法是CPU+GPU流水線法。其中,CPU不帶停的。在GPU處理CPU資料的時候,CPU並沒有閒下來,繼續馬不停蹄地處理更多的資料。
4百萬引數的神經網路,用優步個方法,4個小時就能搞定。
流水線法的意義
又快又便宜。
這直接降低了研究門檻,使得更多自學AI的人,尤其是學生群體,也可以訓練出自己想要的深度神經網路了。
效率大大提升的程式碼將會促進研究更高速的發展。
優步自己就受益匪淺。
他們針對遺傳演算法釋出的大型超引數搜尋,所花預算是隻是原來的一部分。而且在大部分的雅達利遊戲裡的表現都獲得了提升。具體數字請看優步更新的論文。(https://arxiv.org/abs/1712.06567)
另外,這程式碼還能縮短神經進化迭代的週期,AI研究人員可以更快地嘗試新的想法,也願意去試原先很大耗時很久的網路了。
優步AI lab研發的軟體庫包含深度遺傳演算法的實施,源自Saliman等工作的進化策略演算法,還有優步自家據說超級好用隨機搜尋控制。
深度神經進化領域裡,近期還有很多里程碑意義的工作。感興趣的可以進一步瞭解以下機構的工作:
OpenAI:https://blog.openai.com/evolution-strategies/
DeepMind:https://deepmind.com/blog/population-based-training-neural-networks/
Google Brain:https://research.googleblog.com/2018/03/using-evolutionary-automl-to-discover.html
Sentient:https://www.sentient.ai/blog/evolution-is-the-new-deep-learning/
最後,附神經網路加速程式碼:
https://github.com/uber-common/deep-neuroevolution/tree/master/gpu_implementation
相關文章
- 雅達利遊戲的最後時光遊戲
- 遊戲+健身:從"雅達利平衡板"到"世嘉健身環"遊戲
- 曾經讓美國遊戲業崩潰的雅達利,現在要出新遊戲遊戲
- 跟著 AI 一個小時學會 PythonAIPython
- 倫敦大學學院:睡眠會在最初的幾個小時內重置大腦連線
- 自己動手2小時學會配置遊戲輔助遊戲
- 《大聖歸來》IP遊戲化:一場中國式的雅達利大崩潰遊戲
- 遊戲史記(三):街機黃金年代的拓荒者,無冕之王雅達利遊戲
- 一臺電腦遠端控制多臺電腦的軟體有哪些
- 醫學影像AI為什麼需要小資料學習?AI
- AI時代,6小時做一款遊戲!AI遊戲
- [轉] 一個小時學會GitGit
- 掌握一個事物時所需要學會的
- 一臺電腦同時執行多個tomcat配置方法Tomcat
- 1小時學會Git玩轉GitHubGithub
- 1 小時學會 MySQL 資料庫MySql資料庫
- 一小時學會 C# 6.0C#
- 在兩臺電腦安裝Simphony
- DIY裝機必看的電腦硬體知識詳解 組裝一臺電腦需要哪些配件
- 一臺印表機怎麼連線兩臺電腦 印表機如何串聯多臺電腦
- PHP程式設計師7小時學會Kotlin第二小時PHP程式設計師Kotlin
- 最全的less筆記,半小時學會!筆記
- 例項教程:1小時學會PythonPython
- 三消遊戲收益提升,必須學會這幾招遊戲
- 我人生的三臺電腦之做影視後期視訊設計工作需要怎樣的電腦?
- 微軟AI大師會參會小記微軟AI
- 學習Linux運維需要多長時間?學會要多久?Linux運維
- 遊戲私服捆綁傳播挖礦木馬,已感染超5000臺電腦遊戲
- 學會以下幾個軟體你就會3D遊戲模型了3D遊戲模型
- 那些還在為 Virtual Boy 和雅達利開發新作的愛好者們
- 【Android進階】1小時學會熱更新--TinkerAndroid
- 一小時學會 C# 6 的新特性C#
- 多臺電腦如何共享一臺印表機?域網內多臺電腦共享一臺印表機設定方法教程
- NHK:日本首次遊戲成癮社調 4成玩家每天遊戲不到1小時遊戲
- 開發數學系統時,需要掌握的幾個基於Web的數學框架Web框架
- 同一臺電腦配置兩個git賬號Git
- Hexo部落格多臺電腦裝置同步管理Hexo
- 路由器怎麼連線兩臺電腦?路由器