深度卷積神經網絡CNNs的多GPU並行框架及其應用

【編者按】深度卷積神經網絡有着廣泛的應用場景,本文對深度卷積神經網絡Deep CNNs的多GPU模型並行和數據並行框架做了詳細的分享,通過多個Worker Group實現了數據並行,同一Worker Group內多個Worker實現模型並行。框架中實現了三階段並行流水線掩蓋I/O、CPU處理時間;設計並實現了模型並行引擎,提升了模型並行計算執行效率;通過Transfer Layer解決了數據存儲訪問效率問題。此框架顯著提升了深度卷積神經網絡訓練速度,解決了當前硬件條件下訓練大模型的難題。

以下爲原文:

將深度卷積神經網絡(Convolutional Neural Networks, 簡稱CNNs)用於圖像識別在研究領域吸引着越來越多目光。由於卷積神經網絡結構非常適合模型並行的訓練,因此以模型並行+數據並行的方式來加速Deep CNNs訓練,可預期取得較大收穫。Deep CNNs的單機多GPU模型並行和數據並行框架是騰訊深度學習平臺的一部分,騰訊深度學習平臺技術團隊實現了模型並行和數據並行技術加速Deep CNNs訓練,證實模型拆分對減少單GPU上顯存佔用有效,並且在加速比指標上得到顯著收益,同時可以以較快速度訓練更大的深度卷積神經網絡,提升模型準確率。

1.CNNs模型並行導論

1.1.典型應用分析:圖像識別

圖像識別是深度卷積神經網絡獲得成功的一個典型應用範例。圖1揭示了一個具有5個卷積層和3個全連接層的深度卷積神經網絡,該模型可應用於圖像分類。

53f45bf969d24.jpg

使用GPU訓練深度卷積神經網絡可取得良好的效果[1][2],自2012年使用Deep CNNs模型在ImageNet圖像分類挑戰中取得突破性成績,2013年的最佳分類結果也是由Deep CNNs模型取得。基於此,騰訊深度學習平臺技術團隊期望引入Deep CNNs來解決或優化圖像分類問題和圖像特徵提取問題,以提升在相應用例場景中的效果。

1.2.現有系統的問題

在將CNN應用於圖像相關領域的算法研究以及CNN訓練平臺搭建的實踐過程中,受限於單個GPU上的顯存大小(例如:服務器採購的顯卡Tesla K20c可用顯存爲4.8GB,ImageNet2012論文[1]中用到的網絡佔用顯存大約3.9GB),在嘗試調整參數和網絡規模的實驗中,往往難以存儲下更大規模的深度卷積神經網絡模型,使得包含較多參數的網絡不能在單GPU上訓練,需要通過多GPU模型並行技術,拆分模型到多個GPU上存儲和訓練來解決。

隨着訓練數據集擴充、模型複雜度增加,即使採用GPU加速,在實驗過程中也存在着嚴重的性能不足,往往需要十餘天時間才能達到模型的收斂,不能滿足對於訓練大規模網絡、開展更多試驗的需求

考慮到上述問題,在騰訊深度學習平臺的Deep CNNs多GPU並行訓練框架中,通過設計模型拆分方法、模型並行執行引擎和優化訪存性能的Transfer Layer,並吸收在數據並行方面設計經驗,實現了多GPU加速的模型並行和數據並行版本。

本文描述多GPU加速深度卷積神經網絡訓練系統的模型並行和數據並行實現方法及其性能優化,依託多GPU的強大協同並行計算能力,結合目標Deep CNNs模型在訓練中的並行特點,實現快速高效的深度卷積神經網絡訓練。

1.3.框架設計目標

多GPU模型並行+數據並行期望達到下述目標:充分利用Deep CNNs模型的可並行特點,結合SGD(Stochastic GradientDescent,隨機梯度下降)訓練的數據並行特性,加速模型訓練過程;突破顯存大小限制,使得訓練超過單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內完成對整個模型的訓練。

53f45c27ec48e.jpg

多GPU並行系統從功能上劃分爲用於讀取和分發數據的Training Data Dispatcher和用於做模型並行訓練的GPU Worker,如圖3所示。訓練數據從磁盤文件讀取到CPU主存再拷貝到GPU顯存,故此設計在各Worker計算每batch數據時,由Training Data Dispatcher從文件中讀取並分發下一batch數據,以達到用計算時間掩蓋I/O時間的設計目標。

53f45c44a834b.jpg

3.訓練數據處理的並行加速

基於mini-batch的訓練,現有技術方案在訓練深度卷積神經網絡時,每次從數據文件中讀入和處理1個batch數據,在GPU計算某一batch時由CPU預讀取和預處理下一batch。但是隨着訓練集圖片像素數增大,讀取和處理時間隨之增加,由於採用多GPU技術加速了單個batch計算時間,數據處理的性能問題隨之而來,需要減少數據處理的用時,以使最終加速效果取決於計算用時。

如圖4所示,總體看來,在深度卷積神經網絡訓練過程中始終是在執行一條三階段並行的流水線:計算本次batch數據——處理下次batch數據——讀入再下次batch數據。

53f45c61a9548.jpg

4.GPU Worker: 模型並行的承載體

數據並行以劃分Worker Group爲基本組織形式,模型並行以在Worker Group內劃分Worker爲基本組織形式,並行訓練的調度資源來源於CPU線程,計算資源來源於GPU卡。由於GPU卡通常意義上被看成是一種加速卡或協處理器卡,必須在基於CPU的主機上下文中被調用來做計算,因此遵循1個CPU線程綁定1張GPU卡能夠發揮多GPU共同參與計算時的並行性效能。

53f4614078e72.jpg

在實際生產環境中,安裝多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)連接。

53f4616b5ada8.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章