深度學習引擎的終極形態是什麼?
首先,我們一起來開一個腦洞:想像一個最理想的深度學習引擎應該是什麼樣子的,或者說深度學習引擎的終極形態是什麼?看看這會給深度學習框架和AI專用晶元研髮帶來什麼啟發。
以大家耳熟能詳的卷積神經網路CNN 為例,可以感覺一下目前訓練深度學習模型需要多少計算力。下方這張表列出了常見CNN模型處理一張圖片需要的內存容量和浮點計算次數,譬如VGG-16網路處理一張圖片就需要16Gflops。值得注意的是,基於ImageNet數據集訓練CNN,數據集一共大約120萬張圖片,訓練演算法需要對這個數據集掃描100遍(epoch),這意味著10^18次浮點計算,即1exaFlops。簡單演算一下可發現,基於一個主頻為2.0GHz的CPU core來訓練這樣的模型需要好幾年的時間。
下圖列了幾種最常使用的計算設備——CPU、 GPU、 TPU等。眾所周知,現在GPU是深度學習領域應用最廣的計算設備,TPU 據說比GPU 更加強大,不過目前只有Google 可以用。我們可以討論下為什麼CPU
專用硬體比通用硬體(如CPU、GPU)快,有多種原因,主要包括:(1)通用晶元一般經歷「取指-解碼-執行」(甚至包括「取數據」)的步驟才能完成一次運算,專用硬體大大減小了「取指-解碼」等開銷,數據到達即執行;(2)專用硬體控制電路複雜度低,可以在相同的面積下集成更多對運算有用的器件,可以在一個時鐘周期內完成通用硬體需要數千上萬個時鐘周期才能完成的操作;(3)專用硬體和通用硬體內都支持流水線並行,硬體利用率高;(4)專用硬體片內帶寬高,大部分數據在片內傳輸。顯然,如果不考慮物理現實,不管什麼神經網路,不管問題的規模有多大,都實現一套專用硬體是效率最高的做法。問題是,這行得通嗎?
如果對任何一個神經網路都實現一套專用硬體,運行效率最高,可是開發效率不高,需求一變更(神經網路拓撲結構,層數,神經元個數),就需要重新設計電路,而硬體研發周期臭名昭著的長。這讓人聯想起馮諾依曼發明「存儲程序」計算機之前的電子計算機(下圖即第一台電子計算機ENIAC 的照片),計算機的功能通過硬連線(hard-wired)電路實現,要改變計算機的功能就需要重新組織器件間的連線,這種「編程」方式又慢又難以調試。
剛才設想的無限大的專用硬體顯然面臨幾個現實問題:(1)晶元不可能無限大,必須考慮硬體製造工藝的限制(散熱,時鐘信號傳播範圍等);(2)硬連線的電路靈活性太差,改變功能需要重新連線;(3)改變連線後,流水線調度機制可能要做相應調整,才能最大化硬體利用率。因此,我們設想的「不計成本的」,「無限大的」專用硬體面臨了嚴峻挑戰,如何克服呢?
現實中,不管是通用硬體(如GPU)還是專用硬體(如TPU) 都可以通過高速互聯技術連接在一起,通過軟體協調多個設備來完成大規模計算。使用最先進的互聯技術,設備和設備之間傳輸帶寬可以達到100Gbps或者更多,這比設備內部帶寬低上一兩個數量級,不過幸好,如果軟體「調配得當」,在這個帶寬條件下也可能使得硬體計算飽和。當然,「調配得當」技術挑戰極大,事實上,單個設備速度越快,越難把多個設備「調配得當」。
當前深度學習普遍採用隨機梯度下降演算法(SGD),一般一個GPU處理一小塊兒數據只需要100毫秒的時間,那麼問題的關鍵就成了,「調配」演算法能否在100毫秒的時間內為GPU處理下一塊數據做好準備,如果可以的話,那麼GPU就會一直保持在運算狀態,如果不可以,那麼GPU就要間歇性的停頓,意味著設備利用率降低。理論上是可以的,有個叫運算強度(Arithmetic intensity)的概念,即flops per byte,表示一個位元組的數據上發生的運算量,只要這個運算量足夠大,意味著傳輸一個位元組可以消耗足夠多的計算量,那麼即使設備間傳輸帶寬低於設備內部帶寬,也有可能使得設備處於滿負荷狀態。進一步,如果採用比GPU更快的設備,那麼處理一塊兒數據的時間就比100毫秒更低,譬如10毫秒,在給定的帶寬條件下,「調配」演算法能用10毫秒的時間為下一次計算做好準備嗎?事實上,即使是使用不那麼快(相對於TPU 等專用晶元)的GPU,當前主流的深度學習框架在某些場景(譬如模型並行)已經力不從心了。
一個通用的深度學習軟體框架要能對任何給定的神經網路和可用資源都能最高效的「調配」硬體,這需要解決三個核心問題:(1)資源分配,包括計算核心,內存,傳輸帶寬三種資源的分配,需要綜合考慮局部性和負載均衡的問題;(2)生成正確的數據路由(相當於前文想像的專用硬體之間的連線問題);(3)高效的運行機制,完美協調數據搬運和計算,硬體利用率最高。
事實上,這三個問題都很挑戰,本文暫不討論其解法,假設我們能夠解決這些問題的話,會有什麼好處呢?
假設我們能解決前述的三個軟體上的難題,那就能「魚與熊掌兼得」:軟體發揮靈活性,硬體發揮高效率,任給一個深度學習任務,用戶不需要重新連線,就能享受那種「無限大專用硬體」的性能,何其美好。更令人激動的是,當這種軟體得以實現時,專用硬體可以比現在所有AI晶元都更簡單更高效。讀者可以先想像一下怎麼實現這種美好的前景。
讓我們重申一下幾個觀點:(1)軟體真的非常關鍵;(2)我們對宏觀層次(設備和設備之間)的優化更感興趣;(3)深度學習框架存在一個理想的實現,正如柏拉圖心中那個最圓的圓,當然現有的深度學習框架還相距甚遠;(4)各行各業的公司,只要有數據驅動的業務,最終都需要一個自己的「大腦」,這種「大腦」不應該只被少數巨頭公司獨享。
你還有什麼天馬行空的想法嗎?
歡迎在評論區留言哦!
作者介紹
袁進輝(老師木),2008年7月自清華大學計算機系獲得工學博士學位,獲得清華大學優秀博士學位論文獎,在計算機視覺以及多媒體領域頂級會議上發表多篇論文,連續多年獲得美國國家技術標準局組織的視頻檢索評測比賽的第一名。2010年負責研發斯諾克」鷹眼「系統,該產品打敗來自英國的競品開始服務於各項國際大賽。2013年加入微軟亞洲研究院從事大規模機器學習平台的研發工作,後發明了當時世界上最快的主題模型訓練演算法和系統LightDA,該技術成功應用於微軟在線廣告系統。2017年創立北京一流科技有限公司,致力於打造業界最好的深度學習平台。


※微軟亞洲研究院機器閱讀系統在SQuAD挑戰賽中率先超越人類水平
TAG:微軟亞洲研究院 |