国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

循環(huán)神經(jīng)網(wǎng)絡(luò)在語(yǔ)音識(shí)別模型中的訓(xùn)練加速方法

2019-01-24 08:26馮詩(shī)影韓文廷遲孟賢
關(guān)鍵詞:步長(zhǎng)內(nèi)存長(zhǎng)度

馮詩(shī)影,韓文廷,金 旭,遲孟賢,安 虹

(中國(guó)科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,合肥 230027)

1 引 言

作為對(duì)傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的一種改進(jìn),循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)引入反饋機(jī)制,在解決如自然語(yǔ)言處理等序列問(wèn)題方面取得了巨大的成功,例如語(yǔ)音識(shí)別[1],語(yǔ)言模型[2],以及機(jī)器翻譯[3]等.伴隨問(wèn)題更加復(fù)雜,以及對(duì)訓(xùn)練精度要求不斷提高,模型中神經(jīng)網(wǎng)絡(luò)層數(shù)不斷增多,規(guī)模越來(lái)越大.如今,大多數(shù)神經(jīng)網(wǎng)絡(luò)使用GPU或FPGA等加速卡進(jìn)行訓(xùn)練.然而,隨著神經(jīng)網(wǎng)絡(luò)規(guī)模的不斷擴(kuò)大,片上有限的存儲(chǔ)空間逐漸成為訓(xùn)練大規(guī)模模型的瓶頸.目前已有許多工作用于加速神經(jīng)網(wǎng)絡(luò)訓(xùn)練,例如cuDNN——NVIDIA專(zhuān)用深度學(xué)習(xí)加速庫(kù)[4],或分布式機(jī)器學(xué)習(xí)技術(shù)[5],但是如果沒(méi)有有效利用計(jì)算資源,加速器的最佳性能同樣不能被最大化發(fā)掘.

本文提出了一種基于循環(huán)神經(jīng)網(wǎng)絡(luò)的語(yǔ)音識(shí)別(ASR)模型加速訓(xùn)練方法.首先,從訓(xùn)練集中獲取序列長(zhǎng)度分布,根據(jù)可利用內(nèi)存空間確定存儲(chǔ)的不同大小模型數(shù),并對(duì)每批次訓(xùn)練樣本進(jìn)行補(bǔ)零對(duì)齊.其次,平衡存儲(chǔ)空間與訓(xùn)練時(shí)間,通過(guò)高效利用顯存,達(dá)到在相同存儲(chǔ)空間下一次訓(xùn)練更多樣本,充分利用計(jì)算資源,提升計(jì)算效率.實(shí)驗(yàn)表明,該方法有效地提升了訓(xùn)練速度,且保證無(wú)精度損失.

2 相關(guān)工作

2.1 循環(huán)神經(jīng)網(wǎng)絡(luò)

循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)基于傳統(tǒng)神經(jīng)網(wǎng)絡(luò),在隱藏層之間增加了反饋連接.由于其反饋機(jī)制,RNN具有記憶過(guò)去狀態(tài)的能力,因此在處理具有時(shí)間相關(guān)性的序列數(shù)據(jù)中有良好表現(xiàn).一個(gè)簡(jiǎn)單的循環(huán)神經(jīng)網(wǎng)絡(luò)如圖1所示.

xt是時(shí)刻t的輸入(input),通常是具有特征維度的向量.st是時(shí)刻t的隱藏狀態(tài)(hidden state),它由輸入xt和前一隱藏狀態(tài)st-1計(jì)算得到.ot為時(shí)刻t的輸出,它是表示所有類(lèi)別的概率向量.U,V和W分別是從輸入,前一隱藏狀態(tài)到下一隱藏狀態(tài),隱藏狀態(tài)到輸出的連接的權(quán)重矩陣.請(qǐng)注意,對(duì)于每一時(shí)刻,循環(huán)神經(jīng)網(wǎng)絡(luò)共享權(quán)重.網(wǎng)絡(luò)輸出計(jì)算公式如下所示.為激活函數(shù),如sigmoid或tanh.Softmax是一種應(yīng)用于多分類(lèi)問(wèn)題的算法.

圖1 循環(huán)神經(jīng)網(wǎng)絡(luò)Fig.1 Recurrent neural network

st=σ(Uxt+Wst-1)

(1)

ot=Softmax(Vst)

(2)

理論上,RNN能夠在任意長(zhǎng)的網(wǎng)絡(luò)間傳遞信息,但是當(dāng)涉及長(zhǎng)時(shí)任務(wù)時(shí),如對(duì)包含1000幀語(yǔ)音數(shù)據(jù)進(jìn)行解碼,其反饋能力會(huì)大大降低.為了增強(qiáng)記憶能力,長(zhǎng)短時(shí)記憶模型(Long Short-term Memory,LSTM)[6]和門(mén)控循環(huán)單元(Gated Recurrent Unit,GRU)[7]網(wǎng)絡(luò)應(yīng)運(yùn)而生,兩種改進(jìn)的循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)添加門(mén)控機(jī)制,增強(qiáng)存儲(chǔ)信息的能力,并成功地避免了梯度消失問(wèn)題[8].目前,基于循環(huán)神經(jīng)網(wǎng)絡(luò)的大多數(shù)模型均使用LSTM[9]或GRU[10]進(jìn)行構(gòu)建.

如今,自動(dòng)語(yǔ)音識(shí)別(ASR)模型使用RNN(LSTM或GRU)作為基本單元,通過(guò)對(duì)當(dāng)前訓(xùn)練幀引入反饋機(jī)制,極大提高了訓(xùn)練的精確率.與其他神經(jīng)網(wǎng)絡(luò)相同,有效地增加模型層數(shù)將會(huì)獲得更高的準(zhǔn)確性,但同時(shí)將需要更多的計(jì)算時(shí)間和存儲(chǔ)空間.

2.2 相關(guān)加速算法

與卷積神經(jīng)網(wǎng)絡(luò)(Convolution Neural Network,CNN)[11]和全連接網(wǎng)絡(luò)(Fully Connected Network,F(xiàn)CN)[12]相比,循環(huán)神經(jīng)網(wǎng)絡(luò)不僅包含垂直方向上的深度信息,還包含水平方向的時(shí)間信息.當(dāng)涉及序列學(xué)習(xí)任務(wù)時(shí),對(duì)于長(zhǎng)度不同的輸入序列,使用RNN進(jìn)行訓(xùn)練時(shí),模型的水平方向長(zhǎng)度將會(huì)變化.通常,神經(jīng)網(wǎng)絡(luò)以批處理(batch)方式進(jìn)行訓(xùn)練,以達(dá)到更高計(jì)算效率[13].當(dāng)同時(shí)訓(xùn)練多個(gè)序列時(shí),較短的序列將在末尾填零補(bǔ)齊,從而使同一組訓(xùn)練數(shù)據(jù)具有相同長(zhǎng)度.顯然,填補(bǔ)零將帶來(lái)額外計(jì)算開(kāi)銷(xiāo),同時(shí)每一批不同長(zhǎng)度的序列將使用不同大小的模型進(jìn)行訓(xùn)練.由于存儲(chǔ)限制,應(yīng)該考慮如何選取合適的模型數(shù)量及大小進(jìn)行存儲(chǔ).

截?cái)喾聪騻鞑r(shí)間(Back-propagation Through Time,BPTT)是一種將輸入樣本進(jìn)行分段訓(xùn)練的方法,能夠有效減少訓(xùn)練模型大小[14],但截?cái)鄬?huì)導(dǎo)致梯度信息丟失并影響性能[15].同時(shí),對(duì)于訓(xùn)練較大模型,陳天奇小組提出了一種減少內(nèi)存消耗的系統(tǒng)化方法,已被證明在卷積神經(jīng)網(wǎng)絡(luò)和固定長(zhǎng)度的循環(huán)神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練中有效[16].谷歌提出了一種前后向折中計(jì)算的方式來(lái)訓(xùn)練循環(huán)神經(jīng)網(wǎng)絡(luò)[17],解決了內(nèi)存緊張時(shí)大規(guī)模模型訓(xùn)練的問(wèn)題.這兩個(gè)方法均在理論上以犧牲計(jì)算時(shí)間在有限存儲(chǔ)下進(jìn)行訓(xùn)練,未表現(xiàn)出加速性能.

本文提出一種更合理的方法來(lái)訓(xùn)練語(yǔ)音模型中的循環(huán)神經(jīng)網(wǎng)絡(luò),通過(guò)對(duì)序列的合理組織以及高效的存儲(chǔ)使用,來(lái)提升對(duì)輸入序列的長(zhǎng)度有顯著變化的模型訓(xùn)練速度.

3 序列分組

序列分組(sequence bucketing)思想是指將輸入序列按批(batch)訓(xùn)練大小進(jìn)行劃分,并放入對(duì)應(yīng)組中,每個(gè)特定大小的組稱(chēng)為桶(bucket).序列分組有兩個(gè)考慮因素:(a)應(yīng)保留訓(xùn)練數(shù)據(jù)的隨機(jī)性.(b)對(duì)于訓(xùn)練序列,分組應(yīng)該是最佳的.序列分組主要分為三個(gè)步驟(見(jiàn)圖2).

1)給定具有可用內(nèi)存的塊大小,將數(shù)據(jù)集拆分成具有索引的多個(gè)塊;獲取數(shù)據(jù)時(shí),隨機(jī)從磁盤(pán)中取出一個(gè)塊到內(nèi)存;

2)對(duì)所選塊中的序列進(jìn)行排序,并按批訓(xùn)練大小進(jìn)行分組;再次對(duì)其編號(hào)進(jìn)行隨機(jī)化;

3)訓(xùn)練時(shí)取出一組樣本,選擇合適大小的桶對(duì)其進(jìn)行處理,并使用對(duì)應(yīng)大小模型進(jìn)行訓(xùn)練.

圖2 序列分組過(guò)程Fig.2 Process of sequence bucketing

該方法第一步一次將一整塊數(shù)據(jù)放入內(nèi)存中,減少硬盤(pán)訪(fǎng)問(wèn)次數(shù)來(lái)提高數(shù)據(jù)訪(fǎng)問(wèn)速度.此步由多線(xiàn)程生產(chǎn)者消費(fèi)者模式進(jìn)行操作,掩蓋讀取時(shí)間開(kāi)銷(xiāo).第二步對(duì)該塊序列排序,具有相似長(zhǎng)度的序列將位于同一訓(xùn)練批次中.通過(guò)隨機(jī)化,前兩步保證了輸入數(shù)據(jù)的訓(xùn)練隨機(jī)性.第三步,批訓(xùn)練數(shù)據(jù)被置入合適大小的桶中,該桶為長(zhǎng)度大于當(dāng)前批次最長(zhǎng)序列中最小的桶.顯然,由于沒(méi)有額外的計(jì)算,具有相同長(zhǎng)度的序列的桶大小將達(dá)到最佳性能.直接利用已存儲(chǔ)的模型將會(huì)減少模型構(gòu)造時(shí)間,但由于參數(shù),網(wǎng)絡(luò)結(jié)構(gòu)等設(shè)置,一個(gè)模型將占用200MB空間;對(duì)于最長(zhǎng)序列長(zhǎng)度為1000的數(shù)據(jù)集,若對(duì)每一步長(zhǎng)的模型均進(jìn)行存儲(chǔ),將占用近200GB的空間,這將給內(nèi)存帶來(lái)巨大的負(fù)擔(dān).如果動(dòng)態(tài)構(gòu)建模型,當(dāng)計(jì)算與構(gòu)建模型時(shí)間不能重疊時(shí),整體訓(xùn)練時(shí)間也將大大增加.

此時(shí)考慮存儲(chǔ)特定大小及數(shù)量的桶.桶的數(shù)量取決于內(nèi)存大小和最長(zhǎng)的序列長(zhǎng)度.在可存儲(chǔ)范圍內(nèi),不同尺寸的模型將被保存和重復(fù)使用.本文提出兩種設(shè)置桶大小的方法.

設(shè)L為最長(zhǎng)的序列長(zhǎng)度,N是桶的數(shù)量; Bm是第m個(gè)桶的大小,Bm和Bm+1之間的步長(zhǎng)為Sm+1.注意對(duì)于任一步長(zhǎng),Sm>0,桶大小按升序排列.此時(shí)桶的大小表示為:

(3)

通常,簡(jiǎn)單采用固定步長(zhǎng)可以滿(mǎn)足基本訓(xùn)練需求,此時(shí)桶的大小如公式所示:

(4)

固定步長(zhǎng)適用于序列長(zhǎng)度均勻分布的數(shù)據(jù)集.但是,大部分?jǐn)?shù)據(jù)集并不符合均勻分布.圖3顯示了一個(gè)語(yǔ)音識(shí)別數(shù)據(jù)集的序列長(zhǎng)度的概率密度分布.可以看到,大多數(shù)序列傾向于在一定范圍內(nèi)分布,并且較短的序列比更長(zhǎng)的序列分布更加密集.因此,具有較大尺寸的桶利用率較低,而在數(shù)據(jù)集的密集分布范圍內(nèi)桶的利用率更高.

圖3 語(yǔ)音識(shí)別數(shù)據(jù)集長(zhǎng)度概率分布Fig.3 Probability distribution of sequence length for the speech recognition dataset

在這種情況下,根據(jù)數(shù)據(jù)集的分布設(shè)置變化步長(zhǎng)的桶大小會(huì)取得更好的性能.取其概率分布函數(shù)F(x),桶大小可以設(shè)置為:

(5)

對(duì)于語(yǔ)音識(shí)別的數(shù)據(jù)集,概率分布函數(shù)類(lèi)似平方根函數(shù).與均勻步長(zhǎng)相比,桶的大小變化較大,這可能對(duì)長(zhǎng)序列有更差的影響.為平衡性能,最終選取如下公式對(duì)桶大小進(jìn)行設(shè)置,即相鄰兩桶之間步長(zhǎng)呈遞增形式:

(6)

(7)

圖4給出了取8個(gè)桶時(shí),選擇固定步長(zhǎng)和變化步長(zhǎng)方法下,每個(gè)桶覆蓋數(shù)據(jù)集中不同長(zhǎng)度序列范圍的示例.最上為改進(jìn)后的變化步長(zhǎng),中間為依靠概率分布所取步長(zhǎng),最下為固定步長(zhǎng).如圖所示,序列長(zhǎng)度較短范圍內(nèi),選取變化步長(zhǎng)時(shí)桶的數(shù)量明顯多于固定步長(zhǎng),且改進(jìn)后的變化步長(zhǎng)方法在較長(zhǎng)序列范圍部分,桶的數(shù)量較原方法增多,從而使位于語(yǔ)音數(shù)據(jù)集中不同長(zhǎng)度的序列均有大小合適的桶可供選擇.

圖4 不同步長(zhǎng)設(shè)置下桶覆蓋數(shù)據(jù)區(qū)域分布Fig.4 Buckets with different step setting

除此之外,批訓(xùn)練數(shù)據(jù)的形狀被重新排列,以桶大小作為第一維度(如圖2中的步驟3所示).通過(guò)此種排列,處于不同序列但在同時(shí)刻的輸入數(shù)據(jù)將位于連續(xù)向量中,從而在計(jì)算過(guò)程中能夠連續(xù)訪(fǎng)存,獲得較高訪(fǎng)存性能.

4 高效利用顯存

在循環(huán)神經(jīng)網(wǎng)絡(luò)中,由于水平方向?qū)嶋H為按時(shí)間順序循環(huán)展開(kāi),因此每個(gè)單元結(jié)構(gòu)相同,其輸出不僅作下一層輸入,還將傳遞給后一單元.隨著序列長(zhǎng)度和批樣本數(shù)增加,模型逐漸變大,有限存儲(chǔ)空間將無(wú)法存儲(chǔ)模型,或僅可以在一次訓(xùn)練中訓(xùn)練幾個(gè)序列,導(dǎo)致計(jì)算效率極低.因此,需要考慮在計(jì)算時(shí)間和存儲(chǔ)空間之間進(jìn)行平衡,從而提升訓(xùn)練性能.

為了解循環(huán)神經(jīng)網(wǎng)絡(luò)模型占用內(nèi)存大小,需要深入了解其單元結(jié)構(gòu).以L(fǎng)STM作為對(duì)象進(jìn)行分析,LSTM網(wǎng)絡(luò)與標(biāo)準(zhǔn)RNN相同,但隱藏層中的單元被更復(fù)雜的單元替代.在該單元內(nèi),細(xì)胞(cell)是LSTM的關(guān)鍵部分,它保存當(dāng)前單元的狀態(tài)信息; 輸入門(mén)(input gate)、輸出門(mén)(output gate)和遺忘門(mén)(forget gate),決定是否應(yīng)將信息添加到單元中或從單元中移除.

LSTM核心公式如下.it,ft,ot表示輸入門(mén),遺忘門(mén)和輸出門(mén),輸入數(shù)據(jù)xt,隱藏狀態(tài)ht,單元狀態(tài)ct分別為向量形式.Wmn表示從單元n到單元m的連接權(quán)重矩陣,大小為m×n.bi,bf,bo,bt分別為三個(gè)門(mén)和變換部分的偏置權(quán)重,為向量形式.t表示時(shí)刻t.σ為激活函數(shù),g是單元和隱藏層的輸出激活函數(shù).

it=σ(Wixxt+Wihht-1+bi)

(8)

ft=σ(Wfxxt+Wfhht-1+bf)

(9)

ct=ftct-1+itg(Wcxxt+Wchht-1)

(10)

ot=σ(Woxxt+Wohht-1+bo)

(11)

ht=otg(ct)

(12)

從方程式可以看出,LSTM計(jì)算過(guò)程比基本RNN更加復(fù)雜,更多變量需要存儲(chǔ).圖5顯示了一個(gè)LSTM單元的計(jì)算過(guò)程.在圖中,點(diǎn)狀網(wǎng)格表示一個(gè)LSTM單元,其內(nèi)部的每個(gè)方塊表示中間結(jié)果或最終結(jié)果.

圖5 LSTM單元結(jié)構(gòu)圖Fig.5 LSTM unit

首先,前一隱藏狀態(tài)ht-1和輸入xt通過(guò)全連接層被轉(zhuǎn)換成四個(gè)矩陣.后續(xù)操作——矩陣加法,激活和矩陣點(diǎn)乘均基于這四個(gè)矩陣進(jìn)行計(jì)算.假設(shè)批樣本大小為B,一層中的神經(jīng)元數(shù)量和輸入維度均為H,則一個(gè)塊中的內(nèi)存使用總大小為2(19BH).例如,對(duì)于批量大小為8,隱藏大小為2048的浮點(diǎn)數(shù)據(jù)類(lèi)型,一個(gè)單元占用2.5MB,那么對(duì)于步長(zhǎng)(step)為1000的3層模型,除其他如softmax層外,已經(jīng)需要7.5GB顯存.反向傳播過(guò)程使用鏈?zhǔn)椒▌t來(lái)遞歸地計(jì)算每層參數(shù)梯度,中間結(jié)果將被再次使用進(jìn)行誤差計(jì)算.此時(shí)保存所有輸出及中間結(jié)果,調(diào)整模型深度或一次訓(xùn)練更多樣本將被顯存限制.

通過(guò)分析后向計(jì)算過(guò)程中的導(dǎo)數(shù)公式[18],必須存儲(chǔ)的中間結(jié)果是經(jīng)過(guò)激活函數(shù)后的輸出,其他梯度可通過(guò)該值進(jìn)行求取.以這種方式,一個(gè)單元所需的保存結(jié)果的空間為7BH,矩陣參數(shù)大小為4H2+H.假設(shè)模型共L層,時(shí)間步長(zhǎng)為N,網(wǎng)絡(luò)中的參數(shù)在單元中共享,則訓(xùn)練時(shí)前后向計(jì)算所需內(nèi)存成本的總大小為:

mem=2(7LNBH+4H2+H)

(13)

為減小單個(gè)樣本存儲(chǔ)空間,提升訓(xùn)練規(guī)模,此時(shí)考慮數(shù)據(jù)丟棄方法(data drop),即在前向計(jì)算中,丟棄中間結(jié)果,只保存最終輸出,在反向傳播階段,丟棄的中間結(jié)果通過(guò)對(duì)最近的記錄狀態(tài)重新進(jìn)行前向計(jì)算獲得.該方法非常適用于循環(huán)神經(jīng)網(wǎng)絡(luò),因?yàn)镽NN中的每個(gè)單元成為一段,輸出的隱藏狀態(tài)作為記錄狀態(tài),單元內(nèi)的中間結(jié)果可以通過(guò)記錄的隱藏狀態(tài)重新計(jì)算.

僅保存每個(gè)單元的隱藏狀態(tài)和單元狀態(tài)時(shí),為前向計(jì)算過(guò)程中需要計(jì)算的中間結(jié)果分配一個(gè)臨時(shí)空間;在后向過(guò)程中,再次使用該空間來(lái)重新計(jì)算中間結(jié)果以獲得誤差值,從而節(jié)省原需要保存全部單元而占據(jù)的存儲(chǔ)空間.單層RNN算法描述如下:

輸入:訓(xùn)練樣本序列X,長(zhǎng)度為N

輸出:本層輸出S及梯度G

顯存分配:

(1)中間結(jié)果temp

(2)輸入X[N],輸出 S[N],梯度G[N]

Step1.前向計(jì)算

For k=1 to N do

S[k]←rnn[k].forward(X[k],S[k-1],temp)

End for

Step2.后向計(jì)算

For k=N to 1 do

rnn[k].forward(X[k],S[k-1],temp)

G[k]←rnn[k].backward(G[k+1],temp)

End for

只存儲(chǔ)每個(gè)塊的隱藏狀態(tài)和單元狀態(tài),參數(shù)和臨時(shí)空間時(shí),同樣大小的訓(xùn)練模型的內(nèi)存成本為:

mem=2(2LNBH+4H2+H)

(14)

與等式(13)相比,一個(gè)單元內(nèi)所需的空間理論上將縮小至原空間大小的30%,并且模型包含單元越多,內(nèi)存節(jié)省的將會(huì)越多.通過(guò)這種方式,在一次訓(xùn)練過(guò)程中,相同內(nèi)存將可用來(lái)訓(xùn)練更多樣本.盡管反向傳播階段的計(jì)算成本增加,但由于批處理規(guī)模增大,GPU硬件計(jì)算單元得到充分利用,計(jì)算效率提高,即同一時(shí)間并行計(jì)算的數(shù)據(jù)增多,從而為提升整體訓(xùn)練速度提供可能.

5 實(shí) 驗(yàn)

5.1 實(shí)驗(yàn)設(shè)置

實(shí)驗(yàn)針對(duì)語(yǔ)音識(shí)別模型進(jìn)行評(píng)估,使用具有隱層大小為2048的3層LSTM模型,并且基于低秩方法[19],每個(gè)單元的輸出維數(shù)減少到512以降低計(jì)算規(guī)模.輸入數(shù)據(jù)集最長(zhǎng)序列長(zhǎng)度設(shè)置為2000,每幀向量輸入維度為40維;輸出損失函數(shù)使用Softmax,最終類(lèi)別為8991類(lèi).

數(shù)據(jù)集來(lái)源于Switchboard Corpus,使用的訓(xùn)練樣本包含332,576個(gè)序列.實(shí)驗(yàn)基于MXNet框架[20].此次試驗(yàn)基于NVIDIA Tesla M40,該GPU具有12GB顯存.優(yōu)化效果評(píng)測(cè)主要針對(duì)單GPU,當(dāng)使用多GPU進(jìn)行數(shù)據(jù)并行加速時(shí),其速度基本與單卡速度成線(xiàn)性關(guān)系.

實(shí)驗(yàn)?zāi)繕?biāo)為如何在限定條件下在單GPU上獲得最佳性能,主要基于三個(gè)因素的評(píng)估:不同的模型數(shù)量,不同步長(zhǎng)的選擇方式以及高效利用顯存方法.首先對(duì)序列分組方法進(jìn)行實(shí)驗(yàn),然后使用數(shù)據(jù)丟棄方法查看實(shí)際內(nèi)存減少比例,最終通過(guò)組合兩種方法來(lái)測(cè)試基于相同內(nèi)存下訓(xùn)練不同樣本大小的計(jì)算性能.

5.2 序列分組加速結(jié)果

該部分實(shí)驗(yàn)設(shè)置批訓(xùn)練樣本數(shù)設(shè)置為8,分別選取{1,2,4,8,16,32 }作為桶的數(shù)量.桶的數(shù)量為1時(shí),代表所有序列都將在具有固定大小的單個(gè)模型中進(jìn)行訓(xùn)練.同時(shí),實(shí)驗(yàn)比較了分別使用固定步長(zhǎng)(公式(4))和變化步長(zhǎng)(公式(7))效果.

圖6 基于不同桶數(shù)量時(shí)速度對(duì)比Fig.6 Speed of different bucket number

最終速度性能如圖6所示.使用多個(gè)桶明顯提高具有不同長(zhǎng)度序列的訓(xùn)練性能;在變化步長(zhǎng)的方式下,與只基于單一模型的訓(xùn)練相比,當(dāng)桶的數(shù)量為32時(shí),加速比達(dá)到4.2倍.比較固定步長(zhǎng)和變化步長(zhǎng)的結(jié)果,后者在相同條件下較前者有大約1.1倍加速比.后續(xù)實(shí)驗(yàn)中,均采用變化步長(zhǎng)方法進(jìn)行速度對(duì)比.

5.3 高效利用顯存加速結(jié)果

實(shí)驗(yàn)首先對(duì)優(yōu)化前后顯存的實(shí)際使用情況進(jìn)行驗(yàn)證.模型的展開(kāi)步長(zhǎng)設(shè)置為2000.優(yōu)化前后方法均調(diào)用基于相同計(jì)算函數(shù)編寫(xiě)的內(nèi)核,優(yōu)化前內(nèi)核保存中間結(jié)果,優(yōu)化后內(nèi)核在前向計(jì)算中丟棄中間結(jié)果,在后向計(jì)算時(shí)重新計(jì)算.由于cuDNN中的RNN函數(shù)只能應(yīng)用于固定長(zhǎng)度模型,對(duì)于變長(zhǎng)模型無(wú)法使用,因此并沒(méi)有將其用作對(duì)比目標(biāo).

圖7 優(yōu)化前后顯存大小對(duì)比Fig.7 Memory usage comparison

圖7顯示了內(nèi)存使用情況.批樣本大小從1開(kāi)始,考慮到CUDA內(nèi)核的線(xiàn)程組織,批樣本大小均設(shè)置為4的倍數(shù).從實(shí)驗(yàn)中可以清楚地看出,使用優(yōu)化顯存方法減少內(nèi)存使用,并且隨著批樣本數(shù)增加,計(jì)算性能隨之提升.在單GPU上的12GB內(nèi)存中,優(yōu)化前模型能夠訓(xùn)練的最大批樣本大小為16,而優(yōu)化后批訓(xùn)練樣本數(shù)達(dá)到32.

其次,基于相同的桶數(shù)量,步長(zhǎng)及顯存優(yōu)化方法,不同批樣本大小下的訓(xùn)練速度對(duì)比如表1所示,速度單位為每秒訓(xùn)練序列數(shù).隨著批樣本數(shù)增加,訓(xùn)練速度趨于線(xiàn)性加速,即批訓(xùn)練樣本數(shù)增大,訓(xùn)練性能隨之提高.

表1 不同批樣本數(shù)下速度對(duì)比實(shí)驗(yàn)數(shù)據(jù)表Table 1 Speed comparison with different batch size

最后,實(shí)驗(yàn)基于相同顯存下,對(duì)使用優(yōu)化顯存方法前后的性能進(jìn)行對(duì)比.實(shí)驗(yàn)選取批樣本大小分別為8,20和12,32兩組實(shí)驗(yàn)進(jìn)行對(duì)比.圖8顯示了兩組實(shí)驗(yàn)基于不同數(shù)量桶下的速度.兩組實(shí)驗(yàn)均從優(yōu)化顯存方法中獲得了性能提升:第一組實(shí)驗(yàn)平均得到1.82倍的加速,第二組實(shí)驗(yàn)的加速為1.73倍.該結(jié)果表明,盡管數(shù)據(jù)丟棄方法在后向計(jì)算中需要更多的時(shí)間,但由于增大了批訓(xùn)練樣本數(shù),硬件計(jì)算利用效率得以提升,從而提高了整體訓(xùn)練速度.

圖8 相同顯存下優(yōu)化前后速度對(duì)比Fig.8 Speed comparison with same memory

基于完整的一次訓(xùn)練,當(dāng)完成一個(gè)訓(xùn)練周期(批樣本大小為8時(shí)需要10,343個(gè)epoch;批樣本大小為32時(shí)需要41,375個(gè)epoch),未使用優(yōu)化顯存方法前,原模型一次只能訓(xùn)練8個(gè)樣本,在單GPU上需要48小時(shí);使用優(yōu)化方法后,一次訓(xùn)練樣本數(shù)達(dá)到32,單GPU只需19小時(shí),使用4GPU進(jìn)行數(shù)據(jù)并行訓(xùn)練時(shí)間縮短至5小時(shí).

6 結(jié) 論

本文提出了一種有效的方法來(lái)加速基于變長(zhǎng)輸入序列的循環(huán)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度.通過(guò)高效的序列分組和顯存優(yōu)化方法,循環(huán)神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練速度得到顯著提升.

實(shí)驗(yàn)主要基于語(yǔ)音識(shí)別模型進(jìn)行評(píng)估,在相同的顯存下,基于NVIDIA Tesla M40 GPU實(shí)現(xiàn)了1.7倍的加速.實(shí)驗(yàn)證明,該方法對(duì)于較長(zhǎng)序列的循環(huán)神經(jīng)網(wǎng)絡(luò)效果更好.此外,隨著每批訓(xùn)練樣本數(shù)的增加,可以提高學(xué)習(xí)率來(lái)加速收斂.下一步工作將考慮在顯存和計(jì)算之間進(jìn)行更準(zhǔn)確的量化分析,以及在其他模型上使用該方法進(jìn)行加速,期望達(dá)到更優(yōu)的訓(xùn)練性能.

猜你喜歡
步長(zhǎng)內(nèi)存長(zhǎng)度
基于Armijo搜索步長(zhǎng)的BFGS與DFP擬牛頓法的比較研究
一種改進(jìn)的變步長(zhǎng)LMS自適應(yīng)濾波算法
繩子的長(zhǎng)度怎么算
基于變步長(zhǎng)梯形求積法的Volterra積分方程數(shù)值解
筆記本內(nèi)存已經(jīng)在漲價(jià)了,但幅度不大,升級(jí)擴(kuò)容無(wú)須等待
“春夏秋冬”的內(nèi)存
一種非線(xiàn)性變步長(zhǎng)LMS自適應(yīng)濾波算法
愛(ài)的長(zhǎng)度
長(zhǎng)度單位
內(nèi)存搭配DDR4、DDR3L還是DDR3?