多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 互聯(lián)網(wǎng) > 深度神經(jīng)網(wǎng)絡(luò)DNN的多GPU數(shù)據(jù)并行框架 及其在語音識別的應(yīng)用

深度神經(jīng)網(wǎng)絡(luò)DNN的多GPU數(shù)據(jù)并行框架 及其在語音識別的應(yīng)用

來源:程序員人生   發(fā)布時間:2014-09-16 04:08:15 閱讀次數(shù):2248次

深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Networks, 簡稱DNN)是近年來機(jī)器學(xué)習(xí)領(lǐng)域中的研究熱點,產(chǎn)生了廣泛的應(yīng)用。DNN具有深層結(jié)構(gòu)、數(shù)千萬參數(shù)需要學(xué)習(xí),導(dǎo)致訓(xùn)練非常耗時。GPU有強(qiáng)大的計算能力,適合于加速深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練。DNN的單機(jī)多GPU數(shù)據(jù)并行框架是騰訊深度學(xué)習(xí)平臺的一部分,騰訊深度學(xué)習(xí)平臺技術(shù)團(tuán)隊實現(xiàn)了數(shù)據(jù)并行技術(shù)加速DNN訓(xùn)練,提供公用算法簡化實驗過程。對微信語音識別應(yīng)用,在模型收斂速度和模型性能上都取得了有效提升――相比單GPU 4.6倍加速比,數(shù)十億樣本的訓(xùn)練數(shù)天收斂,測試集字錯率降低約10%。目前基于此框架訓(xùn)練的模型成功上線到微信語音輸入法、微信語音開放平臺和微信語音消息轉(zhuǎn)文字。

1.DNN數(shù)據(jù)并行導(dǎo)論

1.1.典型應(yīng)用分析:語音識別

語音識別是深度神經(jīng)網(wǎng)絡(luò)獲得成功的一個應(yīng)用范例。

語音識別應(yīng)用,簡單來說由聲學(xué)模型建模,語言模型建模以及解碼三部分構(gòu)成。其中聲學(xué)模型用來模擬發(fā)音的概率分布,語言模型用來模擬詞語之間的關(guān)聯(lián)關(guān)系,而解碼階段就是利用上述兩個模型,將聲音轉(zhuǎn)化為文本。神經(jīng)網(wǎng)絡(luò)具有模擬任何分布的能力,深度神經(jīng)網(wǎng)絡(luò)比淺層神經(jīng)網(wǎng)絡(luò)表達(dá)能力更強(qiáng),它模擬了人腦的深層結(jié)構(gòu),能夠更準(zhǔn)確地“理解”事物的特征。因此相較于其他方法,深度神經(jīng)網(wǎng)絡(luò)可以更為準(zhǔn)確地模擬聲學(xué)模型和語言模型。這里將深度神經(jīng)網(wǎng)絡(luò)應(yīng)用于語音識別中的聲學(xué)模型建模。

圖 1揭示了一個深度神經(jīng)網(wǎng)絡(luò)表達(dá)的具有4個隱藏層的聲學(xué)模型結(jié)構(gòu),訓(xùn)練這樣的具有深層結(jié)構(gòu)的模型,其優(yōu)勢在于逐層的特征學(xué)習(xí)過程是由初級到高級的過程:第一層學(xué)習(xí)初始特征(例如最基本的發(fā)聲),在后面的層次逐漸學(xué)習(xí)到越來越高級的特征(例如聲音的組合),直到通過模型的輸出層來有效地識別聲音。

1.2.現(xiàn)有的加速方法

騰訊深度學(xué)習(xí)平臺技術(shù)團(tuán)隊在語音識別研究中率先引入了GPU技術(shù)用于DNN訓(xùn)練,獲得了良好的成果,相比單臺CPU服務(wù)器達(dá)到千倍加速比。隨著訓(xùn)練數(shù)據(jù)集擴(kuò)充、模型復(fù)雜度增加,即使采用GPU加速,在實驗過程中也存在著嚴(yán)重的性能不足,往往需要數(shù)周時間才能達(dá)到模型的收斂,不能滿足對于訓(xùn)練大規(guī)模網(wǎng)絡(luò)、開展更多試驗的需求。目前服務(wù)器上安裝多個GPU卡已經(jīng)非常普遍,在通用計算領(lǐng)域使用多GPU并行加速技術(shù)擴(kuò)展計算密集型應(yīng)用程序的并行性、提高程序性能也是越來越熱門的發(fā)展方向。

由于語音業(yè)務(wù)中DNN模型采用多層全連接的網(wǎng)絡(luò)結(jié)構(gòu),騰訊深度學(xué)習(xí)平臺技術(shù)團(tuán)隊在單機(jī)多GPU模型并行的實踐中發(fā)現(xiàn)拆分其模型存在較大的額外開銷,無論采用普通模型拆分還是流式控制,擴(kuò)展性有限:相比GPU的計算能力,如果模型參數(shù)量不能匹配,模型并行不能有效地利用多個高計算能力的GPU卡,表現(xiàn)為使用2GPU時已有較好的性能提升,但使用更多GPU卻無法取得更好效果。

騰訊深度學(xué)習(xí)平臺技術(shù)團(tuán)隊考慮到上述問題,在騰訊深度學(xué)習(xí)平臺的DNN多GPU并行訓(xùn)練框架中,選擇了數(shù)據(jù)并行的技術(shù)路線,完成了升級版的單機(jī)多GPU數(shù)據(jù)并行版本。

本文描述了多GPU加速深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練系統(tǒng)的數(shù)據(jù)并行實現(xiàn)方法及其性能優(yōu)化,依托多GPU的強(qiáng)大協(xié)同并行計算能力,結(jié)合數(shù)據(jù)并行特點,實現(xiàn)快速高效的深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練。

1.3.框架設(shè)計目標(biāo)

由于訓(xùn)練深層網(wǎng)絡(luò)使用的訓(xùn)練數(shù)據(jù)規(guī)模龐大、計算開銷大,從而訓(xùn)練過程收斂難,訓(xùn)練用時久,通過開發(fā)多GPU數(shù)據(jù)并行版本期望達(dá)到下述目標(biāo):充分利用單機(jī)多GPU計算資源和DNN的數(shù)據(jù)并行特性,加速模型訓(xùn)練過程;提供默認(rèn)的深度學(xué)習(xí)算法實現(xiàn),以幫助提升語音識別準(zhǔn)確率;提供更好的易用性支持,方便進(jìn)行模型訓(xùn)練。

上述目標(biāo)完成后,系統(tǒng)可以支持目標(biāo)模型的快速訓(xùn)練,達(dá)到更好的收斂效果。另外,作為深度學(xué)習(xí)平臺中的DNN數(shù)據(jù)并行框架,其訓(xùn)練算法具有一定的通用性,可通過簡單配置快速適用于其他DNN應(yīng)用場景中。

1.4.挑戰(zhàn)

在語音識別應(yīng)用中,深度模型包含數(shù)萬神經(jīng)元,采用全連接結(jié)構(gòu),具有數(shù)千萬參數(shù)需要訓(xùn)練,計算量大;需要海量語音數(shù)據(jù)進(jìn)行訓(xùn)練,在避免過擬合的前提下提高模型準(zhǔn)確率、提高模型泛化能力。因此,如何充分利用計算資源實施數(shù)據(jù)并行以加速訓(xùn)練是框架設(shè)計首要解決的問題。

數(shù)據(jù)并行中參數(shù)交換容易成為整體性能瓶頸,因為在參數(shù)交換時需要將各個Model Replica在本次mini-batch訓(xùn)練中得到的梯度合并后用于更新參數(shù)服務(wù)器上的模型,之后再將最新模型推送到各個數(shù)據(jù)并行單元上用于下一輪計算。如何解決參數(shù)交換瓶頸以提高性能,成為并行方法設(shè)計的重中之重。

自適應(yīng)學(xué)習(xí)率算法對于隨機(jī)梯度下降(Stochastic Gradient Descent, 簡稱SGD)過程有利于加速收斂并獲得更好的結(jié)果。但是它需要對模型中每個參數(shù)存儲helper_sum并頻繁更新對應(yīng)的學(xué)習(xí)率,影響性能。因此,如何將其有效地應(yīng)用到數(shù)據(jù)并行框架中,是我們所需要解決的另一個重點問題。

2.系統(tǒng)概述

如何數(shù)據(jù)并行?

數(shù)據(jù)并行:指對源數(shù)據(jù)集合中的元素同時(即并行)執(zhí)行相同操作的情況。在數(shù)據(jù)并行操作中,將對源數(shù)據(jù)集合進(jìn)行分區(qū),以便多個并行處理單元能夠同時對不同的子數(shù)據(jù)集合進(jìn)行操作。

圖2揭示了從單GPU訓(xùn)練到多GPU數(shù)據(jù)并行訓(xùn)練的變化,主要在于:單GPU每個周期訓(xùn)練1個mini-batch,mini-batch訓(xùn)練結(jié)束后即順帶在GPU顯存中完成了更新模型參數(shù)的操作;在多個GPU同時訓(xùn)練多組mini-batch數(shù)據(jù),每個數(shù)據(jù)并行組(Worker Group)充分利用本組上獨占的GPU資源,在mini-batch訓(xùn)練結(jié)束時還需要一個將參數(shù)從各個GPU上交換并更新的過程,最終使得每個GPU上都持有最新模型副本,繼續(xù)進(jìn)行下一個周期訓(xùn)練過程。

多GPU并行系統(tǒng)從功能上劃分為用于讀取和分發(fā)數(shù)據(jù)的Training Data Dispatcher和用于做數(shù)據(jù)并行訓(xùn)練的GPU Worker Group,如圖3所示。訓(xùn)練數(shù)據(jù)從磁盤文件讀取到CPU主存再拷貝到GPU顯存,故此設(shè)計在各Worker Group計算每batch數(shù)據(jù)時,由Training Data Dispatcher從文件中讀取并分發(fā)下一batch數(shù)據(jù),以達(dá)到用計算時間掩蓋I/O時間的設(shè)計目標(biāo)。

3.GPU Worker Group: 數(shù)據(jù)并行的承載體

數(shù)據(jù)并行以Worker Group為基本組織形式,調(diào)度來源于CPU,計算資源來源于GPU卡。GPU卡通常被看成是加速卡或協(xié)處理器卡,必須在基于CPU的主機(jī)上下文中被調(diào)用來做計算,因此1個CPU線程綁定1個Worker Group中的1張GPU卡能夠發(fā)揮多GPU的并行效能。

在實際生產(chǎn)環(huán)境中,安裝多GPU服務(wù)器的硬件體系結(jié)構(gòu)如圖4所示,示例中揭示了一個8 GPU節(jié)點服務(wù)器的硬件配置,每兩個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)連接。

在數(shù)據(jù)并行的場景下,將每顆GPU綁定一個Worker Group,即形成8路數(shù)據(jù)并行的并行化訓(xùn)練配置。

4.數(shù)據(jù)并行中參數(shù)交換的線形拓?fù)?/strong>

4.1.數(shù)據(jù)并行的關(guān)鍵問題:參數(shù)交換是瓶頸

使用基于mini-batch的隨機(jī)梯度下降算法時,每計算完成1個mini-batch后需要將本次計算得到梯度(圖中記為Δw)應(yīng)用到相應(yīng)參數(shù)(圖中記為w)上,樸素的參數(shù)更新公式為:

公式中,i是參數(shù)更新的次數(shù),weight指代某個參數(shù),ε是學(xué)習(xí)速率,Δw是本次BP計算出的梯度。

在數(shù)據(jù)并行的實現(xiàn)中,影響性能的瓶頸在于多GPU間的參數(shù)交換。這是因為按照參數(shù)更新公式來看,需要將所有模型replica的梯度交換到參數(shù)服務(wù)器并更新到相應(yīng)參數(shù)上,而參數(shù)服務(wù)器的帶寬成為瓶頸。

最優(yōu)化的參數(shù)交換解決方案應(yīng)具有的特征:盡量減少總的通信量;盡量減少所用交換周期數(shù);每個周期用滿PCIe總線通信帶寬;GPU間數(shù)據(jù)傳輸沒有等待;可擴(kuò)展性強(qiáng),適用于不同GPU數(shù)目的場景。

4.2.常見的解法

解決這一問題,直觀的想法是依靠多GPU之間點到點的數(shù)據(jù)傳輸,即在每兩個GPU之間建立數(shù)據(jù)傳輸連接,交換各自的ΔW。但是這樣的解決方案提升的性能有限,主要在于任一GPU上計算出的ΔW在PCIe總線上需要多次傳輸才能更新到所有GPU的參數(shù)模型上,過多占用和消耗PCIe總線帶寬。而隨著GPU數(shù)增多,交換時間隨之呈平方量級增加,這無疑是不適合的。

另一種常見思路是采用分治法+樹形結(jié)構(gòu),為此可設(shè)計樹形拓?fù)洌耗P?分片,奇/偶Worker Group負(fù)責(zé)歸并模型不同分片,Worker Group間總是兩兩歸并;當(dāng)最終將2個分片歸并結(jié)束后,開始反向的分發(fā)過程。但在多GPU場景下這種也存在著局限,主要在于每個歸并周期后,總有一半GPU不再參與之后的歸并過程,閑置了其計算能力和所在節(jié)點上的通信帶寬。

4.3.當(dāng)前最優(yōu)解:線形拓?fù)?/strong>

我們針對多GPU場景設(shè)計了參數(shù)交換的線形拓?fù)洌?/p>

線形拓?fù)鋸目臻g上來看,如圖6所示,將存儲參數(shù)的矩陣、存儲梯度的矩陣等量劃分了Partition,Partition數(shù)量是Worker Group數(shù)的一半。令持有某一Partition最終累加結(jié)果的Worker Group(一般為Group ID為奇數(shù)的GPU),稱之為該Partition的Partition Owner。對該Partition的更新參數(shù)操作會在該Partition Owner上執(zhí)行,同時該Partition最新參數(shù)的分發(fā)過程也由該Partition Owner發(fā)起。

線形拓?fù)鋸臅r間上來看,如圖7所示,將參數(shù)交換過程劃分了周期,每個周期內(nèi)將所有Partition從上游Worker Group向下游Worker Group推送一次,推送過程包括從上游Worker Group拷貝Partition數(shù)據(jù)和本地Merge兩步操作,推送階段的最后1個周期推送該Partition到Partition Owner上以使其持有參數(shù)的最新副本。推送所用周期數(shù)為數(shù)據(jù)并行組數(shù)-1。

之后參數(shù)分發(fā)過程,亦占用與推送相同的周期數(shù)分發(fā)Partition Owner上的最新副本給所有Worker Group。

我們比較容易給出線形拓?fù)涞男阅苣P汀CIe總線帶寬一定(設(shè)為W),取數(shù)據(jù)并行的Worker Group數(shù)目為2N,模型大小為M。在采用點到點全量參數(shù)交換的情景下,每兩個Worker Group均需要進(jìn)行對等的數(shù)據(jù)交換,因此數(shù)據(jù)傳輸?shù)淖疃讨芷跒?*(2N-1)次,每次在總線上傳輸數(shù)據(jù)量為M,故推導(dǎo)出參數(shù)交換用時2*(2N-1)*(M/W)。在采用線形拓?fù)涞那榫跋拢诿總€組號為單數(shù)(1,3,5,…)的組上維護(hù)著整個模型參數(shù)相應(yīng)的1/N,按照線形拓?fù)洌瑔未螖?shù)據(jù)交換中只傳輸了(1/N)* M的數(shù)據(jù)量,參數(shù)歸并周期為2N-1,參數(shù)分發(fā)周期也為2N-1,因此推導(dǎo)出參數(shù)交換用時為2*(2N-1)*(M/(N*W)),僅是點到點用時的1/N(N=1,2,3,…)。可見,數(shù)據(jù)并行的并發(fā)量越大,線形拓?fù)涞男阅苁找嫘Ч斤@著。

線形拓?fù)淇梢院苋菀椎財U(kuò)展到偶數(shù)個數(shù)據(jù)并行組的參數(shù)交換,其收集(推送)用時隨數(shù)據(jù)并行組數(shù)增長而緩慢增長,且具有上界――2T0,這說明線形拓?fù)浞浅_m用于更多GPU做數(shù)據(jù)并行。

5.多GPU數(shù)據(jù)并行的自適應(yīng)學(xué)習(xí)率(AdaGrad)算法

應(yīng)用自適應(yīng)學(xué)習(xí)率算法,對第i個位置上參數(shù)的學(xué)習(xí)率更新,需要借助helper_sum,其定義如下:

在數(shù)據(jù)并行情景下,helper_sum的跨組更新規(guī)則與的數(shù)據(jù)并行參數(shù)交換過程中的推送階段完全相同,由于梯度是在Partition Owner上最先持有的完全累積結(jié)果,可以根據(jù)Adagrad參數(shù)更新公式Apply到參數(shù)上,而這時只用到了Partition Owner上的helper_sum,因此只需要在Partition Owner上持有其“Own”的Partition的最新helper_sum即可,其它非Partition Owner在推送之后即需要將helper_sum清零,以便為下一次計算重新累積所用。由于helper_sum不需要分發(fā),則交換helper_sum的過程只需要一次推送階段即可完成。

結(jié)合Adagrad算法實際應(yīng)用場景:即helper_sum的累積其實是對每個學(xué)習(xí)率調(diào)整的量化過程,其本身具有一定的近似性。基于性能考量,實際項目中使用一種近似的helper_sum收集:在每個mini-batch結(jié)束后所有partition上做本地累積helper_sum計算,而在M個mini-batch結(jié)束后才將其推送到所屬的Partition Owner完成最終累積。這樣兼顧了算法效果和訓(xùn)練性能。

6.在語音識別上的應(yīng)用

6.1.微信語音識別產(chǎn)品

微信中主要有三款語音識別產(chǎn)品:微信語音輸入法、語音開放平臺和語音消息轉(zhuǎn)文字。多GPU數(shù)據(jù)并行框架訓(xùn)練的模型正在由這些產(chǎn)品使用。

6.2.模型訓(xùn)練實驗性能

實驗環(huán)境為一臺搭載8核心Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz的服務(wù)器,內(nèi)存為48GB,服務(wù)器安裝了6塊NVIDIA Tesla K20c GPU,單GPU顯存大小為4.8GB。

訓(xùn)練同樣的語音目標(biāo)模型,相比于單GPU,使用6GPU數(shù)據(jù)并行獲得了4.6倍加速比。

6.3.模型準(zhǔn)確率

采用6 GPU數(shù)據(jù)并行,使用數(shù)十億語音訓(xùn)練樣本,在訓(xùn)練目標(biāo)模型的實驗中,數(shù)個迭代時取得了在測試集上的最佳模型,取得了10%的字錯率降低。同時相比模型并行訓(xùn)練,基于數(shù)據(jù)并行的騰訊深度學(xué)習(xí)平臺可在數(shù)天內(nèi)完成DNN模型訓(xùn)練。

6.4.易用性

框架提供良好的易用性支持,主要在于實驗者不需要過多干預(yù)訓(xùn)練過程即可完成訓(xùn)練,實時獲知訓(xùn)練進(jìn)度和模型準(zhǔn)確率等信息。框架主要的易用性支持包括:重要配置參數(shù)在運行時可手工改變,可自動衰減;按指定頻率輸出模型snapshot并進(jìn)行自動化測試;訓(xùn)練中斷點恢復(fù),可從任意模型snapshot繼續(xù)訓(xùn)練;微信監(jiān)控帳號自動向?qū)嶒炚咄扑蜏y試結(jié)果。

7.結(jié)論

本文描述了深度神經(jīng)網(wǎng)絡(luò)DNN的多GPU數(shù)據(jù)并行框架,通過多個Worker Group實現(xiàn)了數(shù)據(jù)并行,設(shè)計線形拓?fù)浣鉀Q了參數(shù)交換性能瓶頸,實現(xiàn)了數(shù)據(jù)并行場景下的近似自適應(yīng)學(xué)習(xí)率算法。此框架有效支持了微信語音識別,成功提升了微信語音識別的模型訓(xùn)練速度,并且模型字錯率降低10%,模型全量上線到微信語音輸入法、微信語音開放平臺和微信語音消息轉(zhuǎn)文字。


免費訂閱“CSDN云計算”微信公眾號,實時掌握第一手云中消息!

CSDN作為國內(nèi)最專業(yè)的云計算服務(wù)平臺,提供云計算、大數(shù)據(jù)、虛擬化、數(shù)據(jù)中心、OpenStack、CloudStack、Hadoop、Spark、機(jī)器學(xué)習(xí)、智能算法等相關(guān)云計算觀點,云計算技術(shù),云計算平臺,云計算實踐,云計算產(chǎn)業(yè)資訊等服務(wù)。


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 最近最新中文字幕免费高清1 | 欧美天堂视频 | 免费一级做a爰片久久毛片潮喷 | 亚洲精品一区二区三区在 | 一区二区三区在线观看视频 | 久久成人乱小说 | 成人午夜精品网站在线观看 | 男女激情动态视频 | 亚洲最大中文字幕 | 亚洲乱搞| 中文亚洲动漫精品 | 欧美三级久久 | 欧美最猛黑人xxxx | 国产91高跟丝袜 | 爱爱视频日本 | 视频免费 | 国产成人精品一区二三区2022 | 国产精品老女人精品视 | 国产精品96久久久久久久 | 嗯啊羞羞视频在线观看动漫 | 清纯唯美亚洲综合五月天 | 国产一区二区三区免费在线视频 | 国产激情一区二区三区四区 | 香蕉在线视频网站 | 欧美成人一区二区 | 国产美女亚洲精品久久久毛片 | 手机看片福利日韩 | 4日本私人vps生活大片 | 国产一级淫片免费大片 | a毛片免费 | 国产人成精品综合欧美成人 | 久久99精品久久久久久野外 | 亚洲三级网址 | 校园春色 亚洲色图 | 午夜毛片福利 | 亚洲最大色视频 | a级午夜 | 在线观看视频在线 | 看全色黄大色大片免费久久久 | 亚洲毛片免费在线观看 | 理论片亚洲 |