深度學習引擎的終極形態是什麼?

微軟研究院AI頭條發表於2018-01-23

mmbizgif?wxfrom=5&wx_lazy=1


編者按:1月17日,院友袁進輝博士回到微軟亞洲研究院做了題為《打造最強深度學習引擎》的報告,分享了深度學習框架方面的技術進展。報告中主要講解了何為最強的計算引擎?專用硬體為什麼快?大規模專用硬體面臨著什麼問題?軟體構架又應該解決哪些問題?以下是報告的核心內容整理,希望能對你有所幫助。本文轉自公眾號“OneFlow”。


首先,我們一起來開一個腦洞:想象一個最理想的深度學習引擎應該是什麼樣子的,或者說深度學習引擎的終極形態是什麼?看看這會給深度學習框架和AI專用晶片研發帶來什麼啟發。


以大家耳熟能詳的卷積神經網路CNN 為例,可以感覺一下目前訓練深度學習模型需要多少計算力。下方這張表列出了常見CNN模型處理一張圖片需要的記憶體容量和浮點計算次數,譬如VGG-16網路處理一張圖片就需要16Gflops。值得注意的是,基於ImageNet資料集訓練CNN,資料集一共大約120萬張圖片,訓練演算法需要對這個資料集掃描100遍(epoch),這意味著10^18次浮點計算,即1exaFlops。簡單演算一下可發現,基於一個主頻為2.0GHz的CPU core來訓練這樣的模型需要好幾年的時間。


640?wx_fmt=png&wxfrom=5&wx_lazy=1


下圖列了幾種最常使用的計算裝置——CPU、 GPU、 TPU等。眾所周知,現在GPU是深度學習領域應用最廣的計算裝置,TPU 據說比GPU 更加強大,不過目前只有Google 可以用。我們可以討論下為什麼CPU < GPU < TPU,以及存不存在比TPU更加強大的硬體裝置。 主頻為2GHz的單核CPU 只能序列執行指令,1秒可以執行數千萬到數億次操作。隨著摩爾定律終結,人們通過在一個CPU上整合更多的核心來提高計算力,譬如一個CPU上整合20個計算核心(所謂多核,muti-core)可以把CPU計算能力提高几十倍。GPU 比多核更進一步,採用眾核(many-core),在一個晶片上整合數千計算核心(core),儘管每個核心的主頻要比CPU核心主頻低(通常不到1GHz),並行度還是提升了百倍,而且訪存頻寬要比CPU高10倍以上,因此做稠密計算的吞吐率可以達到CPU的10倍乃至100倍。GPU 被詬病的一點是功耗太高,為解決這個問題,TPU 這樣的專用AI晶片橫空出世,專用晶片可以在相同的面積裡整合更多深度學習需要的運算單元,甚至用專用電路實現某些特定運算使得完成同樣計算需要的時間更短 。有比TPU更快的專用晶片嗎? 肯定有,極端情況下,任給一個神經網路,都不計成本去專門實現一款晶片,一定比TPU這種用來支援最廣泛神經網路型別的晶片要效率高得多。


0?wx_fmt=jpeg


專用硬體比通用硬體(如CPU、GPU)快,有多種原因,主要包括:(1)通用晶片一般經歷“取指-譯碼-執行”(甚至包括“取資料”)的步驟才能完成一次運算,專用硬體大大減小了“取指-譯碼”等開銷,資料到達即執行;(2)專用硬體控制電路複雜度低,可以在相同的面積下整合更多對運算有用的器件,可以在一個時鐘週期內完成通用硬體需要數千上萬個時鐘週期才能完成的操作;(3)專用硬體和通用硬體內都支援流水線並行,硬體利用率高;(4)專用硬體片內頻寬高,大部分資料在片內傳輸。顯然,如果不考慮物理現實,不管什麼神經網路,不管問題的規模有多大,都實現一套專用硬體是效率最高的做法。問題是,這行得通嗎?

0?wx_fmt=jpeg


如果對任何一個神經網路都實現一套專用硬體,執行效率最高,可是開發效率不高,需求一變更(神經網路拓撲結構,層數,神經元個數),就需要重新設計電路,而硬體研發週期臭名昭著的長。這讓人聯想起馮諾依曼發明“儲存程式”計算機之前的電子計算機(下圖即第一臺電子計算機ENIAC 的照片),計算機的功能通過硬連線(hard-wired)電路實現,要改變計算機的功能就需要重新組織器件間的連線,這種“程式設計”方式又慢又難以除錯。

0?wx_fmt=jpeg


剛才設想的無限大的專用硬體顯然面臨幾個現實問題:(1)晶片不可能無限大,必須考慮硬體製造工藝的限制(散熱,時鐘訊號傳播範圍等);(2)硬連線的電路靈活性太差,改變功能需要重新連線;(3)改變連線後,流水線排程機制可能要做相應調整,才能最大化硬體利用率。因此,我們設想的“不計成本的”,“無限大的”專用硬體面臨了嚴峻挑戰,如何克服呢?


現實中,不管是通用硬體(如GPU)還是專用硬體(如TPU) 都可以通過高速互聯技術連線在一起,通過軟體協調多個裝置來完成大規模計算。使用最先進的互聯技術,裝置和裝置之間傳輸頻寬可以達到100Gbps或者更多,這比裝置內部頻寬低上一兩個數量級,不過幸好,如果軟體“調配得當”,在這個頻寬條件下也可能使得硬體計算飽和。當然,“調配得當”技術挑戰極大,事實上,單個裝置速度越快,越難把多個裝置“調配得當”。

0?wx_fmt=jpeg


當前深度學習普遍採用隨機梯度下降演算法(SGD),一般一個GPU處理一小塊兒資料只需要100毫秒的時間,那麼問題的關鍵就成了,“調配”演算法能否在100毫秒的時間內為GPU處理下一塊資料做好準備,如果可以的話,那麼GPU就會一直保持在運算狀態,如果不可以,那麼GPU就要間歇性的停頓,意味著裝置利用率降低。理論上是可以的,有個叫運算強度(Arithmetic intensity)的概念,即flops per byte,表示一個位元組的資料上發生的運算量,只要這個運算量足夠大,意味著傳輸一個位元組可以消耗足夠多的計算量,那麼即使裝置間傳輸頻寬低於裝置內部頻寬,也有可能使得裝置處於滿負荷狀態。進一步,如果採用比GPU更快的裝置,那麼處理一塊兒資料的時間就比100毫秒更低,譬如10毫秒,在給定的頻寬條件下,“調配”演算法能用10毫秒的時間為下一次計算做好準備嗎?事實上,即使是使用不那麼快(相對於TPU 等專用晶片)的GPU,當前主流的深度學習框架在某些場景(譬如模型並行)已經力不從心了。

0?wx_fmt=png


一個通用的深度學習軟體框架要能對任何給定的神經網路和可用資源都能最高效的“調配”硬體,這需要解決三個核心問題:(1)資源分配,包括計算核心,記憶體,傳輸頻寬三種資源的分配,需要綜合考慮區域性性和負載均衡的問題;(2)生成正確的資料路由(相當於前文想象的專用硬體之間的連線問題);(3)高效的執行機制,完美協調資料搬運和計算,硬體利用率最高。


事實上,這三個問題都很挑戰,本文暫不討論其解法,假設我們能夠解決這些問題的話,會有什麼好處呢?


假設我們能解決前述的三個軟體上的難題,那就能“魚與熊掌兼得”:軟體發揮靈活性,硬體發揮高效率,任給一個深度學習任務,使用者不需要重新連線,就能享受那種“無限大專用硬體”的效能,何其美好。更令人激動的是,當這種軟體得以實現時,專用硬體可以比現在所有AI晶片都更簡單更高效。讀者可以先想象一下怎麼實現這種美好的前景。


0?wx_fmt=jpeg


讓我們重申一下幾個觀點:(1)軟體真的非常關鍵;(2)我們對巨集觀層次(裝置和裝置之間)的優化更感興趣;(3)深度學習框架存在一個理想的實現,正如柏拉圖心中那個最圓的圓,當然現有的深度學習框架還相距甚遠;(4)各行各業的公司,只要有資料驅動的業務,最終都需要一個自己的“大腦”,這種“大腦”不應該只被少數巨頭公司獨享。

0?wx_fmt=jpeg


你還有什麼天馬行空的想法嗎?


歡迎在評論區留言哦!


作者介紹


0?wx_fmt=jpeg

袁進輝(老師木),2008年7月自清華大學計算機係獲得工學博士學位,獲得清華大學優秀博士學位論文獎,在計算機視覺以及多媒體領域頂級會議上發表多篇論文,連續多年獲得美國國家技術標準局組織的視訊檢索評測比賽的第一名。2010年負責研發斯諾克”鷹眼“系統,該產品打敗來自英國的競品開始服務於各項國際大賽。2013年加入微軟亞洲研究院從事大規模機器學習平臺的研發工作,後發明了當時世界上最快的主題模型訓練演算法和系統LightDA,該技術成功應用於微軟線上廣告系統。2017年創立北京一流科技有限公司,致力於打造業界最好的深度學習平臺。


你也許還想


  核心融合:GPU深度學習的“加速神器”

  二十一世紀計算 | 深度學習革命: 進展、前景和困境

  對話Yoshua Bengio | 深度學習的昨天、今天和明天


640.png?

感謝你關注“微軟研究院AI頭條”,我們期待你的留言和投稿,共建交流平臺。來稿請寄:msraai@microsoft.com。


640.jpeg?


相關文章