將深度卷積神經(jīng)網(wǎng)絡(Convolutional Neural Networks, 簡稱CNNs)用于圖像識別在研究領(lǐng)域吸引著越來越多目光。由于卷積神經(jīng)網(wǎng)絡結(jié)構(gòu)非常適合模型并行的訓練,因此以模型并行+數(shù)據(jù)并行的方式來加速Deep CNNs訓練,可預期取得較大收獲。
Deep CNNs的單機多GPU模型并行和數(shù)據(jù)并行框架是騰訊深度學習平臺的一部分,騰訊深度學習平臺技術(shù)團隊實現(xiàn)了模型并行和數(shù)據(jù)并行技術(shù)加速Deep CNNs訓練,證實模型拆分對減少單GPU上顯存占用有效,并且在加速比指標上得到顯著收益,同時可以以較快速度訓練更大的深度卷積神經(jīng)網(wǎng)絡,提升模型準確率。
1.CNNs模型并行導論
1.1.典型應用分析:圖像識別
圖像識別是深度卷積神經(jīng)網(wǎng)絡獲得成功的一個典型應用范例。
圖1揭示了一個具有5個卷積層和3個全連接層的深度卷積神經(jīng)網(wǎng)絡,該模型可應用于圖像分類。
使用GPU訓練深度卷積神經(jīng)網(wǎng)絡可取得良好的效果[1][2],自2012年使用Deep CNNs模型在ImageNet圖像分類挑戰(zhàn)中取得突破性成績,2013年的最佳分類結(jié)果也是由Deep CNNs模型取得。基于此,騰訊深度學習平臺技術(shù)團隊期望引入Deep CNNs來解決或優(yōu)化圖像分類問題和圖像特征提取問題,以提升在相應用例場景中的效果。
1.2.現(xiàn)有系統(tǒng)的問題
在將CNN應用于圖像相關(guān)領(lǐng)域的算法研究以及CNN訓練平臺搭建的實踐過程中,受限于單個GPU上的顯存大小(例如:服務器采購的顯卡Tesla K20c可用顯存為4.8GB,ImageNet 2012論文[1]中用到的網(wǎng)絡占用顯存大約3.9GB),在嘗試調(diào)整參數(shù)和網(wǎng)絡規(guī)模的實驗中,往往難以存儲下更大規(guī)模的深度卷積神經(jīng)網(wǎng)絡模型,使得包含較多參數(shù)的網(wǎng)絡不能在單GPU上訓練,需要通過多GPU模型并行技術(shù),拆分模型到多個GPU上存儲和訓練來解決。
隨著訓練數(shù)據(jù)集擴充、模型復雜度增加,即使采用GPU加速,在實驗過程中也存在著嚴重的性能不足,往往需要十余天時間才能達到模型的收斂,不能滿足對于訓練大規(guī)模網(wǎng)絡、開展更多試驗的需求。
考慮到上述問題,在騰訊深度學習平臺的Deep CNNs多GPU并行訓練框架中,通過設計模型拆分方法、模型并行執(zhí)行引擎和優(yōu)化訪存性能的Transfer Layer,并吸收在數(shù)據(jù)并行方面設計經(jīng)驗,實現(xiàn)了多GPU加速的模型并行和數(shù)據(jù)并行版本。
本文描述多GPU加速深度卷積神經(jīng)網(wǎng)絡訓練系統(tǒng)的模型并行和數(shù)據(jù)并行實現(xiàn)方法及其性能優(yōu)化,依托多GPU的強大協(xié)同并行計算能力,結(jié)合目標Deep CNNs模型在訓練中的并行特點,實現(xiàn)快速高效的深度卷積神經(jīng)網(wǎng)絡訓練。
1.3.框架設計目標
多GPU模型并行+數(shù)據(jù)并行期望達到下述目標:充分利用Deep CNNs模型的可并行特點,結(jié)合SGD(Stochastic Gradient Descent,隨機梯度下降)訓練的數(shù)據(jù)并行特性,加速模型訓練過程;突破顯存大小限制,使得訓練超過單GPU顯存的模型成為可能,并預期通過訓練更復雜的網(wǎng)絡來獲得更好的模型效果。
上述目標完成后,系統(tǒng)可以更快地訓練圖1中目標Deep CNNs模型。模型拆分到不同GPU上可減少對單GPU顯存占用,適用于訓練更深層次、更多參數(shù)的卷積神經(jīng)網(wǎng)絡。
1.4.挑戰(zhàn)
在圖像識別應用中,深度卷積神經(jīng)網(wǎng)絡模型的卷積層計算量大,全連接層參數(shù)多。因此,如何劃分計算資源,通過模型并行和數(shù)據(jù)并行兩個數(shù)據(jù)/計算組織層次上來加速訓練是框架設計首要解決的問題。
圖像作為輸入數(shù)據(jù),其數(shù)據(jù)量龐大,且需要預處理過程,因此在Batch訓練時磁盤I/O、數(shù)據(jù)預處理工作也要消耗一定時間。經(jīng)典的用計算時間掩蓋I/O時間的方法是引入流水線,因此如何設計一套有效的流水線方法來掩蓋I/O時間和CPU處理時間,以使得整體耗時只取決于實際GPU訓練時間,是一個重要問題。
模型并行是將一個完整Deep CNNs網(wǎng)絡的計算拆分到多個GPU上來執(zhí)行而采取的并行手段,結(jié)合并行資源對模型各并行部分進行合理調(diào)度以達到模型并行加速效果是實現(xiàn)模型并行的關(guān)鍵步驟。
多GPU系統(tǒng)通過UVA(Unified Virtual Address,統(tǒng)一虛擬地址)技術(shù),允許一顆GPU在kernel計算時訪問其他GPU的設備內(nèi)存(即顯存),但由于遠程設備存儲訪問速度遠遠低于本地存儲訪問速度,實際性能不佳。因此在跨GPU的鄰接層數(shù)據(jù)訪問時,需要關(guān)注如何高效利用設備間數(shù)據(jù)拷貝,使所有計算數(shù)據(jù)本地化。
2.系統(tǒng)概述
如何模型并行?
模型并行是:適當拆分模型到不同的計算單元上利用任務可并行性達到整個模型在計算過程中并行化效果。
如圖2所示,揭示了從單GPU訓練到多GPU模型并行訓練的相異之處,主要在于:在使用單GPU訓練的場景下,模型不進行拆分,GPU顯存上存儲整個模型;模型并行的場景下,將模型拆分到多個GPU上存儲,因此在訓練過程中每個GPU上實際只負責訓練模型的一部分,通過執(zhí)行引擎的調(diào)度在一個WorkerGroup內(nèi)完成對整個模型的訓練。
多GPU并行系統(tǒng)從功能上劃分為用于讀取和分發(fā)數(shù)據(jù)的Training Data Dispatcher和用于做模型并行訓練的GPU Worker,如圖3所示。訓練數(shù)據(jù)從磁盤文件讀取到CPU主存再拷貝到GPU顯存,故此設計在各Worker計算每batch數(shù)據(jù)時,由Training Data Dispatcher從文件中讀取并分發(fā)下一batch數(shù)據(jù),以達到用計算時間掩蓋I/O時間的設計目標。
3.訓練數(shù)據(jù)處理的并行加速
基于mini-batch的訓練,現(xiàn)有技術(shù)方案在訓練深度卷積神經(jīng)網(wǎng)絡時,每次從數(shù)據(jù)文件中讀入和處理1個batch數(shù)據(jù),在GPU計算某一batch時由CPU預讀取和預處理下一batch。
但是隨著訓練集圖片像素數(shù)增大,讀取和處理時間隨之增加,由于采用多GPU技術(shù)加速了單個batch計算時間,數(shù)據(jù)處理的性能問題隨之而來,需要減少數(shù)據(jù)處理的用時,以使最終加速效果取決于計算用時。
如圖4所示,總體看來,在深度卷積神經(jīng)網(wǎng)絡訓練過程中始終是在執(zhí)行一條三階段并行的流水線:計算本次batch數(shù)據(jù)――處理下次batch數(shù)據(jù)――讀入再下次batch數(shù)據(jù)。
4.GPU Worker: 模型并行的承載體
數(shù)據(jù)并行以劃分Worker Group為基本組織形式,模型并行以在Worker Group內(nèi)劃分Worker為基本組織形式,并行訓練的調(diào)度資源來源于CPU線程,計算資源來源于GPU卡。由于GPU卡通常意義上被看成是一種加速卡或協(xié)處理器卡,必須在基于CPU的主機上下文中被調(diào)用來做計算,因此遵循1個CPU線程綁定1張GPU卡能夠發(fā)揮多GPU共同參與計算時的并行性效能。
在實際生產(chǎn)環(huán)境中,安裝多GPU服務器的硬件體系結(jié)構(gòu)如圖5所示,示例中揭示了一個8 GPU節(jié)點服務器的硬件配置,每兩個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網(wǎng)絡的模型劃分
5.1.基本模型劃分方法
模型并行的來源是Deep CNNs網(wǎng)絡只在特定層(如輸入層、全連接層)與其他層有全面的連接,而其他較為獨立的直線連接關(guān)系即可作為模型的可并行部分。將模型的可并行部分拆分到多個GPU上,同時利用多個GPU的計算能力各執(zhí)行子模型的計算,可以大大加快模型的單次前向-后向訓練時間。
DeepCNNs網(wǎng)絡的層次模型實際上是一張有向無環(huán)圖(DAG圖),分配到每個模型并行Worker上的層集合,是有向無環(huán)圖的拓撲排序子集,所有子集組成整個網(wǎng)絡的1組模型。
5.2“十字形”模型劃分方法
考慮極端情景:需要訓練超大規(guī)模Deep CNNs模型,或者使用計算能力相對較強、顯存較小(一般在1GB~3GB)的桌面級GeForce系列GPU,則利用模型本身的并行性這種基本的模型劃分方法將不再適用。需要將模型再做拆分以保證單個GPU都能存儲下對應的子模型。
如圖7所示,描述了將模型按“十字形”劃分到4 Worker上訓練的情景,不僅拆分了模型的可并行部分,也雖然這樣的劃分在Worker 0和Worker2之間,Worker 1和Worker 3之間達到并行加速效果,卻能使得整個模型得以存儲在4 GPU上。這種模型劃分方法能夠適用于訓練超大規(guī)模網(wǎng)絡等特殊模型的需求。
6.CNNs網(wǎng)絡的模型并行工作引擎
每個模型并行Worker上以一個模型并行執(zhí)行引擎負責調(diào)度本W(wǎng)orker上子模型的執(zhí)行過程。執(zhí)行引擎控制所有Worker上的子模型完成前向和后向計算,各自對子模型完成參數(shù)更新后,到達主線程同步點,開始下一mini-batch訓練。
多GPU模型并行和數(shù)據(jù)并行的Deep CNNs模型replicas及劃分結(jié)構(gòu)如圖8所示,在使用4 GPU的場景下,劃分了2組Worker Group用于數(shù)據(jù)并行;每個Worker Group內(nèi)劃分2個Worker用于模型并行。
7.在圖像識別上的應用
7.1.模型訓練實驗性能
實驗環(huán)境為一臺搭載8核心Intel(R) Xeon(R) CPUE5-2640 v2 @ 2.00GHz的服務器,內(nèi)存為48GB,服務器安裝了4塊NVIDIATesla K20c GPU,單GPU顯存大小為4.8GB。
訓練同樣的Deep CNNs模型,相比于單GPU,使用多GPU結(jié)合不同并行模式的加速效果如下表所示:
7.2.模型收斂性
對于目標Deep CNNs模型,在單GPU訓練時(對照實驗)顯存占用量為3.99GB;使用2 GPU模型并行訓練時單個GPU上顯存占用量為2.15GB,并且在訓練相同迭代時訓練集、測試集錯誤率效果都與對照實驗完全相同;抽樣比照參數(shù)一致性,被抽樣的參數(shù)(同對照實驗相比)也都是一樣。
嘗試更改Deep CNNs模型,訓練一個更大的網(wǎng)絡,增加濾波器數(shù)目,減小步長,增加中間卷積層feature map數(shù)目,訓練時所需顯存將達到9GB以上,使用單個Tesla K20c GPU(4.8GB顯存)無法開展訓練實驗;而多GPU模型并行訓練實驗中該模型的錯誤率對比圖1模型降低2%。
7.3.效果展示
圖9為圖像標簽識別的示例,通過對兩千多類物體的圖像進行訓練,可實現(xiàn)對常見物體的自動識別。
8.結(jié)論與展望
本文描述了深度卷積神經(jīng)網(wǎng)絡Deep CNNs的多GPU模型并行和數(shù)據(jù)并行框架,通過多個Worker Group實現(xiàn)了數(shù)據(jù)并行,同一Worker Group內(nèi)多個Worker實現(xiàn)模型并行。框架中實現(xiàn)了三階段并行流水線掩蓋I/O、CPU處理時間;設計并實現(xiàn)了模型并行引擎,提升了模型并行計算執(zhí)行效率;通過Transfer Layer解決了數(shù)據(jù)存儲訪問效率問題。此框架顯著提升了深度卷積神經(jīng)網(wǎng)絡訓練速度,解決了當前硬件條件下訓練大模型的難題。
深度卷積神經(jīng)網(wǎng)絡有著廣泛的應用場景:在圖像應用方面,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.