GPU加速深度學習
1. 背景
一年半以前,AlphaGo完勝李世乭的圍棋賽讓深度學習(Deep Learning)這個名詞家喻戶曉,再度掀起人工智能的新一波熱潮。其實深度學習背後的神經網絡基礎理論早在上世紀50年代就已提出,經過幾起幾落的發展,到了21世紀初,多層神經網絡算法也日趨成熟。深度學習理論早在十多年以前就有重要突破,為何直到近年才出現爆發。這不得不提到2012年的一場競賽。
2012年,Geoffrey E. Hinton(與Yann LeCun 和Yoshua Bengio並稱為深度學習三駕馬車)的弟子Alex Krizhevsky在ILSVRC-2012的圖像分類比賽中使用2塊Nvidia GTX 580 GPU訓練的多層神經網絡(後來被稱為AlexNet)以15.3%的top-5測試錯誤率摘得冠軍,而使用傳統方法的第二名的成績是26.2%,整整提高了10多個百分點。這也成為了深度學習發展史上的裏程碑事件,從此深度神經網絡一炮走紅,此後ILSVRC的優勝者一直被深度神經網絡霸占。
可以說深度學習爆發有兩個主要原因,一個是像ImageNet這樣的大規模數據集的出現,而另一個重要原因就是計算能力的提高,而這主要得益於GPU用於深度學習的加速,尤其是深度學習訓練的加速。
Alex當時使用的數據集包含120萬張高清圖片,受限於單塊GTX 580 GPU 3GB的內存,他們使用了2塊GPU來訓練他們包含6000萬參數和65萬神經節點的網絡,當時花了5~6天的時間。可以想象,沒有GPU的加速,要完成如此大規模的數據集的多層神經網絡訓練要花費多長的時間。
隨著深度網絡層數的增加,訓練集動輒以T為單位計算,現在深度學習的訓練已經離不開GPU了,而GPU的計算能力也在不斷的提升,以滿足深度學習訓練的計算需求。
2. 實測
下麵是我們使用主流的幾個開源深度學習框架在NVIDIA GPU上做的一些深度學習的測試。其中P100和P4的數據均來自於阿裏雲EGS新GPU實例的內部測試數據,僅供參考,實際數據請以線上正式環境為準。
2.1 NVCaffe
NVCaffe是NVIDIA基於BVLC-Caffe針對NVIDIA GPU尤其是多GPU加速優化的開源深度學習框架。
我們使用NVCaffe對AlexNet、GoogLeNet、ResNet50三種經典卷積神經網絡在單機8卡P100服務器上做了訓練測試。測試使用ImageNet ILSVRC2012數據集,,其中訓練圖片1281167張, 驗證測試圖片 5萬張,LMDB格式train set 240GB ,val set 9.4GB,數據單位是Images/Second(每秒處理的圖像張數),OOM表示Batch Size太大導致GPU顯存不夠。
下麵是給出物理機上GoogLeNet的數據:
從測試數據我們看到,相同GPU數量,隨著Batch Size的增大,訓練性能會有明顯的提升,相同Batch Size,在GPU Memory基本用滿的情況下,隨著GPU數量的增加,訓練性能也會有明顯的提升,GPU加速可以接近線性加速。高密GPU服務器可以接近線性加速,對於大數據集的訓練提速非常明顯。
我們還對比了不同卷積神經網絡模型的多GPU加速比,結果如下:
可以看到,不同神經網絡模型的GPU加速也是有差別的,AlexNet的多GPU加速效果就不如GoogLeNet和ResNet50好。
2.2 MXNet
相比Caffe,MXNet是一個更加簡潔靈活效率高的開源深度學習框架,它配置簡單,依賴少,尤其是具有很好的多GPU加速擴展性。
我們使用Benchmark模式測試ImageNet訓練,使用網絡Inception-v3(GoogLeNet的升級版)在單機8卡P100服務器上進行測試,物理機加速比如下:
可以看到,MXNet也具有非常好的GPU線性加速擴展能力。
下麵是P100虛擬機與AWS P2.16xlarge實例的對比,單位是samples/sec,越大性能越好:
2.3 TensorFlow
TensorFlow得益於背後Google的支持,是活躍度最高的開源深度學習框架。
我們使用CIFAR-10數據集在P100上做了多GPU加速訓練測試,物理機加速比如下:
可以看到,TensorFlow的單機多卡加速能力是非常差的,尤其是超過2卡以後,跟NVCaffe和MXNet有較大的差距。
此外,我們使用AlexNet Benchmark模式對不同架構單GPU 做了Forward和Forward-backward性能測試作為比較參考,包括新的Pascal架構的Tesla P100、P4和老的Kepler架構的K80(其中K80數據來源於AWS P2.16xlarge實例,對比的P100也是虛擬機的數據),數據單位sec/ batch,值越小性能越好:
通過K80與P100、P4的對比,可以看到Pascal架構的GPU(P100、P4)比Kepler架構的GPU(K80)有非常明顯的性能提升。其中特別一提的是P4因為較低的TDP(75W),具備非常好的性能功耗比,非常適合作為推理的加速。
3. 總結
1) 為了縮短訓練時間,盡可能選擇新架構的GPU,比如Pascal架構的P100,並利用GPU適合並行計算的特點使用多GPU來加速訓練。但是注意,並不是所有的深度學習框架都有好的單機多卡加速,比如開源的TensorFlow就不好,我們建議用戶使用比如MXNet或者NVCaffe這樣的學習框架用於單機多卡加速。
2) Batch Size的增大對於訓練的性能有明顯的提升,因此應盡可能選擇GPU Memory大的GPU,比如P100的GPU Memory可以達到16GB。
3) 不同深度神經網絡的實現差異,會導致多GPU加速比的差異,在設計或者優化神經網絡模型的時候,需要注意如何更好的利用GPU的並行計算能力,比如減小GPU之間的通信開銷以提高GPU並行計算的效率。
最後更新:2017-07-18 20:35:36