基于多圖形處理器的模型并行處理方法及裝置制造方法
【專利摘要】本發(fā)明涉及一種基于多圖形處理器(GPU)的并行數據處理方法,包括以下步驟:在中央處理器(CPU)內創(chuàng)建用于分別控制多個工作組(Worker?Group)的多個工作線程(Worker),所述工作組包括多個GPU;將每個工作線程與對應的一個GPU綁定;從非易失性存儲器內加載一個批次(Batch)的訓練數據至與一個工作組對應的一個GPU顯存中;在對應于一個工作組的多個GPU之間以點對點(Peer?to?Peer)的方式傳輸GPU進行數據處理所需要的數據;通過所述工作線程控制所述多個GPU并行進行數據處理。所述方法可以提升多GPU并行數據處理的效率。此外,本發(fā)明還提供一種并行數據處理裝置。
【專利說明】基于多圖形處理器的模型并行處理方法及裝置
【技術領域】
[0001]本發(fā)明涉及計算【技術領域】,特別涉及一種基于多圖形處理器(GPU)的數據并行處
理方法及裝置。
【背景技術】
[0002]深度神經網絡技術目前是機器學習領域比較熱門的技術,在學術界及工業(yè)界均已有成功案例,包括語音識別、圖像識別、自然語言處理以及廣告推薦等。Rajat Raina, AnandMadhavan, Andrew Y.Ng等人在第26屆國際機器學習會議(Montreal, Canada, 2009)上發(fā)表的文章 “Large-scale Deep Unsupervised Learning using Graphics Processors,,介紹了使用單個圖形處理器(GPU)訓練深度神經網絡的方法及系統實現;Alex Krizhevsky, IlyaSutskever, Geoffrey E.Hinton 等人在《神經信息處理系統》2012 (《Neural Informat1nProcessing Systems)))上發(fā)表的“使用深度卷積神經網絡進行圖像分類(ImageNetClassificat1n with Deep Convolut1nal Neural Networks) ” 一文介紹了使用單 GPU 訓練卷積神經網絡的方法及系統實現。
[0003]在通用計算方向,隨著NVIDIA CUDA (Compute Unified Device Architecture,統一計算設備架構)的出現和發(fā)展,利用GPU完成通用計算變得越來越簡單,在業(yè)界廣泛應用的通用計算領域等眾多應用中可獲得幾倍、幾十倍,甚至上百倍的加速比。請參見DavidB.Kirk, ffen-mei ff.Hwu.大規(guī)模并行處理器編程實戰(zhàn)(第二版)[M].清華大學出版社,2013年11月。
[0004]GPU處理器采用了與CPU處理器完全不同的設計理念,如圖1所示,區(qū)別于CPU的“多核”概念,GPU的設計走向“眾核”方向,眾核即由大量較小的內核組成,隨著計算機的發(fā)展,內核的數量也在不斷翻倍。
[0005]深度神經網絡訓練中用到的反向傳播算法(BP算法)基本思想是學習過程由樣本輸入前向傳播與誤差的反向傳播兩個過程組成。前向傳播由輸入層加載輸入數據,傳播到各隱藏層處理,最后到輸出層輸出特征;反向傳播將某種形式的輸出誤差反向通過各隱藏層逐層傳播,并在各隱藏層上通過更新的誤差值計算更新的梯度,最后反饋到輸入層。在每次前向傳播和反向傳播后,各層均需要將梯度更新到權重參數上。請參見A.T.C.Goh.Back-propagat1n neural networks for modeling complex systems[J].ArtificialIntelligence in Enineering, 1995.[0006]Omry Yadan, Keith Adams, Yaniv Taigman, Marc’ Aurel1 Ranzat0.Mult1-GPUTraining of ConvNets.arXiv: 1312.5853v4 [cs.LG], Feb.18th, 2014 是 Facebook 公司發(fā)表的卷積神經網絡在多GPU上訓練的實現,取得了有效的加速成果,使用4GPU相比I GPU最多可達到2.2倍加速比。從實踐上證明深度神經網絡的訓練過程中存在著較為充分的任務并行性和數據并行性,而多GPU技術的應用有效利用了并行性特點,能夠起到加速深度神經網絡的訓練過程,從而縮減開展試驗的時間成本和經費成本,獲得更高的成果收益。
[0007]隨著GPU硬件的快速發(fā)展,圖形處理器上聚合著大規(guī)模并行處理器資源,從而有利于將通用計算中的并行計算部分映射到GPU平臺,使得GPU技術來加速并行應用程序越來越流行。然而,基于單GPU實現深度神經網絡系統由于目前實現方案的并行度主要存在于矩陣運算的并行化方面,將成千上萬維矩陣的運算映射到GPU并行計算場景來提升單次處理的速度,而處理數據、各批次數據計算之間、深度神經網絡本身存在的并行性并未加以考慮,依舊是串行化實現。面對大規(guī)模訓練數據、訓練較復雜的深度網絡的需求,采用GPU開展訓練,在實驗過程中已存在的嚴重性能不足,往往需要一周乃至數周時間才能達到模型的收斂,不能滿足對于訓練大規(guī)模網絡、開展更多的試驗的需求。目前服務器上安裝多個GPU卡已經非常普遍,在通用計算領域使用多GPU并行加速技術擴展計算密集型應用程序的并行性、提高程序性能也是越來越熱門的發(fā)展方向。
[0008]基于點對點數據交換模型在性能上存在嚴重不足:在超過2個并行單元時需要更多的數據交換周期,并且每個數據交換周期內存在等待,沒有充分利用空閑的總線帶寬。需要在多GPU數據并行技術中創(chuàng)新地實現一種參數交換機制來得以解決。
[0009]解決了模型訓練的性能問題后,還需要解決模型訓練過程中收斂速度問題,從訓練算法方面再以提高訓練性能?,F有技術采用固定學習率更新參數,訓練實驗過程摻雜大量手動調節(jié)學習率及判斷收斂工作,復雜繁瑣而效率較低。
【發(fā)明內容】
[0010]有鑒于此,本發(fā)明提供一種基于多圖形處理器(GPU)的并行數據處理方法及裝置,其可提升數據的并行處理效率。
[0011]一種基于多圖形處理器(GPU)的并行數據處理方法,包括以下步驟:
[0012]在中央處理器(CPU)內創(chuàng)建用于分別控制多個工作組的多個工作線程(Worker),所述工作組包括一個或多個GPU ;
[0013]將每個工作線程與對應的一個GPU綁定;
[0014]從非易失性存儲器內分別加載多個批次(Batch)的訓練數據至所述多個工作組內的GPU顯存中;以及
[0015]通過所述工作線程控制所述多個GPU進行并行數據處理。
[0016]一種基于多圖形處理器(GPU)的數據并行處理裝置,包括:
[0017]線程創(chuàng)建模塊,用于在中央處理器(CPU)內創(chuàng)建用于分別控制多個工作組的多個工作線程(Worker),所述工作組包括一個或多個GPU ;
[0018]線程綁定模塊,用于將每個工作線程與對應的一個GPU綁定;
[0019]數據分發(fā)模塊,用于從非易失性存儲器內分別加載多個批次(Batch)的訓練數據至所述多個工作組內的GPU顯存中;
[0020]數據處理控制模塊,用于通過所述工作線程控制所述多個GPU進行并行數據處理。
[0021]一種基于多圖形處理器(GPU)的并行數據處理方法,包括以下步驟:
[0022]在中央處理器(CPU)內創(chuàng)建用于分別控制多個工作組(Worker Group)的多個工作線程(Worker),所述工作組包括多個GPU ;
[0023]將每個工作線程與對應的一個GPU綁定;
[0024]從非易失性存儲器內加載一個批次(Batch)的訓練數據至與一個工作組對應的一個GPU顯存中;
[0025]在對應于一個工作組的多個GPU之間以點對點(Peer to Peer)的方式傳輸GPU進行數據處理所需要的數據;
[0026]通過所述工作線程控制所述多個GPU并行進行數據處理。
[0027]一種基于多圖形處理器(GPU)的數據并行處理裝置,包括:
[0028]線程創(chuàng)建模塊,用于在中央處理器(CPU)內創(chuàng)建用于分別控制多個工作組(Worker Group)的多個工作線程(Worker),所述工作組包括多個GPU ;
[0029]線程綁定模塊,用于將每個工作線程與對應的一個GPU綁定;
[0030]數據分發(fā)模塊,用于從非易失性存儲器內加載一個批次(Batch)的訓練數據至與一個工作組對應的一個GPU顯存中;
[0031]傳輸模塊,用于在對應于一個工作組的多個GPU之間以點對點方式傳輸GPU進行數據處理所需要的數據;以及
[0032]數據處理控制模塊,通過所述工作線程控制所述多個GPU并行進行數據處理。
[0033]根據上述的方法及裝置,具體的處理運算在多個GPU中并行進行,而各GPU的調度由獨占的CPU線程實現,因此,整個數據處理的過程,無論是GPU中的處理運算還是CPU內的線程調度都以并行的方式運行,從而提升了數據處理效率。此外,通過傳輸模塊的引入,提升了存儲訪問的效率,進一步提升了數據處理的效率。
[0034]為讓本發(fā)明的上述和其他目的、特征和優(yōu)點能更明顯易懂,下文特舉較佳實施例,并配合所附圖式,作詳細說明如下。
【專利附圖】
【附圖說明】
[0035]圖1為CPU與GPU的架構對比示意圖。
[0036]圖2為一種服務器的結構框圖。
[0037]圖3為圖2的服務器中GPU的連接結構示意圖。
[0038]圖4為單GPU數據處理與多GPU并行數據處理流程對比示意圖。
[0039]圖5為本發(fā)明實施例提供的數據處理方法控制流程圖。
[0040]圖6為本發(fā)明實施例提供的數據處理方法中數據在不同存儲器間存取示意圖。
[0041]圖7為本發(fā)明實施例提供的數據處理方法運行時間利用效率示意圖。
[0042]圖8為卷積神經網絡模型訓練過程中梯度及參數更新示意圖。
[0043]圖9-11為本發(fā)明實施例提供的數據處理方法中參數交換示意圖。
[0044]圖12為本發(fā)明實施例提供的數據處理方法中工作組劃分示意圖。
[0045]圖13為卷積神經網絡的多層次模型示意圖。
[0046]圖14為單GPU單模型數據處理與多GPU單模型數據處理的對比示意圖。
[0047]圖15為本發(fā)明實施例提供的數據處理方法控制流程圖。
[0048]圖16為卷積神經網絡的多層次模型示意圖。
[0049]圖17為本發(fā)明實施人列提供的數據處理方法中在不同GPU之間傳輸數據的示意圖。
[0050]圖18為第一實施例提供的數據處理方法流程圖。
[0051]圖19為第二實施例提供的數據處理方法流程圖。[0052]圖20為第三實施例提供的數據處理方法流程圖。
[0053]圖21為第四實施例提供的數據處理方法流程圖。
[0054]圖22為第五實施例提供的數據處理方法流程圖。
[0055]圖23為第六實施例提供的數據處理方法流程圖。
[0056]圖24為第七實施例提供的數據處理方法流程圖。
[0057]圖25為第八實施例提供的數據處理裝置的模塊圖。
[0058]圖26為第九實施例提供的數據處理裝置的模塊圖。
[0059]圖27為第十實施例提供的數據處理裝置的模塊圖。
[0060]圖28為第十一實施例提供的數據處理裝置的模塊圖。
[0061]圖29為第十二實施例提供的數據處理裝置的模塊圖。
[0062]圖30為第十三實施例提供的數據處理裝置的模塊圖。
[0063]圖31為第十四實施例提供的數據處理裝置的模塊圖。
【具體實施方式】
[0064]為更進一步闡述本發(fā)明為實現預定發(fā)明目的所采取的技術手段及功效,以下結合附圖及較佳實施例,對依據本發(fā)明的【具體實施方式】、結構、特征及其功效,詳細說明如后。
[0065]圖2示出了一種計算機或者服務器的結構框圖。如圖2所示,服務器100包括存儲器102、一個或多個處理器104、存儲控制器106、外設接口 108、以及一個或多個GPU 110??梢岳斫?,圖2所示的結構僅為示意,其并不對服務器100的結構造成限定。例如,服務器100還可包括比圖2中所示更多或者更少的組件,或者具有與圖2所示不同的配置。
[0066]存儲器102可用于存儲軟件程序以及模塊,如本發(fā)明實施例中的即使通訊會話的方法及裝置對應的程序指令/模塊,處理器104通過運行存儲在存儲器102內的軟件程序以及模塊,從而執(zhí)行各種功能應用以及數據處理,即實現上述的方法。
[0067]存儲器102可包括高速隨機存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實例中,存儲器102可進一步包括相對于處理器106遠程設置的存儲器,這些遠程存儲器可以通過網絡連接至電子終端100。上述網絡的實例包括但不限于互聯網、企業(yè)內部網、局域網、移動通信網及其組合。處理器106以及其他可能的組件對存儲器102的訪問可在存儲控制器104的控制下進行。
[0068]外設接口 108將各種輸入/輸入裝置耦合至處理器106。處理器106運行存儲器102內的各種軟件指令計算機100執(zhí)行各種功能以及進行數據處理。在一些實施例中,外設接口 108、處理器106以及存儲控制器104可以在單個芯片中實現。在其他一些實例中,他們可以分別由獨立的芯片實現。
[0069]GPU 110 通過外設接 口 總線,例如 PCIe (Peripheral Component InterconnectExpress,周邊裝置高速互聯接口)總線,連接至處理器104。在一個具體的實例中,服務器100包括多個(如2個)處理器104以及多個(如8個)GPU 110。圖3為該具體實例GPU 110與處理器104的連結架構示意圖。兩個處理器104 (CPU O與CPU I)以及一個I/O集線器(I/O Hub)三者之間相互通過英特爾公司(Intel)的快速互聯通道(Quick-PathInterconnect, QPI)方式相聯。而I/O集線器連接有兩個PCIe交換器,而每個PCIe交換器再分別連接兩個PCIe交換器,位于末端的PCIe交換器每個接入兩個GPU,因此I/O集線器實質上將8個GPU接入總線中。可以理解,GPU的數目或者PCIe交換器的數目并不限于圖3所示,其還可包括更多或得更少的GPU。
[0070]在實際生產環(huán)境中,安裝多GPU計算機的硬件體系結構如圖3所示,示例中揭示了一個8 GPU節(jié)點計算機的硬件配置,每兩個GPU插槽安裝在一個GPU專用PCI槽位上再通過PCIe交換器將GPU插槽0、1、2、3安裝在一顆CPU上,GPU插槽4、5、6、7安裝在另一顆CPU上,兩顆CPU通過1H連接。
[0071]上述的軟件程序以及模塊包括:操作系統122以及數據處理模塊124。其中操作系統122例如可為LINUX, UNIX, WINDOWS或者其他任意可用的操作系統,操作系統122可包括各種用于管理系統任務(例如內存管理、存儲設備控制、電源管理等)的軟件組件和/或驅動,并可與各種硬件或軟件組件相互通訊,從而提供其他軟件組件的運行環(huán)境。并行數據處理模塊124運行在操作系統122的基礎上,用于實現本發(fā)明實施例提供的并行數據處理方法。
[0072]圖4揭示了從單GPU訓練到多GPU數據并行訓練的相異之處主要在于:單GPU每個訓練周期只能訓練I個最小批次(min1-batch),最小批次訓練結束后即順帶完成了更新模型參數的操作;在多個GPU同時訓練多組最小批次數據,每個數據并行組充分利用分配在本組上獨占的GPU計算資源,在最小批次訓練結束時還需要一個將參數從各個GPU上交換并更新的過程,最終使得每個GPU上都持有最新模型副本,繼續(xù)進行下一輪訓練過程。
[0073]訓練數據分發(fā)是在CPU中開始的,而具體的訓練操作由GPU工作組執(zhí)行。每個GPU工作組包括一個或者多個GPU。由于GPU卡通常意義上被看成是一種加速卡或協處理器卡,必須在基于CPU的主機上下文中被調用來做計算,也就是說,在GPU中的數據并行訓練的調度要基于CPU中的線程實現。為了發(fā)揮多GPU共同參與計算時的并行性效能,可將一個GPU綁定至一個CPU線程(工作線程,也叫Worker),然后在CPU上下文中通過這 些CPU線程實現數據并行訓練的調度。在一個實例中,CPU線程與GPU以及GPU工作組之間的綁定關系如表1所不。
[0074]表1 4GPU數據并行CPU線程、GPU卡與工作組綁定關系
[0075]
【權利要求】
1.一種基于多圖形處理器(GPU)的并行數據處理方法,其特征在于,所述方法包括以下步驟: 在中央處理器(CPU)內創(chuàng)建用于分別控制多個工作組(Worker Group)的多個工作線程(Worker),所述工作組包括多個GPU ; 將每個工作線程與對應的一個GPU綁定; 從非易失性存儲器內加載一個批次(Batch)的訓練數據至與一個工作組對應的一個GPU顯存中; 在對應于一個工作組的多個GPU之間以點對點(PeertoPeer)的方式傳輸GPU進行數據處理所需要的數據; 通過所述工作線程控制所述多個GPU并行進行數據處理。
2.如權利要求1所述的方法,其特征在于,所述方法還包括以下步驟: 創(chuàng)建I個I/O線程,通過所述I/O線程將所述多個批次(Batch)的訓練數據加載至隨機存儲器內;以及 通過線程池在CPU上對訓練數據進行預處理,所述I/O線程、線程池內的線程、工作線程以及GPU內的數據處理是并行進行的。
3.如權利要求1所述的方法,其特征在于,所述方法還包括以下步驟: 根據GPU的數目2N將每個GPU內存儲模型參數及梯度的存儲區(qū)域分成N個分區(qū); 給定2N個GPU的序號分別為0、1、2...2Ν-1 ; 在序號為k(k為整數且2N-1)的周期內,將該N個分區(qū)中一個給定的分區(qū)從序號為i的GPU中復制至序號為j的GPU中,并進行梯度的合并,其中i = (2m+k+l) % N,j = (2m+k+2) % N,m為整數且O≤m≤N_1 ;以及 對于所述的2N個GPU中的分區(qū)所有者,根據對應的分區(qū)內梯度合并結果更新模型參數,其中所述的分區(qū)所有者指對于給定的分區(qū),具有其他所有GPU中梯度歸并結果的GPU。
4.如權利要求3所述的方法,其特征在于,所述方法還包括以下步驟: 在序號為k的周期內,將該N個分區(qū)中一個給定的分區(qū)從序號為a的GPU中復制至序號為 b 的 GPU 中,其中 a = (2m+k) % N, b = (2m+k+l) % N。
5.如權利要求3所述的方法,其特征在于,所述方法還包括以下步驟: 對于分區(qū)所有者,根據以下自適應學習率更新公式計算在位置i上參數的學習率Iearningjatei:
6.如權利要求1所述的方法,其特征在于,所述方法還包括以下步驟: 根據卷積神經網絡的模型配置文件加載其層次模型;以及 若識別到所述層次模型中鄰接的兩層由不同的GPU完成則在所述鄰接的兩層之間加入數據傳輸層,所述傳輸層用于執(zhí)行所述在對應于一個工作組的多個GPU之間以點對點方式傳輸GPU進行數據處理所需要的數據的步驟。
7.如權利要求1所述的方法,其特征在于,所述方法還包括以下步驟: 在隨機存儲器(RAM)內開辟寫緩存與讀緩存,所述寫緩存與讀緩存的大小為用于存儲一個批次的訓練數據的存儲結構的大小*工作組總數; 在所述寫緩存被寫滿之前使所有工作線程處理處于阻止(barrier)狀態(tài);以及 在所述寫緩存被寫滿之后將預先設置的指向所述寫緩存與讀緩存的索引交換。
8.如權利要求1所述的方法,其特征在于,所述通過所述工作線程控制所述多個GPU并行進行數據處理包括:通過所述工作線程控制同一工作組內的多個GPU分別訓練同一模型的不同部分。
9.一種基于多圖形處理器(GPU)的數據并行處理裝置,其特征在于,所述裝置包括: 線程創(chuàng)建模塊,用于在中央處理器(CPU)內創(chuàng)建用于分別控制多個工作組(WorkerGroup)的多個工作線程(Worker),所述工作組包括多個GPU ; 線程綁定模塊,用于將每個工作線程與對應的一個GPU綁定; 數據分發(fā)模塊,用于從非易失性存儲器內加載一個批次(Batch)的訓練數據至與一個工作組對應的一個GPU顯存中; 傳輸模塊,用于在對應于一個工作組的多個GPU之間以點對點方式傳輸GPU進行數據處理所需要的數據;以及 數據處理控制模塊,通過所述工作線程控制所述多個GPU并行進行數據處理。
10.如權利要求9所述的裝置,其特征在于,所述線程創(chuàng)建模塊還用于創(chuàng)建I個I/O線程,通過所述I/o線程將所述多個批次(Batch)的訓練數據加載至隨機存儲器內;以及 數據處理模塊,用于通過線程池在CPU上對訓練數據進行預處理; 所述I/O線程、線程池內的線程、工作線程以及GPU內的數據處理是并行進行的。
11.如權利要求9所述的裝置,其特征在于,所述裝置還包括參數交換模塊,用于: 根據GPU的數目2N將每個GPU內存儲模型參數及梯度的存儲區(qū)域分成N個分區(qū); 給定2N個GPU的序號分別為0、1、2...2Ν-1 ; 在序號為k(k為整數且2N-1)的周期內,將該N個分區(qū)中一個給定的分區(qū)從序號為i的GPU中復制至序號為j的GPU中,并進行梯度的合并,其中i = (2m+k+l) % N,j = (2m+k+2) % N,m為整數且O≤m≤N_1 ;以及 對于所述的2N個GPU中的分區(qū)所有者,根據對應的分區(qū)內梯度合并結果更新模型參數,其中所述的分區(qū)所有者指對于給定的分區(qū),具有其他所有GPU中梯度歸并結果的GPU。
12.如權利要求11所述的裝置,其特征在于,所述參數交換模塊還用于: 在序號為k的周期內,將該N個分區(qū)中一個給定的分區(qū)從序號為a的GPU中復制至序號為 b 的 GPU 中,其中 a = (2m+k) % N, b = (2m+k+l) % N。
13.如權利要求11所述的裝置,其特征在于,自適應學習率更新模塊,用于: 對于分區(qū)所有者,根據以下自適應學習率更新公式計算在位置i上參數的學習率Iearning^atei:
14.如權利要求9所述的裝置,其特征在于,所述裝置還包括: 配置加載模塊,用于根據卷積神經網絡的模型配置文件加載其層次模型;以及 傳輸層創(chuàng)建模塊,用于若識別到所述層次模型中鄰接的兩層由不同的GPU完成則在所述鄰接的兩層之間加入數據傳輸層,用于在兩個GPU之間以點對點方式傳輸GPU進行數據處理所需要的數據。
15.如權利要求9所述的裝置,其特征在于,所述裝置還包括: 緩存創(chuàng)建模塊,用于在隨機存儲器內開辟寫緩存與讀緩存,所述寫緩存與讀緩存的大小為用于存儲一個批次的訓練數據的存儲結構的大小*工作組總數; 線程阻止模塊(barrier),用于在所述寫緩存被寫滿之前使所有工作線程處理處于阻止狀態(tài);以及 緩存交換模塊,用于在所述寫緩存被寫滿之后將預先設置的指向所述寫緩存與讀緩存的索引交換。
16.如權利要求9所述的裝置,其特征在于,所述數據處理控制模塊用于:通過所述工作線程控制同一工作組內的多個GPU分別訓練同一模型的不同部分。
【文檔編號】G06T1/40GK104036451SQ201410281130
【公開日】2014年9月10日 申請日期:2014年6月20日 優(yōu)先權日:2014年6月20日
【發(fā)明者】鄒永強, 李毅, 金涬, 肖斌, 郭志懋, 薛偉, 陳波, 李勇, 肖磊 申請人:深圳市騰訊計算機系統有限公司