將深度卷積神經網絡(Convolutional Neural Networks, 簡稱CNNs)用於圖像識別在研究領域吸引著越來越多目光。由於卷積神經網絡結構非常適合模型並行的訓練,因此以模型並行+數據並行的方式來加速Deep CNNs訓練,可預期取得較大收穫。
Deep CNNs的單機多GPU模型並行和數據並行框架是騰訊深度學習平臺的一部分,騰訊深度學習平臺技術團隊實現了模型並行和數據並行技術加速Deep CNNs訓練,證實模型拆分對減少單GPU上顯存佔用有效,並且在加速比指標上得到顯著收益,同時可以以較快速度訓練更大的深度卷積神經網絡,提升模型準確率。
1.CNNs模型並行導論
1.1.典型應用分析:圖像識別
圖像識別是深度卷積神經網絡獲得成功的一個典型應用範例。
圖1揭示了一個具有5個卷積層和3個全連接層的深度卷積神經網絡,該模型可應用於圖像分類。
使用GPU訓練深度卷積神經網絡可取得良好的效果[1][2],自2012年使用Deep CNNs模型在ImageNet圖像分類挑戰中取得突破性成績,2013年的最佳分類結果也是由Deep CNNs模型取得。基於此,騰訊深度學習平臺技術團隊期望引入Deep CNNs來解決或優化圖像分類問題和圖像特徵提取問題,以提升在相應用例場景中的效果。
1.2.現有系統的問題
在將CNN應用於圖像相關領域的算法研究以及CNN訓練平臺搭建的實踐過程中,受限於單個GPU上的顯存大小(例如:伺服器採購的顯卡Tesla K20c可用顯存為4.8GB,ImageNet 2012論文[1]中用到的網絡佔用顯存大約3.9GB),在嘗試調整參數和網絡規模的實驗中,往往難以存儲下更大規模的深度卷積神經網絡模型,使得包含較多參數的網絡不能在單GPU上訓練,需要通過多GPU模型並行技術,拆分模型到多個GPU上存儲和訓練來解決。
隨著訓練數據集擴充、模型複雜度增加,即使採用GPU加速,在實驗過程中也存在著嚴重的性能不足,往往需要十餘天時間才能達到模型的收斂,不能滿足對於訓練大規模網絡、開展更多試驗的需求。
考慮到上述問題,在騰訊深度學習平臺的Deep CNNs多GPU並行訓練框架中,通過設計模型拆分方法、模型並行執行引擎和優化訪存性能的Transfer Layer,並吸收在數據並行方面設計經驗,實現了多GPU加速的模型並行和數據並行版本。
本文描述多GPU加速深度卷積神經網絡訓練系統的模型並行和數據並行實現方法及其性能優化,依託多GPU的強大協同並行計算能力,結合目標Deep CNNs模型在訓練中的並行特點,實現快速高效的深度卷積神經網絡訓練。
1.3.框架設計目標
多GPU模型並行+數據並行期望達到下述目標:充分利用Deep CNNs模型的可並行特點,結合SGD(Stochastic Gradient Descent,隨機梯度下降)訓練的數據並行特性,加速模型訓練過程;突破顯存大小限制,使得訓練超過單GPU顯存的模型成為可能,並預期通過訓練更複雜的網絡來獲得更好的模型效果。
上述目標完成後,系統可以更快地訓練圖1中目標Deep CNNs模型。模型拆分到不同GPU上可減少對單GPU顯存佔用,適用於訓練更深層次、更多參數的卷積神經網絡。
1.4.挑戰
在圖像識別應用中,深度卷積神經網絡模型的卷積層計算量大,全連接層參數多。因此,如何劃分計算資源,通過模型並行和數據並行兩個數據/計算組織層次上來加速訓練是框架設計首要解決的問題。
圖像作為輸入數據,其數據量龐大,且需要預處理過程,因此在Batch訓練時磁碟I/O、數據預處理工作也要消耗一定時間。經典的用計算時間掩蓋I/O時間的方法是引入流水線,因此如何設計一套有效的流水線方法來掩蓋I/O時間和CPU處理時間,以使得整體耗時只取決於實際GPU訓練時間,是一個重要問題。
模型並行是將一個完整Deep CNNs網絡的計算拆分到多個GPU上來執行而採取的並行手段,結合併行資源對模型各並行部分進行合理調度以達到模型並行加速效果是實現模型並行的關鍵步驟。
多GPU系統通過UVA(Unified Virtual Address,統一虛擬地址)技術,允許一顆GPU在kernel計算時訪問其他GPU的設備內存(即顯存),但由於遠程設備存儲訪問速度遠遠低於本地存儲訪問速度,實際性能不佳。因此在跨GPU的鄰接層數據訪問時,需要關注如何高效利用設備間數據拷貝,使所有計算數據本地化。
2.系統概述
如何模型並行?
模型並行是:適當拆分模型到不同的計算單元上利用任務可並行性達到整個模型在計算過程中並行化效果。
如圖2所示,揭示了從單GPU訓練到多GPU模型並行訓練的相異之處,主要在於:在使用單GPU訓練的場景下,模型不進行拆分,GPU顯存上存儲整個模型;模型並行的場景下,將模型拆分到多個GPU上存儲,因此在訓練過程中每個GPU上實際只負責訓練模型的一部分,通過執行引擎的調度在一個WorkerGroup內完成對整個模型的訓練。
多GPU並行系統從功能上劃分為用於讀取和分發數據的Training Data Dispatcher和用於做模型並行訓練的GPU Worker,如圖3所示。訓練數據從磁碟文件讀取到CPU主存再拷貝到GPU顯存,故此設計在各Worker計算每batch數據時,由Training Data Dispatcher從文件中讀取並分發下一batch數據,以達到用計算時間掩蓋I/O時間的設計目標。
3.訓練數據處理的並行加速
基於mini-batch的訓練,現有技術方案在訓練深度卷積神經網絡時,每次從數據文件中讀入和處理1個batch數據,在GPU計算某一batch時由CPU預讀取和預處理下一batch。
但是隨著訓練集圖片像素數增大,讀取和處理時間隨之增加,由於採用多GPU技術加速了單個batch計算時間,數據處理的性能問題隨之而來,需要減少數據處理的用時,以使最終加速效果取決於計算用時。
如圖4所示,總體看來,在深度卷積神經網絡訓練過程中始終是在執行一條三階段並行的流水線:計算本次batch數據——處理下次batch數據——讀入再下次batch數據。
4.GPU Worker: 模型並行的承載體
數據並行以劃分Worker Group為基本組織形式,模型並行以在Worker Group內劃分Worker為基本組織形式,並行訓練的調度資源來源於CPU線程,計算資源來源於GPU卡。由於GPU卡通常意義上被看成是一種加速卡或協處理器卡,必須在基於CPU的主機上下文中被調用來做計算,因此遵循1個CPU線程綁定1張GPU卡能夠發揮多GPU共同參與計算時的並行性效能。
在實際生產環境中,安裝多GPU伺服器的硬體體系結構如圖5所示,示例中揭示了一個8 GPU節點伺服器的硬體配置,每兩個GPU Slot連接在一個GPU專用PCI槽位上再通過PCIe Switch將GPU Slot 0,1,2,3連接在一顆CPU上,GPU Slot 4,5,6,7連接在另一顆CPU上,兩顆CPU通過IOH(Input Output Hub)連接。
5.CNNs網絡的模型劃分
5.1.基本模型劃分方法
模型並行的來源是Deep CNNs網絡只在特定層(如輸入層、全連接層)與其他層有全面的連接,而其他較為獨立的直線連接關係即可作為模型的可並行部分。將模型的可並行部分拆分到多個GPU上,同時利用多個GPU的計算能力各執行子模型的計算,可以大大加快模型的單次前向-後向訓練時間。
DeepCNNs網絡的層次模型實際上是一張有向無環圖(DAG圖),分配到每個模型並行Worker上的層集合,是有向無環圖的拓撲排序子集,所有子集組成整個網絡的1組模型。
5.2「十字形」模型劃分方法
考慮極端情景:需要訓練超大規模Deep CNNs模型,或者使用計算能力相對較強、顯存較小(一般在1GB~3GB)的桌面級GeForce系列GPU,則利用模型本身的並行性這種基本的模型劃分方法將不再適用。需要將模型再做拆分以保證單個GPU都能存儲下對應的子模型。
如圖7所示,描述了將模型按「十字形」劃分到4 Worker上訓練的情景,不僅拆分了模型的可並行部分,也雖然這樣的劃分在Worker 0和Worker2之間,Worker 1和Worker 3之間達到並行加速效果,卻能使得整個模型得以存儲在4 GPU上。這種模型劃分方法能夠適用於訓練超大規模網絡等特殊模型的需求。
6.CNNs網絡的模型並行工作引擎
每個模型並行Worker上以一個模型並行執行引擎負責調度本Worker上子模型的執行過程。執行引擎控制所有Worker上的子模型完成前向和後向計算,各自對子模型完成參數更新後,到達主線程同步點,開始下一mini-batch訓練。
多GPU模型並行和數據並行的Deep CNNs模型replicas及劃分結構如圖8所示,在使用4 GPU的場景下,劃分了2組Worker Group用於數據並行;每個Worker Group內劃分2個Worker用於模型並行。
7.在圖像識別上的應用
7.1.模型訓練實驗性能
實驗環境為一臺搭載8核心Intel(R) Xeon(R) CPUE5-2640 v2 @ 2.00GHz的伺服器,內存為48GB,伺服器安裝了4塊NVIDIATesla K20c GPU,單GPU顯存大小為4.8GB。
訓練同樣的Deep CNNs模型,相比於單GPU,使用多GPU結合不同並行模式的加速效果如下表所示:
7.2.模型收斂性
對於目標Deep CNNs模型,在單GPU訓練時(對照實驗)顯存佔用量為3.99GB;使用2 GPU模型並行訓練時單個GPU上顯存佔用量為2.15GB,並且在訓練相同迭代時訓練集、測試集錯誤率效果都與對照實驗完全相同;抽樣比照參數一致性,被抽樣的參數(同對照實驗相比)也都是一樣。
嘗試更改Deep CNNs模型,訓練一個更大的網絡,增加濾波器數目,減小步長,增加中間卷積層feature map數目,訓練時所需顯存將達到9GB以上,使用單個Tesla K20c GPU(4.8GB顯存)無法開展訓練實驗;而多GPU模型並行訓練實驗中該模型的錯誤率對比圖1模型降低2%。
7.3.效果展示
圖9為圖像標籤識別的示例,通過對兩千多類物體的圖像進行訓練,可實現對常見物體的自動識別。
8.結論與展望
本文描述了深度卷積神經網絡Deep CNNs的多GPU模型並行和數據並行框架,通過多個Worker Group實現了數據並行,同一Worker Group內多個Worker實現模型並行。框架中實現了三階段並行流水線掩蓋I/O、CPU處理時間;設計並實現了模型並行引擎,提升了模型並行計算執行效率;通過Transfer Layer解決了數據存儲訪問效率問題。此框架顯著提升了深度卷積神經網絡訓練速度,解決了當前硬體條件下訓練大模型的難題。
深度卷積神經網絡有著廣泛的應用場景:在圖像應用方面,Deep CNNs可應用於相似圖片檢索、圖片的自動標註和人臉識別等。在廣告圖片特徵提取方面,考慮Deep CNNs能夠很好地學習到圖像特徵,我們嘗試將其用於廣告點擊率預估(Click-Through Rate Prediction, pCTR)模型中。
參考文獻
[1]Alex Krizhevsky, Ilya Sutskever, andGeoffrey E. Hinton. (2012) ImageNet Classification with Deep ConvolutionalNeural Networks. In Advances in NeuralInformation Processing 25 (NIPS 2012), MIT Press, Cambridge, MA.
[2]OssamaAbdel-Hamid, Abdel-rahman Mohamed, Hui Jiang, Gerald Penn. (2012) ApplyingConvolutional Neural Networks Concepts to Hybrid NN-HMM Model for SpeechRecognition. ICASSP』12, 2012.
[3]JeffreyDean, Greg S. Corrado, Rajat Monga, et al, and Andrew Y. Ng. (2012) Large ScaleDistributed Deep Networks. In Advances inNeural Information Processing 25 (NIPS 2012), MIT Press, Cambridge, MA.
[4]OmryYadan, Keith Adams, Yaniv Taigman, Marc』Aurelio Ranzato. (2014) Multi-GPUTraining of ConvNets. arXiv: 1312.5853v4[cs.LG], Feb. 18th, 2014.