【深度學習框架大PK】褚曉文教授:五大深度學習框架三類神經網絡全麵測評(23PPT)
香港浸會大學褚曉文教授團隊在2016年推出深度學習工具評測的研究報告,並在2017年年初發布更新,引起廣泛關注。見新智元報道《 基準評測 TensorFlow、Caffe、CNTK、MXNet、Torch 在三類流行深度神經網絡上的表現(論文)》,2017年初版本的評測的主要發現可概括如下:
- 總體上,多核CPU的性能並無很好的可擴展性。在很多實驗結果中,使用16核CPU的性能僅比使用4核或8核稍好。TensorFlow在CPU環境有相對較好的可擴展性。
- 僅用一塊GPU卡的話,FCN上Caffe、CNTK和Torch比MXNet和TensorFlow表現更好;CNN上MXNet表現出色,尤其是在大型網絡時;而Caffe和CNTK在小型CNN上同樣表現不俗;對於帶LSTM的RNN,CNTK速度最快,比其他工具好上5到10倍。
- 通過將訓練數據並行化,這些支持多GPU卡的深度學習工具,都有可觀的吞吐量提升,同時收斂速度也提高了。多GPU卡環境下,CNTK平台在FCN和AlexNet上的可擴展性更好,而MXNet和Torch在CNN上相當出色。
- 比起多核CPU,GPU平台效率更高。所有的工具都能通過使用GPU達到顯著的加速。
- 在三個GPU平台中(GTX980,GTX1080,Tesla K80中的一顆GK210),GTX1080由於其計算能力最高,在大多數實驗結果中性能最出色。
- 某種程度上而言,性能也受配置文件的影響。例如,CNTK允許用戶調整係統配置文件,在運算效率和GPU內存間取舍,而MXNet則能讓用戶對cuDNN庫的自動設置進行調整。
2017年9月7日,中國工程院信息與電子工程學部主辦、浪潮集團承辦的首屆人工智能計算大會(AI Computing Conference,簡稱AICC)上,褚曉文教授發表題為《Benchmarking State-of-the-Art Deep Learning Software Tools》的報告並接受了 新智元的獨家專訪。他在采訪中提到了這一項目的起源以及其中涉及的技術點,特別是深度學習網絡的計算原理等。
褚曉文教授介紹說,其團隊從2008年開始就開始從事GPU計算方麵的科研工作,在2014到2015年的時候,開始接觸到深度學習這個領域,那個時候為了開發一個並行的深度學習平台,對整個深度學習的原理和應用都有了一個比較深入的了解,這是一個前期的基礎。
到了2016年的時候,他們就留意到,突然就很多深度學習平台開始開源了。工具多了以後,他們通過與工業界的接觸了解到,大家經常會有一個困惑:工具很多,硬件也很多,各種各樣的GPU卡,從4、5千塊錢到4、5萬都有。該如何進行選擇?這個問題很複雜,也很難回答。所以他就開始跟學生一起,做了一些初步的比較的工作。
值得一提的是,這是一開源的項目,所有人都可以下載到代碼和測試的數據,文檔也寫的很清楚,大家都可以重複實驗。所以從發布至今,褚曉文教授他們也收到了大量的反饋,並對測評結果進行了優化迭代。今年最新版本的測評報告會在近期公布,新智元也將對此保持關注。
TensorFlow vs CNTK vs MXNet,誰的性能最好?
在專訪中,我們邀請褚曉文教授對其科研小組所作測評的幾個框架進行了介紹,他分析了TensorFlow、CNTK 和MXNet。
1. TensorFlow
他說,TensorFlow是目前關注量最多的,可能有80%的用戶會選擇用TensorFlow這個平台。TensorFlow 最大的優勢在於它的社區很成熟,因為用的人多,大家討論的也多,遇到困難,能找到幫你解決困難的可能性也會更高一點。但是TensorFlow自身是一個很大的框架,它的設計初衷在使用硬件資源上麵是一個自動化的過程(注:目前開源的TensorFlow版本還是需要用戶來合理的分配硬件資源)。
褚曉文教授說,由此,TensorFlow可能會有一個問題:性能可能未必是它最關注的一點。他也認為,穀歌在底層硬件上有著更深的布局,他們在硬件上的投入,可能是目前是其他的工具給不了的。“ 其他的工具更依賴於GPU。我覺得穀歌並不把它的重點放在GPU這一塊,反而是說,直接用我的TPU好了。當然第一代TPU不是主要來做訓練,而是使用8-bit整數乘法運算做一些推理,而第二代TPU已經開始支持浮點運算進行訓練了,將來如果大量開放的話對GPU就會帶來更大的挑戰”,褚曉文教授說。
目前TensorFlow在市場上已經占到到百分之七十到八十。那麼,未來會不會出現壟斷,或者一個大一統的深度學習框架。褚曉文教授認為,慢慢的會收攏到兩三個,但是不會僅有一個。也就是說,不會出現一個大一統的工具,但是可能會有兩三個大的工具存在。
2. CNTK
CNTK是褚曉文教授個人比較喜歡的。他介紹說,微軟對CNTK也是非常重視的一個項目,也投入了很多的專家,而且更新也非常快。“在我們多版的測試裏麵,CNTK很多情況下都是性能最好的之一,不管是單卡還是多卡的情況,所以說,微軟我覺得他可能是非常看中性能這一塊”,褚曉文教授說。
因為TensorFlow擁有如此大的體量了,所以CNTK要追趕,注重的就是性能方麵。當然CNTK有它的複雜性在裏麵,因為要取得好的性能,一定是要經過多次的調試,或者說當在寫腳本的時候,要很熟悉這個框架,很熟悉這個硬件,很熟悉這個內存分配等等,才可以達到這個性能的極致。
他說:“所以你要取得好的性能,一定可能是在開發周期上麵需要多花一些功夫在上麵。但是無論如何,從我們的評測結果來講,CNTK,的確是性能最好的,而且他跟英偉達的配合是很緊的,英偉達一旦放出來新的庫,或者新的硬件,微軟馬上就會跟進,去更新他們的CNTK。”
3. MXNet
褚曉文說,MXNet的性能其實也相當好的,跟CNTK差距不大。它在可擴展性方麵也是非常出色的。因為出來的比較晚,它可能的重點就是怎麼做擴展性,比如說它一放出來,就已經直接可以在多卡和多機多卡的集群下麵很方便的使用,這個是MXNet的一個優勢。
TPU帶來改變,但是訓練上GPU還是主流
褚曉文特別強調了測評對“性能”的重視,基本上這是一個以性能為主要標準的評測。但是,在這個過程中,他們也發現一些問題,比如,CuDNN本身對硬件的依賴性,不同版本的 CuDNN 跟不同類型的GPU卡是有一個匹配問題的。
針對今年備受關注的AI專用芯片,比如TPU對深度學習工具的支持。褚曉文教授說,在訓練上來講,GPU還是主流,因為任何一個硬件的出現是離不開軟件的配套的,如果沒有軟件配套,硬件隻能是為已知的一些網絡做優化,如果有新的網絡出現,那這個硬件是否還能夠適應新的軟件結構的,新的網絡結構,這個是未知的。
這些AI芯片可能得是基於一些比較成熟的神經網絡,針對那些已知的網絡做一些優化。但是如果將來萬一有一個顛覆性的網絡結構,或者顛覆性的一種計算模式出現,那你的硬件也要重新來過。這個可能是AI芯片廠商要考慮的一個問題。
褚曉文教授說:“硬件是永遠離不開軟件支撐的,GPU的成功,就是從08年到現在,這麼多年培養了大量的軟件人才,他們在這方麵的投入是相當大的,這也是為什麼AMD遲遲追趕不上的原因,AMD缺乏一個軟件的生態。”
但是,從目前的條件來看,專用AI芯片對深度學習工具性能上的提升是肯定的。因為數據量還是在指數級增長。
褚曉文教授認為,目前來看,比如說最簡單的訓練,還是需要花掉大量的時間,而且單GPU的瓶頸,還是在於它的增長速度跟不上數據的增長,所以一定還是要更專用的種芯片。
采訪的最後,新智元問,如果要從這些工具中選擇一個進行推薦,會推薦哪個?褚曉文教授表示:“我一般不會推薦,因為我們是一個比較中立的一個角度去看,我認為任何一個框架都有它的價值,都有可以借鑒的地方,從實際的角度,對於工程師來講其實你選擇要結合你的業務需求。”
但是,如果對於這種本身沒有太多經驗的人的話,他還是推薦TensorFlow。因為,它的文檔,相對來說都會比較順利一些,而且它開發起來相對容易一些。
各位嘉賓,先生們,女士們中午好,非常感謝浪潮邀請我來參加這個大會,今天我想跟大家分享一下我們在深度學習各種工具性能測試方麵的工作。今天在短短的二十分鍾,我想花一半時間跟大家回顧過去十年裏我們CPU和GPU的發展,接下來給大家介紹現在主流的深度學習軟件工具,也就是浸會大學在深度學習軟件工具的測試工作,及為什麼做這個工作。最後跟大家簡單匯報我們最新的測試結果。
深度學習在近年來已經深入到我們的生活和工作之中。深度學習這個生態圈大概分成三層:最上麵是層出不窮的各種應用,包括著名的AlphaGo、穀歌Translate軟件、訊飛的語音輸入等等,這都是大家生活中會用到的軟件,將來還會有無人駕駛、AI醫療、AI金融。
但是,工欲善其事必先利其器,深度學習的生態圈裏核心一層就是生產工具。大家可以看到從2011年開始有各種各樣的深度學習的平台開源,尤其從2015年開始基本上是百花齊放的狀態。在最底層是原材料,各種各樣的硬件,包括英偉達的GPU,英特爾收購了一些FPGA的公司,還有穀歌的TPU。
今天大會主題是計算,深度學習之所以達到今天的成功完全離不開計算,剛才孫劍先生已經跟大家分享了很多深度學習裏麵的計算。一個神經元它要做的事情就是很簡單的兩個矢量的點積運算,它的運算量取決於權重有多少,僅僅是一個神經元就要做很多計算。這是一個全連接的神經網絡,可以想象,神經元很多的時候計算量有多龐大。
比如,人的大腦有幾百億的神經元在運作,為了解決這個計算問題,近期流行的各種深度的神經網絡,比如卷積網絡它就降低了權重的數量,但是目前的主流神經網絡還是有數以百萬計的權重,做一次前向運算要做幾十億次的乘加運算。所以說,計算力是深度學習的基石。
既然計算如此重要,我們需要回顧近十年來CPU的發展到底是怎麼樣的,2006年當時最強大的英特爾的CPU至強X5355是一款四核CPU,它的計算能力峰值當時是43個GFlops,也我們現在提的是單精度運算,今年 Intel 發布的最新白金CPU8180已經發展到28核,計算峰值能達到2個TFlops。
過去11年CPU處理能力提高了50倍,大家可能想知道這50倍是怎麼來的,非常簡單,第一它的核心數量從4變到28,有了7倍的增長。另外一個性能的提升來源於指令的寬度,2006年一條指令隻能處理 2 個單精度的浮點運算,今天512位的指令集,一條指令可以同時處理16個單精度的浮點運算,這就相當於8倍的性能提升。50倍的提升就是這麼來的,這給軟件從業者帶來了相當大的挑戰,如果你不懂得如何利用多核以及如何利用SIMD指令,那麼你的性能就還停留在十年前的水平。
再看GPU在近十年的發展。紅色這條線是GPU性能,下麵那條線還是CPU的性能,這裏討論的是英偉達的GPU。2006年英偉達第一次發布通用計算的GPU 8800GTX,當時它的性能已經達到了500個GFlops,接下來十年,大家可以看到GPU相對CPU的計算能力一直維持在10-15倍的比例,今年英偉達提出的V100性能已經達到15個TFlops的單精度的性能。大家有沒有發現這兩條曲線非常吻合,有沒有想過為什麼?
今天前麵很多嘉賓已經提到摩爾定律,根本原因就是摩爾定律在掌控一切,摩爾定律說的就是你的芯片裏麵的晶體管數量它的增長每隔兩年大概翻一倍,這個取決於芯片的工藝。所以每次工藝的進步都會帶來CPU和GPU的性能的提升。
這張表給大家展示了英偉達最近的七代GPU的產品,把它放在一起,從2006年它的GPU核隻有128個,今天Volta已經有超過5300個核芯,這是個相當了不起的突破。
大家要留意它的內存的帶寬,剛才孫劍給大家共享了馮諾伊曼的瓶頸問題就是內存的問題,內存技術也是在發展的,但是它的發展速度遠遠低於計算核心的發展。過去11年裏麵內存的帶寬從57個GFlops提升到900個GFlops,還得多謝3D內存技術的突破,如果不考慮3D內存而僅僅考慮GDDR內存的話,它的性能提升僅僅隻有8倍。所以說在過去的11年裏麵內存帶寬僅僅提升了15-16倍,而計算能力提升了30-50倍,這說明內存的性能跟計算的性能之間的距離在逐漸擴大。這也是GPU計算今天麵臨的一個巨大的挑戰,這個挑戰就是巨大的計算能力和相對薄弱的內存訪問之間的一道鴻溝。
大家想象一下,現在的這些GPU或者CPU它每一個時鍾周期可以做1到2個浮點運算,這是它的能力,但是每做一次運算數據從哪裏來,數據往哪裏去,每一次運算都需要至少2個數據讀取的操作,把結果寫回到某個地方去,這都涉及到數據的傳輸。所以內存的的確確是今天麵臨的一個巨大的問題。
我們還沒有講訪問內存需要多長時間。通常來講當你要做計算的時候那個數據從全局內存讀到處理器裏麵需要幾百個時鍾周期,是非常緩慢的過程。內存的帶寬,拿GTX1080來舉例,它的計算能力已經達到了8個TFlops,內存帶寬僅僅有300個GB/s。
假設你的一個GPU線程要做一次運算,首先要從全局內存讀取數據,經過400個時鍾周期的時間才能拿到數據,花20個時鍾周期處理數據得到結果,再把結果再花400周期寫到內存裏麵去,所以單從一個線程的角度來看我們的GPU大部分時間是在等待的。
為了解決這個問題,當然有很多的解決方案,GPU用了非常複雜的內存架構,是一個金字塔型的架構,最頂層是非常快的寄存器,它下麵還有L1級的Cache,還有L2級的Cache,還有Shared Memory。CPU的Cache對程序員是不透明的,程序員不能控製那些Cache,GPU計算領域這些Cache 和 Shared Memory是可以被程序員控製的,GPU架構裏軟件設計空間非常龐大,設計一個好的GPU程序是一門藝術。
我想帶給大家的信息是:硬件和軟件同樣重要,僅僅有硬件是不夠的,沒有好的軟件硬件的效能是發揮不出來的,這也是為什麼今天有這麼多深度學習軟件它們的性能有如此大的差異。
接下來看深度學習軟件在近年來的發展。Torch是很流行的軟件,2002年就有了,那時候還沒有深度學習。後來把深度學習做進去了。2014年就是Caffe,微軟2015年開源了CNTK,接下來穀歌也開源了他們相應的開發平台。第三行是它的粉絲數量,目前Tensorflow的粉絲團是最龐大的,有6萬多個關注,相對來講,CNTK、Caffe加起來還沒有Tensorflow有影響力。最底下是開發平台的維護情況,隨著硬件的提升,新的算法的提出,每個軟件都是要不斷的更新換代的,Tensorflow的更新是非常頻繁的,基本上每一兩個月就會有一個新的更新,代表著他們對軟件平台的投入。
我特別想感謝所有默默無聞的工作在軟件平台後麵的程序員,沒有他們就沒有今天的深度學習。讓我非常自豪的是這裏的開發者有50%以上是中國人。
選擇太多其實是很痛苦的,尤其是對剛剛進入這個領域的創業者來講,這麼多的GPU,5千塊錢的5萬塊錢的差別在哪裏?這麼多的軟件平台該選哪一個?其實要選擇一個好的軟件框架有很多因素,包括它的性能、它的成本、它的穩定性、它的社區的支持等等,我們今天主要是關注它的性能這一個層麵。
其實我們是從2008年就開始研究GPU計算,在2014-2015年我們參與了深度學習軟件的平台開發的項目,接下來我們就認識到深度學習將會徹底改變我們的社會。2015、2016年就開始出現了很多聲音:這麼多的軟件、這麼多的硬件該怎麼處理?所以我們在2016年5月就啟動了關於深度學習平台的基準測試項目。我們這個項目有兩個目的,第一是要去以科學的態度測試這些不同的深度學習平台在不同的硬件平台上的運行性能 ,發現一些潛在的問題,把其作為一些科學的研究課題來改善提高。
那時候也有一些類似的基準測試項目,但我們有三個非常顯著的特點:1. 我們要保證我們的試驗結果是可靠的,一定要可重複實現的。所以我們是一個開源的項目,我們所有的源代碼所有的數據全部是公開在網上供大家重複;2. 我們要保證我們的測試是公平的,盡可能的公平,其實這是一個非常有挑戰性的工作,因為不同的軟件工具它的設計、它對數據的處理都不一樣;3. 我們希望這是一個很長期的工作,有的項目做了一次測試就完了,沒有再去跟進,而我們希望這是一個非常長期的工作,當有新的軟件出來新的硬件出來,我們都會把他們加入到我們的基準測試裏麵供大家參考。
過去的一年裏我們在四個不同的維度做了一些工作,我們測試的軟件工具包括Caffe、CNTK、Tensorflow、MXNet以及Torch,我們暫時聚焦這在五款測試工具。
在測試硬件方麵,我們早期做了一些CPU的測試,把它們的性能跟GPU做比較,後來發現差距實在太大,所以近期我們已經放棄了在CPU上做測試,已經沒有太大的實際意義GPU我們測試了多款市麵上比較流行的GPU,從低端的到高端的。測試的網絡包括全連接的網絡,包括主流的深度卷積網絡以及RNN網絡。測試的數據集我們用的公開的數據集,當然我們自己合成的假的數據,真的數據裏麵我們有MINST,CIFAR10,近期也包括了ImageNet。
深度神經網絡的計算裏最關鍵的是兩種運算:如果你是一個全連接層,它的計算主要是矩陣乘法,如果你是卷積層,它的核心計算是卷積運算。在主流的深度卷積網絡裏大家可以看到超過80%的運算是來源於卷積運算,一般的深度網絡最後一兩層才用到全連接層,所以這個卷積操作其實是現在深度學習裏麵最關鍵的核心技術。剛才孫劍博士也分享了如何做卷積的心得體會。大家有興趣的話可以讀一下最近三四年中發表 的非常經典的學術論文,這就是學術界和工業界的互動,現在學術界也慢慢流行開源,他們有好的想法好的算法不僅發表論文而且公開源代碼,很快英偉達就會把他們的成果集成到他們的library裏麵。
簡單講一下卷積運算為什麼那麼複雜,因為卷積是一個數學概念,它的實現千變萬化,有一本書專門講如何實現卷積運算,目前最主流的有三種算法:第一是通過矩陣運算,這是Caffe最早使用的。第二是Facebook一直推動的基於快速傅立葉變化的運算,第三是基於Winograd的實現,這個方法已經存在幾十年了,隻是近期發現它在特殊情況下能夠取得非常好的性能。
我們在Tesla P100對最新的cuDNN5.1版本做了測試,比較這三種算法,為什麼選這三種算法,因為cuDNN實現了這三種算法供大家選擇。大家可以看到在不同的網絡配置下大家的性能還是有很大差距的,目前在小的卷積核上Winograd遠遠超過矩陣運算和快速浮列變化的運算性能,如果你想網絡訓練得比較快一定要了解卷積操作。
在深度學習整體框架的測試,最新的測試主要是針對四款GPU包括GTX 980、X Pascal另外還有P40和P100。測試的軟件還是剛才提到的那五款軟件。近期我們和浪潮合作也在測試他們的Caffe-MPI。Caffe-MPI是基於英偉達開發的NVCaffe做的並行版本。我們同時做了一些小規模集群上的測試。這是四個節點的GPU集群,一共有16塊P40的卡,它們的網絡連接用的56個Gb的網絡,大家留意的是我們這個測試環境用的是基於PCle的P40,如果用的是NVlink的顯卡那性能應該會更好。
這張圖是Cifar10在AlexNet上跑的結果,我們測試了不同的 Minibatch 增加的時候,顯示的是運行時間,所以batch越高就代表越慢。在這組測試裏麵我們發現CNTK的性能的確是最好的,微軟這個團隊對性能投入了相當多的精力,它的性能在這組測試裏是最好的。大家以後決定用什麼平台用什麼硬件的時候一定要自己做好測試,看看你自己用的是哪款卡,以決定你選取哪一個平台,或者你先決定用哪個平台再考慮選哪一款卡,二者之間有一個匹配問題。
今天主要想跟大家分享的是在多卡環境下的性能,因為單卡過去一年我們已經做出了非常多的報告,多卡的環境的測試相對比較少一點。單機多卡狀態下,大家關心的是一個加速比的問題,如果我要買四張GPU,買一台服務器還是買四台服務器?這涉及到成本的問題。非常高興地告訴大家通過我們的測試,目前主流的測試平台在單機多卡的表現都非常好,它的加速比基本上都是線性的,而且我們用的是PCIE總線,沒有使用NVlink,如果使用NVlink的話,卡和卡之間的通信性能會更好一點。
最後匯報一下我們在GPU集群上的測試結果。這個集群是4個節點的集群,每個節點裏麵有4張卡,最多有16張卡,我們關心的同樣是用16張卡的性能和用1張卡的性能到底有多少提升。在GoogleNet上麵這裏的數據代表的是1秒鍾能夠處理多少張圖像,如果考慮單卡大家可以看到CNTK和MxNet性能差不多,但是擴展性上MxNet的性能在16張卡的性能在我們測試裏是最好的,涉及到磁盤IO問題。
CaffeMPI的加速比是最好的,加速比達到了16張卡可以帶來15倍的提升,但是為什麼它的絕對性能並沒有CNTK和MxNet這麼好,因為單卡性能基於NVCaffe開發的。如果大家想對Caffe-MPI了解更多的話,下午四點鍾浪潮的吳博士會給大家做一個關於Caffe-MPI的詳細介紹,尤其使用Caffe的用戶大家想想怎麼把Caffe這個平台擴展到多機的環境下麵,Caffe-MPI是非常好的選擇。
最後談一下我們近期的計劃。首先我們要考慮把其他主流的比較新的深度學習軟件包括進來,比如百度的PaddlePaddle,還有近期的PyTorch。硬件方麵我們考慮把AMD的芯片和軟件做一些測試比較,有可能我們也會聯絡一些做AI芯片的公司跟我們一起做一些Benchmark,我們希望擴展性方麵把16張卡做到更多,比如32張卡64張卡,尤其在Cloud裏麵的表現。
我們歡迎同大家合作,我們是一個非常開放的平台,任何有興趣的朋友都可以發郵件給我。最後我要感謝浪潮提供這麼好的一個平台給大家,也感謝英偉達對我們提供了很多硬件的支持,感謝CNTK團隊、Tensorflow團隊和MxNet團隊對我們的支持,謝謝大家。
原文發布時間為:2017-09-18
編輯:胡祥傑
本文來自雲棲社區合作夥伴新智元,了解相關信息可以關注“AI_era”微信公眾號
原文鏈接
最後更新:2017-09-20 16:03:21