1. 深度學習
深度學習是機器學習研究中的一個新的領域,其動機在於建立、模擬人腦進行分析學習的神經網絡,它模仿人腦的機制來解釋數據,例如圖像,聲音和文本。深度學習典型應用爲圖像識別和語音識別。(由於本人不是深度學習專業人士,對深度學習理論知識不多介紹,說多了就班門弄斧了,後面主要介紹下這些深度學習算法如何進行並行化設計和優化)
2. CPU+GPU異構協同計算簡介
近年來,計算機圖形處理器(GPU,GraphicsProcess Unit)正在以大大超過摩爾定律的速度高速發展(大約每隔半年 GPU 的性能增加一倍),遠遠超過了CPU 的發展速度。
CPU+GPU異構協同計算模式(圖1),利用CPU進行復雜邏輯和事務處理等串行計算,利用 GPU 完成大規模並行計算,即可以各盡其能,充分發揮計算系統的處理能力。
圖1 CPU+GPU異構體系結構
目前,主流的GPU具有強大的計算能力和內存帶寬,如圖2所示,無論性能還是內存帶寬,均遠大於同代的CPU。對於GPU, Gflop/$和Gflops/w均高於CPU。
圖2 GPU計算能力
3. 深度學習中的CPU+GPU集羣架構
CPU+GPU集羣工作模式(圖3),每個節點內採用CPU+GPU異構模式,並且每個節點可以配置多塊GPU卡。節點間採用高速InfiniBand網絡互連,速度可以達到雙向56Gb/s,實測雙向5GB/s。後端採用並行文件系統。採用數據劃分、任務劃分的方式對應用進行並行化,適用於大規模數據並行計算。
圖3 CPU+GPU集羣架構
4. 利用GPU加速深度學習算法
4.1. 單GPU並行
圖4 單GPU計算流程
針對每次訓練數據,模型內計算通過多次GPU 內核的調用完成計算。權重W值一直存在GPU內存中,直到所有訓練數據計算完畢之後回傳到系統內存中。Data爲圖像或語音數據。
4.2. 多GPU卡並行
多GPU並行計算時,各GPU有自己獨立的內存,卡之間的並行屬於分佈式計算模式。針對深度學習算法,採用多GPU卡計算可以採用兩種並行方法:數據並行和模型並行。
4.2.1. 數據並行
數據並行是指不同的GPU計算不同的訓練數據,即把訓練數據劃分給不同的GPU進行分別計算,由於訓練是逐步訓練的,後一個訓練數據的計算需要前一個訓練數據更新的W,數據並行改變了這個計算順序,多GPU計算需要進行W的互相通信,滿足訓練的特點,使訓練可以收斂。
數據並行如圖5所示,多GPU訓練不同的數據,每訓練一次需要同步W,使得後面的訓練始終爲最新的W。
圖5 數據並行
數據並行的特點:
1) 優點
a) 實現比較容易,也比較容易擴展
b) 只需要進行W的通信,模型內的數據不需要通信
2) 缺點
a) 當模型較大時,GPU內存無法滿足存儲要求,無法完成計算
根據多GPU卡之間的W通信,下面介紹兩種通信方法:主從模式和令牌環模式。
1) 主從模式
主從模式:選擇一個進程或線程作爲主進程或線程,各個GPU把每次訓練得到的ΔW發給主進程或線程,主進程或線程進行W更新,然後再發送給GPU,GPU再進行下一個數據的訓練。如圖6所示。
圖6 主從模式
2) 令牌環模式
令牌環模式:每個GPU把自己訓練得到的ΔW更新到W上,並且發送到下一個GPU,保證令牌環上的W始終爲最新的W。如圖7所示。
圖7 令牌環模式
兩種模式對比如表1
表1 主從模式和令牌環模式對比
模式 |
優點 |
缺點 |
主從模式 |
收斂速度更快 |
GPU計算需要等待,影響GPU計算;主進程或線程壓力較大 |
令牌環模式 |
GPU計算不需要等待通信,性能更好 |
通信速度影響收斂的速度 |
4.2.2. 模型並行
模型並行是指多個GPU同時計算同一個訓練數據,多個GPU對模型內的數據進行劃分,如圖8所示。Kernel計算和通信流程如圖9所示,在一次訓練數據多層計算過程中,每個GPU內核計算之後需要互相交換數據才能進行下一次的計算。
圖8 模型並行
圖9 模型並行:多GPU計算內核和通信示意圖
模型並行特點:
1) 優點
a) 可以處理大模型的情況
2) 缺點
a) 需要更頻繁的通信,增加通信壓力
b) 實現難度較大
4.3. GPU集羣並行
GPU集羣並行模式即爲多GPU並行中各種並行模式的擴展,如表2所示。節點間採用InfiniBand通信,節點間的GPU通過RMDA通信,節點內多GPU之間採用P2P通信。
表2 GPU集羣並行模式
模式 |
節點間 |
節點內 |
特點 |
模式1 |
令牌環 |
單一模式的缺點放大 |
|
模式2 |
主從 |
||
模式3 |
模型並行 |
||
模式4 |
令牌環 |
主從 |
結合各種模式的有點,避免某一模式的缺點放大 |
模式5 |
主從 |
令牌環 |
|
模式6 |
令牌環 |
模型並行 |
|
模式7 |
主從 |
模型並行 |
4.4. 性能分享
4.4.1. 基於GPU集羣的Caffe並行加速
圖10 Caffe性能
8節點GPU服務器,2 K20mGPU/節點,56Gb/s InfiniBand網絡,Lustre並行文件系統
4.4.2. 基於GPU集羣的DNN並行加速
圖11 DNN測試性能
4節點GPU服務器,4 K20mGPU/節點,56Gb/s InfiniBand網絡
5. CPU+FPGA協同計算加速線上計算
相對於訓練計算,線上識別的計算是小而衆多的任務計算,每次請求的計算比較小,但請求的任務數十分龐大,GPU計算雖然獲得很好的性能,但功耗仍然是個嚴峻的問題。
目前主流的FPGA卡功耗只有主流GPU的十分之一,性能相差2-3倍,FPGA相對於GPU具有更高的GFlops/W。
利用FPGA解決線上識別計算可以採用分佈式+FPGA計算的模式,如圖12所示,上層可以採用Hadoop或Spark調度,底層利用FPGA進行計算。
圖12 分佈式計算+FPGA計算
目前,FPGA已開始支持高級語言,如AlteraFPGA支持OpenCL,Xilinx FPGA支持HLS,這對程序員利用FPGA開發減低了難度。這些新平臺的支持還有很多問題,也許後面會支持的越來越好。
備註:由於對深度學習算法瞭解比較膚淺,以上內容難免無誤,請大家理解並提出修改意見。
QQ:331526010
Email:[email protected]