0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PA利用Tesla V100 GPU Tensor核心的強(qiáng)大計(jì)算力縮短模型訓(xùn)練時(shí)間、提升模型迭代速度

NVIDIA英偉達(dá)企業(yè)解決方案 ? 來(lái)源:lq ? 2019-05-16 15:34 ? 次閱讀

本案例中,阿里巴巴PAI團(tuán)隊(duì)為了使PAI用戶無(wú)需經(jīng)過(guò)繁瑣的模型改寫(xiě)即可實(shí)現(xiàn)混合精度訓(xùn)練、充分利用Tesla V100 GPU Tensor核心的強(qiáng)大計(jì)算力縮短模型訓(xùn)練時(shí)間、提升模型迭代速度,阿里巴巴團(tuán)隊(duì)在PAI平臺(tái)上開(kāi)發(fā)了自動(dòng)混合精度訓(xùn)練Feature,F(xiàn)eature已在PAI平臺(tái)上線開(kāi)放對(duì)內(nèi)使用,顯著節(jié)省了用戶使用Tensor核心硬件加速單元的負(fù)擔(dān),并且以通用性的方式獲得了顯著的作業(yè)訓(xùn)練性能加速,比較充分地釋放出底層Tesla V100的計(jì)算潛力,且不影響模型的收斂性。

PAI(Platform Artificial Intelligence) 作為阿里巴巴集團(tuán)的機(jī)器學(xué)習(xí)平臺(tái),一直致力于底層引擎技術(shù)、編譯優(yōu)化及在離線預(yù)測(cè)優(yōu)化的技術(shù)創(chuàng)新,同時(shí)通過(guò)PAI Studio、PAI DSW 、EAS、算法市場(chǎng)等相關(guān)生態(tài)產(chǎn)品,打造完整、豐富的生態(tài)體系,將AI技術(shù)更好的賦能于集團(tuán)內(nèi)外各類用戶。

PAI平臺(tái)管控了阿里巴巴集團(tuán)內(nèi)外大量的CPU、GPU、RDMA網(wǎng)卡等硬件資源,在確保單個(gè)作業(yè)執(zhí)行性能的同時(shí),如何確保這些硬件資源的整體使用效率,是平臺(tái)側(cè)重點(diǎn)關(guān)注的問(wèn)題。因?yàn)榇_保通過(guò)平臺(tái)層面的技術(shù)創(chuàng)新,讓阿里 “用更少的資源,跑得更快,支持更多業(yè)務(wù)同時(shí)迭代” 是中臺(tái)技術(shù)賦能業(yè)務(wù)創(chuàng)新的典型體現(xiàn)。

NVIDIA Tesla V100 GPU是NVIDIA于2017年推出的新一代GPU,采用Volta架構(gòu),引入了針對(duì)混合精度計(jì)算的Tensor核心,硬件層面顯著提升了峰值計(jì)算能力,相較于深度學(xué)習(xí)常用的浮點(diǎn)32位的計(jì)算,理論最高加速比可以達(dá)到8X。

NVIDIA Tesla V100 GPU推出之后,阿里巴巴集團(tuán)率先采用了Tesla V100。然而,一款新硬件的推出對(duì)上層軟件棧也提出了新的挑戰(zhàn)和要求,想要充分發(fā)揮新的底層硬件的性能效率,就需要軟件層進(jìn)行大量的適配工作(包括訓(xùn)練性能以及模型訓(xùn)練方式的適配,以確保獲得理想的time-to-accuracy的加速效果)。

為了使PAI用戶無(wú)需經(jīng)過(guò)繁瑣的模型改寫(xiě)即可實(shí)現(xiàn)混合精度訓(xùn)練、充分利用NVIDIA V100 GPU Tensor核心的強(qiáng)大計(jì)算力縮短模型訓(xùn)練時(shí)間、提升模型迭代速度,阿里團(tuán)隊(duì)在PAI平臺(tái)上開(kāi)發(fā)了自動(dòng)混合精度訓(xùn)練Feature。

該Feature已在PAI平臺(tái)上線開(kāi)放對(duì)內(nèi)使用,顯著節(jié)省了用戶使用Tensor核心硬件加速單元的負(fù)擔(dān),并且以通用性的方式獲得了顯著的作業(yè)訓(xùn)練性能加速,比較充分地釋放出底層新硬件的計(jì)算潛力,同時(shí)在近期向社區(qū)提交了相關(guān)的Pull Request因?yàn)橛行Оl(fā)揮混合精度加速新硬件的效率確實(shí)存在不少陷阱和問(wèn)題。

作為基礎(chǔ)設(shè)施平臺(tái)方,阿里巴巴PAI團(tuán)隊(duì)希望能夠從平臺(tái)層面將這些問(wèn)題盡可能以透明、通用的方式進(jìn)行解決,從而解決上層用戶的使用負(fù)擔(dān),讓用戶透明地享受到Telsa V100新GPU的加速紅利。

已經(jīng)正常使用PAI自動(dòng)混合精度訓(xùn)練的用戶,均能夠在無(wú)需改動(dòng)一行代碼的前提下獲得顯著的訓(xùn)練加速,且不影響模型的收斂性。

1. 混合精度訓(xùn)練簡(jiǎn)介

混合精度訓(xùn)練是指在訓(xùn)練過(guò)程中在不同的計(jì)算中使用不同的數(shù)值精度,從而充分挖掘GPU硬件上每一個(gè)晶體管的極致性能,目前在PAI上支持的混合精度訓(xùn)練主要是指FP16和FP32兩個(gè)數(shù)值精度。在標(biāo)準(zhǔn)Tensorflow訓(xùn)練任務(wù)中,variable及tensor的表示精度目前均默認(rèn)為FP32的,那么為什么要引入FP16的數(shù)值精度呢?

對(duì)于神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程而言,影響速度的兩個(gè)關(guān)鍵因素是,計(jì)算和訪存(這實(shí)際上也是由馮諾依曼體系結(jié)構(gòu)的本質(zhì)決定的):

從計(jì)算而言,NVIDIA在2017年推出了Volta架構(gòu),其中重要的模塊即為T(mén)ensor核心(如下圖),在Tensor核心的加速下,V100在混合精度下的吞吐量比在FP32下有8X的加速。Tensor核心主要對(duì)matrix-multiply-and-accumulate類計(jì)算進(jìn)行了加速。基于Tensor核心阿里巴巴PAI團(tuán)隊(duì)可以對(duì) MatMul、 Convolution等計(jì)算原語(yǔ)進(jìn)行加速,而二者恰好是神經(jīng)網(wǎng)絡(luò)中計(jì)算量較大的op。

從訪存而言,若Tensor的數(shù)值精度由FP32變?yōu)镕P16,那么也可以得到理論上2X的訪存加速。 因此阿里巴巴PAI團(tuán)隊(duì)引入了混合精度對(duì)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練進(jìn)行加速。

Volta V100 Tensor核心計(jì)算

2. Motivation

易用性是PAI平臺(tái)在追求高性能、高效率的同時(shí)同樣重視的另一個(gè)關(guān)鍵目標(biāo),因?yàn)槠溆脩?,即AI Developer,希望專注于模型和算法本身,不希望被各種復(fù)雜的性能優(yōu)化問(wèn)題分散精力,這要求其性能優(yōu)化能夠作為turn-key solution,盡可能對(duì)用戶透明,避免對(duì)用戶模型代碼的入侵?;旌暇扔?xùn)練加速優(yōu)化同樣如此。

目前一般的混合精度訓(xùn)練方法需要用戶自己將模型代碼修改為混合精度版本,因此會(huì)對(duì)模型代碼產(chǎn)生較深的入侵,特別是復(fù)雜模型,增加了用戶負(fù)擔(dān)。這個(gè)過(guò)程包含多個(gè)步驟:

1) 將計(jì)算部分轉(zhuǎn)換為FP16;

2) 將不支持FP16和不應(yīng)使用FP16計(jì)算的算子再逐一轉(zhuǎn)換回FP32;

3) Variable使用FP32存儲(chǔ),這可以通過(guò)將Variable定義為FP32,在計(jì)算時(shí)再cast乘FP16,即tf.cast(tf.get_variable(..., dtype=tf.float32), tf.float16)來(lái)做到。

但是這種做法存在很多局限。首先,很多variable的定義被封裝在TF API中,如LSTMCell的weights和bias,模型代碼層面不可見(jiàn),這種情況則需要通過(guò)custom_getter實(shí)現(xiàn);此外,有些情況下混合精度的訓(xùn)練過(guò)程還需要加入Loss Scaling策略才能確保收斂。整個(gè)過(guò)程易出錯(cuò),一旦出現(xiàn)收斂性問(wèn)題就比較難調(diào)試,而且難以區(qū)分轉(zhuǎn)換出錯(cuò)還是模型本身不適合混合精度訓(xùn)練。

此外,阿里團(tuán)隊(duì)還發(fā)現(xiàn)手工混合精度轉(zhuǎn)換存在一些性能問(wèn)題,比如:實(shí)測(cè)大部分模型手工簡(jiǎn)單轉(zhuǎn)換為混合精度模型之后的加速遠(yuǎn)低于預(yù)期,甚至出現(xiàn)大幅性能下降(如果是對(duì)混合精度訓(xùn)練細(xì)節(jié)非常了解的優(yōu)化專家來(lái)進(jìn)行手工精細(xì)調(diào)優(yōu),確實(shí)會(huì)取得更好的性能,但要求所有的算法工程師都具備相應(yīng)的能力其實(shí)是一個(gè)不合理的要求)。

分析下來(lái),發(fā)現(xiàn)根源問(wèn)題在于模型代碼層面的轉(zhuǎn)換是粗粒度的。部分算子其實(shí)天然不適合使用FP16,例如 Embedding Lookup,還有部分算子的FP16版本性能較差,例如 BiasAddGrad。模型代碼層面的粗粒度轉(zhuǎn)換很難對(duì)轉(zhuǎn)換過(guò)程進(jìn)行精細(xì)控制從而將這些FP16性能很差的算子排除在外。

當(dāng)然,模型代碼層面也可以做到細(xì)粒度的轉(zhuǎn)換,但是這樣做一方面增加模型代碼的入侵深度,使得人工工作量隨著模型復(fù)雜度急劇上升;另外這么做也需要一定的性能調(diào)優(yōu)經(jīng)驗(yàn),且避免不了多次迭代嘗試,這會(huì)給AI Developer帶來(lái)很大的額外負(fù)擔(dān);最后還有一個(gè)克服不了的問(wèn)題,那就是在模型代碼層面無(wú)法觸及反向計(jì)算圖,所以像前面提到的BiasAddGrad算子在模型代碼層面就控制不了。

基于以上兩點(diǎn)原因,阿里團(tuán)隊(duì)在計(jì)算圖優(yōu)化環(huán)節(jié)實(shí)現(xiàn)了自動(dòng)的、精細(xì)的混合精度轉(zhuǎn)換,對(duì)用戶完全透明,用戶跟正常訓(xùn)練FP32模型一樣,無(wú)需修改模型代碼;在計(jì)算圖優(yōu)化環(huán)節(jié),通過(guò)相應(yīng)的性能優(yōu)化避免混合精度轉(zhuǎn)換過(guò)程中伴生的性能不利因素,其實(shí)現(xiàn)的Loss Scaling策略對(duì)用戶更友好、適用面更廣泛。

3. 自動(dòng)混合精度化的實(shí)現(xiàn)

阿里巴巴PAI團(tuán)隊(duì)的自動(dòng)混合精度轉(zhuǎn)換在PAI平臺(tái)深度定制的Tensorflow框架PAI-TensorFlow的計(jì)算圖優(yōu)化引擎中實(shí)現(xiàn)。雖然相比于模型代碼層面的轉(zhuǎn)換,計(jì)算圖層面的轉(zhuǎn)換能夠做到自動(dòng)化、對(duì)用戶透明,但是計(jì)算圖層面的轉(zhuǎn)換也有其缺點(diǎn)、有著相應(yīng)的制約和性能開(kāi)銷,本節(jié)主要介紹阿里巴巴PAI團(tuán)隊(duì)在計(jì)算圖混合精度轉(zhuǎn)換的同時(shí)如何克服這些約束、降低性能開(kāi)銷。

3.1 White-list

為了避免將不支持FP16、不適合使用FP16、FP16性能較差的算子轉(zhuǎn)換為FP16導(dǎo)致運(yùn)行錯(cuò)誤或者性能大幅下降,阿里巴巴PAI團(tuán)隊(duì)維護(hù)了一個(gè)white-list,只有在這個(gè)white-list中的算子才有可能被轉(zhuǎn)換為FP16。這個(gè)white-list的更新,一方面,會(huì)基于一些heuristic的規(guī)則來(lái)進(jìn)行指定,此外,阿里巴巴PAI團(tuán)隊(duì)也會(huì)引入一個(gè)在線反饋tuning的機(jī)制,來(lái)對(duì)算子的FP16-friendliness數(shù)據(jù)進(jìn)行自動(dòng)采集,以期盡可能減少人力負(fù)擔(dān)。

3.2 Cost Model

但不是white-list中的所有算子都應(yīng)該轉(zhuǎn)換為FP16,計(jì)算圖中每個(gè)節(jié)點(diǎn)需不需要轉(zhuǎn)換,除了和這個(gè)計(jì)算節(jié)點(diǎn)本身的算子類型有關(guān),還和這個(gè)節(jié)點(diǎn)周圍其他節(jié)點(diǎn)等因素緊密相關(guān),所以需要一個(gè)Cost Model來(lái)預(yù)測(cè)每個(gè)節(jié)點(diǎn)轉(zhuǎn)換為FP16之后對(duì)整體性能的影響,從而作出轉(zhuǎn)換與否的判斷。

舉個(gè)例子,前面提到的embedding_lookup算子,雖然也支持FP16,但是通過(guò)阿里巴巴PAI團(tuán)隊(duì)的cost model可以輕易地自動(dòng)將計(jì)算圖中的 embedding_lookup節(jié)點(diǎn)排除在外。如下圖所示,上側(cè)是原始計(jì)算圖中的 embedding_lookup節(jié)點(diǎn),其訪存開(kāi)銷是 2*N*D*4Bytes,其中系數(shù)2表示一次讀和一次寫(xiě),4Bytes是因?yàn)樽x寫(xiě)都是FP32數(shù)據(jù);下側(cè)則是將 embedding_lookup節(jié)點(diǎn)轉(zhuǎn)換為FP16之后的示意圖,轉(zhuǎn)換后的訪存開(kāi)銷則變?yōu)?*N*D*2+V*D*4+V*D*2Bytes,其中第一項(xiàng)表示embedding_lookup本身的讀寫(xiě)量減半,而增加的后兩項(xiàng)則是因?yàn)樵趀mbedding_lookup之前需要將embedding variable轉(zhuǎn)換為FP16. 通常情況下詞表大小V遠(yuǎn)遠(yuǎn)大于batch size N, 因此轉(zhuǎn)換后的總的訪存開(kāi)銷遠(yuǎn)遠(yuǎn)大于轉(zhuǎn)換前,通過(guò)cost model就能夠判斷出這個(gè)轉(zhuǎn)換不應(yīng)該發(fā)生。

3.3 FP16 Propagation

在計(jì)算圖層面看模型的視角和在TF代碼層面看模型的視角不太一樣,在計(jì)算圖層面看到的只是一個(gè)個(gè)計(jì)算節(jié)點(diǎn)和他們之間的連接關(guān)系,缺失了更宏觀的結(jié)構(gòu)信息,比如哪些是前向計(jì)算、哪些是后向計(jì)算、以及哪些是Optimizer的計(jì)算(雖然在某種程度上可以通過(guò)節(jié)點(diǎn)的名字來(lái)判斷,但這依賴于計(jì)算圖構(gòu)造過(guò)程中的命名規(guī)則,更多是為了debug目的,不足以作為本質(zhì)的判斷依據(jù),一方面因?yàn)橛脩粲凶远x命名的自由度;另一方面某些計(jì)算圖優(yōu)化Pass在添加計(jì)算節(jié)點(diǎn)時(shí)則不受計(jì)算圖構(gòu)造的命名規(guī)則的約束)。

這個(gè)局限性給計(jì)算圖層面的自動(dòng)混合精度轉(zhuǎn)換造成了一定的障礙,因?yàn)镻AI團(tuán)隊(duì)并不希望Optimizer本身的計(jì)算也被轉(zhuǎn)換為FP16,原因是因?yàn)椴糠帜P托枰猯oss scaling才能防止gradients underflow ,Loss Scaling包含Scaling與Unscaling兩個(gè)步驟,降低在兩個(gè)動(dòng)作之間的梯度值轉(zhuǎn)換為FP16后Underflow的風(fēng)險(xiǎn),而Optimizer本身的計(jì)算位于Unscaling之后,如果Optimizer本身的計(jì)算也被轉(zhuǎn)換為FP16,那么就存在很大的underflow風(fēng)險(xiǎn)。正如前面所說(shuō),在計(jì)算圖層面并不能完全確認(rèn)哪些計(jì)算是optimizer本身的。

為了解決這個(gè)問(wèn)題,阿里巴巴PAI團(tuán)隊(duì)提出并實(shí)現(xiàn)了FP16 Propagation方案?;舅枷胧?,計(jì)算圖中節(jié)點(diǎn)的FP16轉(zhuǎn)換順序并不是隨意的,而是從MatMul/Conv2D節(jié)點(diǎn)開(kāi)始向下游傳播,那么只要在gradient unscaling的位置(使團(tuán)隊(duì)自己添加的Mul節(jié)點(diǎn))做一個(gè)特殊標(biāo)記,F(xiàn)P16的傳播遇到這個(gè)標(biāo)記便停止,從而保證gradient unscaling之后的節(jié)點(diǎn)都不會(huì)被轉(zhuǎn)換為FP16。

3.4 Cast Elimination & Cast Fusion

計(jì)算圖層面的自動(dòng)細(xì)粒度還存在一個(gè)不可避免的問(wèn)題是會(huì)產(chǎn)生大量的Cast轉(zhuǎn)換節(jié)點(diǎn),因?yàn)閷⒚總€(gè)節(jié)點(diǎn)轉(zhuǎn)換為FP16必然會(huì)在輸入端插入FP32轉(zhuǎn)FP16的Cast, 輸出端插入FP16轉(zhuǎn)FP32的Cast,這些Cast會(huì)帶來(lái)很大的額外開(kāi)銷,因此阿里巴巴PAI團(tuán)隊(duì)通過(guò)Cast Elimination 和 Cast Fusion兩個(gè)方法來(lái)降低所引入的這部分開(kāi)銷。

Cast Elimination就是將兩個(gè)連續(xù)的相反的Cast節(jié)點(diǎn)互相抵消,如下圖所示。這種情況在FP16轉(zhuǎn)換后大量存在,如果沒(méi)有Cast Elimination,這些Cast節(jié)點(diǎn)帶來(lái)的額外開(kāi)銷大部分情況下足以抵消混合精度訓(xùn)練所帶來(lái)的性能收益。

雖然Cast Elimination已經(jīng)能夠消除大部分Cast節(jié)點(diǎn),但并不能完全消除,對(duì)于剩余的Cast節(jié)點(diǎn)可以進(jìn)一步通過(guò)Cast Fusion使其和前后的節(jié)點(diǎn)融合,從而避免帶來(lái)額外的訪存開(kāi)銷和Kernel Launch開(kāi)銷。

4. 自動(dòng)Loss Scaling的實(shí)現(xiàn)

4.1 loss scaling介紹

SSD訓(xùn)練過(guò)程中的gradients分布

由于數(shù)值精度的下降,模型的訓(xùn)練過(guò)程可能會(huì)有一定的精度下降或者不收斂情況。由于FP16的表示范圍有限,數(shù)值較小的gradients可能會(huì)出現(xiàn)underflow,導(dǎo)致數(shù)值直接被截?cái)酁?,如上圖,圖中所示為一個(gè)經(jīng)典的SSD圖像檢測(cè)模型在訓(xùn)練過(guò)程中的gradients分布圖,圖中紅線以左都會(huì)因?yàn)閡nderflow的問(wèn)題在FP16下變?yōu)?,而同時(shí)觀察到FP16有很大一部分表征能力并沒(méi)有用到,因此可以將gradients放大一定的倍數(shù)進(jìn)行表達(dá)。對(duì)于此問(wèn)題可以通過(guò)loss scaling策略進(jìn)行解決,即在loss上乘以一個(gè)scaling factor,在gradients進(jìn)行apply之前進(jìn)行unscale即可。

下圖所示即為loss scaling的計(jì)算流程示意圖,在loss位置,將loss乘以scaling factor,進(jìn)行后向計(jì)算,在得到FP32 gradients進(jìn)行unscaling操作,保證gradients數(shù)值的準(zhǔn)確性。其中對(duì)于scaling factor,阿里巴巴PAI團(tuán)隊(duì)實(shí)際是引入了額外的超參數(shù),若其值較大,則在后向計(jì)算中,gradients可能出現(xiàn)overflow的情況,若其值較小,則依然不能很好的解決FP16下underflow的問(wèn)題。對(duì)于它的控制,NVIDIA提出了auto scaling策略,其主要想法是,在不溢出的情況下,可以使用一個(gè)盡量大的scaling factor。

Loss scaling實(shí)現(xiàn)流程框架圖

4.2 Loss scaling的自動(dòng)實(shí)現(xiàn)

對(duì)于loss scaling策略,用戶可以用類似

grads = [grad / scale for grad in tf.gradients(loss * scale, params)]

的方式進(jìn)行手動(dòng)實(shí)現(xiàn),但手動(dòng)實(shí)現(xiàn)存在以下兩方面的劣勢(shì):

用戶的code可能有多種方式實(shí)現(xiàn)梯度的計(jì)算,例如可能直接調(diào)用tf.gradients() ,也可能調(diào)用optimizer.compute_gradients(),甚至也可能是調(diào)用optimizer.minimize()進(jìn)行計(jì)算。在不同的策略下,用戶需要找到gradients的實(shí)際計(jì)算位置,并對(duì)其進(jìn)行l(wèi)oss scaling計(jì)算操作;

若使用constant loss scaling,則用戶需要根據(jù)經(jīng)驗(yàn)指定scaling factor, 則有可能引入了額外的調(diào)參過(guò)程;而用戶若希望使用auto loss scaling的策略,則用戶需要理解auto loss scaling的完整策略,并手動(dòng)實(shí)現(xiàn),這個(gè)過(guò)程使得用戶需要對(duì)code進(jìn)行一個(gè)不小的改動(dòng)量,帶來(lái)的overhead是比較大的,且存在一定的出錯(cuò)概率。

目前社區(qū)tensorflow和NVIDIA所給的示例中給出了另外一種實(shí)現(xiàn)方式,即對(duì)用戶的optimizer進(jìn)行一層混合精度的wrapper封裝,并重新實(shí)現(xiàn)了compute_gradients()/apply_gradients()/minimize()等函數(shù)。但這種實(shí)現(xiàn)方式存在以下問(wèn)題:

用戶code對(duì)于gradients的計(jì)算,不一定是通過(guò)調(diào)用optimizer.compute_gradients()實(shí)現(xiàn)的,也可能是直接調(diào)用tf.gradients(),在這種情況下用戶就需要改動(dòng)自己的code以適用于混合精度的loss scaling訓(xùn)練策略,這對(duì)用戶的overhead是比較大的;

wrapper封裝方式無(wú)法解耦與其他optimizer wrapper的耦合依賴;例如,在分布式訓(xùn)練時(shí),用戶一般會(huì)用分布式optimizer對(duì)于標(biāo)準(zhǔn)optimizer進(jìn)行一層封裝,例如opt = tf.train.SyncReplicasOptimizer(opt),此時(shí)用戶可能存在不知道封裝哪一個(gè)optimizer的困惑,并且目前社區(qū)的code是沒(méi)有對(duì)于分布式訓(xùn)練wrapper與混合精度訓(xùn)練wrapper進(jìn)行解耦的,社區(qū)目前的版本與tf.train.SyncReplicasOptimizer耦合使用時(shí)會(huì)出現(xiàn)死鎖情況;

更細(xì)節(jié)地,wrapper方式不能實(shí)現(xiàn)對(duì)于colocate_gradients_with_ops等一些device placement控制功能的支持。

因此,為了解放用戶,阿里巴巴PAI團(tuán)隊(duì)采取了另外一種實(shí)現(xiàn)方式,即對(duì)tf.gradients()進(jìn)行了decorator,在這種方式下,可以支持optimizer.compute_gradients()/optimizer.minimize()/tf.gradients()任一方式下的梯度計(jì)算,同時(shí)是對(duì)梯度反向計(jì)算的原子操作tf.gradients()進(jìn)行了decorator,因此它與其他的optimizer wrapper不存在耦合情況。細(xì)節(jié)地,用戶在使用混合精度時(shí),若希望啟動(dòng)loss scaling只需要將optimizer相關(guān)的部分都放在with gradients.mixed_precision_scope下即可,例如如下所示。

4.3 模型收斂性驗(yàn)證

對(duì)于混合精度訓(xùn)練,阿里巴巴PAI團(tuán)隊(duì)基于不同類型的model進(jìn)行了收斂性驗(yàn)證。實(shí)驗(yàn)結(jié)果可以驗(yàn)證部分model在混合精度訓(xùn)練下也可保持與FP32訓(xùn)練結(jié)果相當(dāng)?shù)哪P途?,部分model出現(xiàn)了精度下降或訓(xùn)練不收斂的情況,但均可通過(guò)loss scaling的策略恢復(fù)模型精度,保證其與FP32下一致的模型精度。

4.3.1 Classification CNNs

對(duì)于分類CNN網(wǎng)絡(luò),阿里巴巴PAI團(tuán)隊(duì)基于ResNet50在ImageNet上進(jìn)行了收斂性分析,下圖所示為訓(xùn)練過(guò)程的test accuracy曲線,對(duì)比實(shí)驗(yàn)包括:

FP32 baseline;

混合精度訓(xùn)練(MP)+no loss scaling;

混合精度訓(xùn)練(MP)+constant scaling (scaling factor=64);

混合精度訓(xùn)練(MP)+auto scaling。 由對(duì)比可見(jiàn),即使不加loss scaling策略,混合精度訓(xùn)練的精度與FP32下基本無(wú)差別。

ResNet50訓(xùn)練曲線對(duì)比

4.3.2 Detection CNNs

對(duì)于detection CNNs,阿里巴巴PAI團(tuán)隊(duì)在Faster RCNN和SSD上進(jìn)行了收斂性驗(yàn)證:

Faster RCNN on PASCAL VOC2007

對(duì)于此model,在混合精度訓(xùn)練下,不加loss scaling的情況下,mAP有1.65的drop,但在constant scaling及auto scaling的策略下,此精度均可recover,且精度略高于FP32情況下的模型精度

SSD on PASCAL VOC2007+2012

SSD模型在混合精度訓(xùn)練情況下,不加loss scaling時(shí)出現(xiàn)了不收斂的情況,但在constant scaling及auto scaling情況下,其收斂精度均可與FP32 baseline相當(dāng)。

4.3.3 NMT

對(duì)于NMT任務(wù),阿里巴巴PAI團(tuán)隊(duì)使用了small NMT模型在WMT German-English任務(wù)上進(jìn)行了混合精度訓(xùn)練,在auto scaling策略下,其所得BLEU值與FP32情況下訓(xùn)練結(jié)果相當(dāng)。

4.3.4 GAN

對(duì)于GAN的收斂性驗(yàn)證,阿里巴巴PAI團(tuán)隊(duì)在基于公開(kāi)model Prograssive GAN (PGAN)和阿里巴巴PAI內(nèi)部推進(jìn)的一個(gè)AI字體生成業(yè)務(wù)model進(jìn)行了驗(yàn)證。

下圖所示從左至右分別為兩個(gè)模型在FP32、FP16(no loss scaling)以及FP16(auto scaling)情況下的生成圖片,其主觀結(jié)果無(wú)明顯差異。

4.3.5 Wide & Deep Learning

對(duì)于搜索、推薦、廣告領(lǐng)域常用的WDL模型,阿里巴巴PAI團(tuán)隊(duì)基于Tensor flow官方案例 進(jìn)行了收斂性驗(yàn)證,實(shí)驗(yàn)結(jié)果如下。即使在不加loss scaling的情況下,團(tuán)隊(duì)觀察到混合精度的訓(xùn)練結(jié)果與FP32也是相當(dāng)?shù)摹?/p>

5. 線下性能評(píng)測(cè)

5.1 Language Model

首先選取了Tensorflow官方的Language Model進(jìn)行評(píng)測(cè):

評(píng)測(cè)模型提供了FP16訓(xùn)練的Option --use_fp16,這屬于前面提到的模型代碼層面的手工轉(zhuǎn)換,正好可以和PAI自動(dòng)混合精度訓(xùn)練做一些性能對(duì)比。

收斂性:無(wú)需Loss Scaling, AutoMixedPrecision收斂性與FP32訓(xùn)練無(wú)差異。

性能:如下圖所示(單位words/sec),PAI自動(dòng)混合進(jìn)度訓(xùn)練的性能明顯超過(guò)手工轉(zhuǎn)換的FP16模型的性能,相對(duì)于V100 FP32性能基準(zhǔn),加速達(dá)到2.3X。

5.2 NMT Transformer

同時(shí)阿里巴巴PAI團(tuán)隊(duì)針對(duì)阿里達(dá)摩院機(jī)器翻譯團(tuán)隊(duì)的In-house Production Model也進(jìn)行了混合精度的加速效果驗(yàn)證。

收斂性:加上Loss Scaling, AutoMixedPrecision收斂性與FP32訓(xùn)練無(wú)差異

性能:如下圖所示(單位step/sec), 這個(gè)模型有兩種配置,hidden size = 512的配置相對(duì)于V100 FP32加速比為1.6X, hidden size = 1024的配置加速比為2.1X。

6. 線上性能對(duì)比

首先要說(shuō)明的一點(diǎn)是,雖然已經(jīng)有多個(gè)業(yè)務(wù)的多個(gè)模型在線上使用PAI混合精度訓(xùn)練,但并不是每個(gè)模型的每個(gè)配置阿里巴巴PAI團(tuán)隊(duì)都能拿到和非混合精度訓(xùn)練的性能對(duì)比,因?yàn)橛脩粼陧樌褂肞AI混合精度訓(xùn)練后并沒(méi)有再使用非混合精度訓(xùn)練的需求,有時(shí)候用戶跑非混合精度訓(xùn)練純粹是為了幫阿里巴巴PAI團(tuán)隊(duì)做性能對(duì)比,團(tuán)隊(duì)也不愿意過(guò)多地浪費(fèi)用戶寶貴的時(shí)間和集群計(jì)算資源來(lái)做性能對(duì)比。所以下面會(huì)比較細(xì)節(jié)地列舉兩個(gè)項(xiàng)目各自其中一個(gè)模型的性能對(duì)比,再給出一些代表性的模型性能對(duì)比。

6.1 高德某導(dǎo)航類相關(guān)項(xiàng)目

該項(xiàng)目是PAI自動(dòng)混合精度訓(xùn)練的第一個(gè)用戶,該項(xiàng)目自研的模型,既包括多個(gè)卷積層也包括多個(gè)全連接層。

該項(xiàng)目最新開(kāi)發(fā)的模型使用PAI混合精度訓(xùn)練,模型收斂性沒(méi)有收到影響。

使用PAI混合精度訓(xùn)練和V100非混合精度訓(xùn)練的性能對(duì)比,如下表所示(單位sec/step)

對(duì)于小尺寸模型,在相同的V100 GPU上,PAI混合精度訓(xùn)練相比于非混合精度訓(xùn)練加速2.3X。

對(duì)于正常尺寸的模型,如果不用混合精度訓(xùn)練,在V100 GPU上則因?yàn)镺OM根本無(wú)法訓(xùn)練,這也體現(xiàn)了PAI混合精度訓(xùn)練除了性能上的加速,也能降低顯存的消耗。

6.2 速賣(mài)通 (AliExpess)某商品數(shù)據(jù)挖掘項(xiàng)目

AliExpess商品數(shù)據(jù)挖掘項(xiàng)目是PAI自動(dòng)混合精度訓(xùn)練的第二個(gè)用戶,使用PAI混合精度訓(xùn)練,同樣對(duì)模型收斂性沒(méi)有任何影響。

和前面的高德導(dǎo)航類項(xiàng)目新開(kāi)發(fā)的模型直接在V100集群使用PAI混合精度訓(xùn)練不同的是,該項(xiàng)目的模型在使用PAI混合精度訓(xùn)練之前已經(jīng)在使用P100集群訓(xùn)練,切換到PAI混合精度訓(xùn)練后獲得了非常顯著的加速,一方面是V100 GPU相對(duì)于P100 GPU的性能提升,另一方面是在V100 GPU上PAI混合精度訓(xùn)練帶來(lái)的性能提升。訓(xùn)練時(shí)間對(duì)比如下圖所示

對(duì)于小尺寸模型,在相同的V100 GPU上,PAI混合精度訓(xùn)練相比于非混合精度訓(xùn)練加速2.3X。

對(duì)于正常尺寸的模型,如果不用混合精度訓(xùn)練,在V100 GPU上則因?yàn)镺OM根本無(wú)法訓(xùn)練,這也體現(xiàn)了PAI混合精度訓(xùn)練除了性能上的加速,也能降低顯存的消耗。

6.3 PAI自動(dòng)混合精度代表性模型加速示例

因?yàn)樽詣?dòng)混合精度功能在設(shè)計(jì)上就充分考慮到了通用性及透明性,所以業(yè)務(wù)多樣性支持得比較出色,下面展示的部分?jǐn)?shù)據(jù)包括PAI平臺(tái)對(duì)內(nèi)業(yè)務(wù)CNN、Transformer、BERT以及FCN占模型結(jié)構(gòu)主體的不同模型,業(yè)務(wù)場(chǎng)景橫跨了NLP、圖像、電商數(shù)據(jù)挖掘、高德交通導(dǎo)航等。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4726

    瀏覽量

    100344
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    27

    文章

    4640

    瀏覽量

    128487
  • 阿里巴巴
    +關(guān)注

    關(guān)注

    7

    文章

    1605

    瀏覽量

    47010

原文標(biāo)題:PAI自動(dòng)混合精度訓(xùn)練——Tensor核心在阿里PAI平臺(tái)落地應(yīng)用實(shí)踐

文章出處:【微信號(hào):NVIDIA-Enterprise,微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    通往AGI之路:揭秘英偉達(dá)A100、A800、H800、V100在高性能計(jì)算與大模型訓(xùn)練中的霸主地位

    英偉達(dá)前段時(shí)間發(fā)布GH 200包含 36 個(gè) NVLink 開(kāi)關(guān),將 256 個(gè) GH200 Grace Hopper 芯片和 144TB 的共享內(nèi)存連接成一個(gè)單元。除此之外,英偉達(dá)A100、A800、H100、
    的頭像 發(fā)表于 06-29 11:23 ?2.9w次閱讀
    通往AGI之路:揭秘英偉達(dá)A<b class='flag-5'>100</b>、A800、H800、<b class='flag-5'>V100</b>在高性能<b class='flag-5'>計(jì)算</b>與大<b class='flag-5'>模型</b><b class='flag-5'>訓(xùn)練</b>中的霸主地位

    【大語(yǔ)言模型:原理與工程實(shí)踐】揭開(kāi)大語(yǔ)言模型的面紗

    Transformer架構(gòu),利用自注意機(jī)制對(duì)文本進(jìn)行編碼,通過(guò)預(yù)訓(xùn)練、有監(jiān)督微調(diào)和強(qiáng)化學(xué)習(xí)等階段,不斷提升性能,展現(xiàn)出強(qiáng)大的語(yǔ)言理解和生成
    發(fā)表于 05-04 23:55

    特斯拉V100 Nvlink是否支持v100卡的nvlink變種的GPU直通?

    /4029/SYS-4029GP-TVRT.cfm)我們正試圖做pci將GPU直接傳輸?shù)絍M中但是當(dāng)我們通過(guò)pci設(shè)備并安裝驅(qū)動(dòng)程序時(shí),我們會(huì)從nvidia-nvlink模塊中獲得錯(cuò)誤。是否支持v100卡的nvlink
    發(fā)表于 09-12 16:25

    在Ubuntu上使用Nvidia GPU訓(xùn)練模型

    問(wèn)題最近在Ubuntu上使用Nvidia GPU訓(xùn)練模型的時(shí)候,沒(méi)有問(wèn)題,過(guò)一會(huì)再訓(xùn)練出現(xiàn)非??D,使用nvidia-smi查看發(fā)現(xiàn),顯示GPU
    發(fā)表于 01-03 08:24

    真正的計(jì)算卡卡皇 Tesla V100計(jì)算卡性能將在8月份公布

    雖然Vega顯卡就要發(fā)布了,而且Nvidia的Titan Xp也已經(jīng)正式發(fā)售,但是這幾款顯卡在狂暴的Tesla V100計(jì)算卡面前還是顯得有點(diǎn)弱小,尤其是在處理高性能運(yùn)算的時(shí)候。那么作為真正的卡皇,Nvidia什么時(shí)候揭示
    發(fā)表于 05-16 16:25 ?1809次閱讀

    Nvidia發(fā)布世界最大GPU

    日前,英偉達(dá)GTC 2018(GPU Technology Conference 2018,以下簡(jiǎn)稱GTC)在美國(guó)圣何塞舉行。英偉達(dá)再一次在提升計(jì)算力的路上越走越遠(yuǎn)。GPU產(chǎn)品依然是主
    的頭像 發(fā)表于 03-31 09:12 ?5245次閱讀

    NVIDIA CEO推出新核彈_Tesla V100新品和Quadro GV100

    盯著凌晨GTC大會(huì)觀看的網(wǎng)友可能會(huì)略感失望,新的游戲顯卡果然沒(méi)有在這個(gè)注重AI、深度學(xué)習(xí)的圖形峰會(huì)上公開(kāi)。當(dāng)然,NVIDIA CEO還是推出了新核彈,基于GV100核心Tesla V100
    的頭像 發(fā)表于 04-07 01:46 ?6879次閱讀

    如何用單獨(dú)的GPU,在CIFAR-10圖像分類數(shù)據(jù)集上高效地訓(xùn)練殘差網(wǎng)絡(luò)

    現(xiàn)在我們假設(shè)在一個(gè)英偉達(dá)Volta V100 GPU上用100%的計(jì)算力,訓(xùn)練將需要多長(zhǎng)時(shí)間。網(wǎng)
    的頭像 發(fā)表于 11-12 09:35 ?6852次閱讀

    GPU如何訓(xùn)練大批量模型?方法在這里

    深度學(xué)習(xí)模型和數(shù)據(jù)集的規(guī)模增長(zhǎng)速度已經(jīng)讓 GPU也開(kāi)始捉襟見(jiàn)肘,如果你的 GPU 連一個(gè)樣本都容不下,你要如何
    發(fā)表于 12-03 17:24 ?849次閱讀

    百度大腦EdgeBoard計(jì)算卡基于Resnet50/Mobile-SSD模型的性能評(píng)測(cè)

    GPU: V100 16GB VMem Edgeboard 訓(xùn)練模型 模型使用AIStudio 進(jìn)行訓(xùn)
    發(fā)表于 10-30 07:32 ?944次閱讀

    NVIDIA頂級(jí)計(jì)算Tesla V100s發(fā)布,大幅度提速

    SC 2019超算大會(huì)期間,NVIDIA低調(diào)發(fā)布了新款頂級(jí)計(jì)算Tesla V100S,自然就是此前Tesla V100的升級(jí)版本。
    的頭像 發(fā)表于 11-25 09:48 ?1.9w次閱讀

    英偉達(dá)Tesla V100介紹

    Tesla V100s在物理上與V100相同。它遵循類似的雙插槽PCIe附加卡(AIC)設(shè)計(jì),并采用Nvidia的參考散熱器。不過(guò),還不清楚Nvidia是否會(huì)以SXM2板的外形尺寸提供V100
    的頭像 發(fā)表于 11-28 15:18 ?1.7w次閱讀

    基于NVIDIA Tesla V100 GPU等硬件打造隱私計(jì)算加速方案

    隱私計(jì)算全棧技術(shù)與基礎(chǔ)設(shè)施提供商星云Clustar,依托自身的算加速能力及基于NVIDIA Tesla V100 GPU等硬件打造隱私
    的頭像 發(fā)表于 08-02 14:43 ?4358次閱讀

    llm模型訓(xùn)練一般用什么系統(tǒng)

    。 硬件系統(tǒng) 1.1 GPU(圖形處理器) 在訓(xùn)練大型語(yǔ)言模型時(shí),GPU是首選的硬件設(shè)備。相比于CPU,GPU具有更高的并行處理能力,可以顯
    的頭像 發(fā)表于 07-09 10:02 ?294次閱讀

    為什么ai模型訓(xùn)練要用gpu

    GPU憑借其強(qiáng)大的并行處理能力和高效的內(nèi)存系統(tǒng),已成為AI模型訓(xùn)練不可或缺的重要工具。
    的頭像 發(fā)表于 10-24 09:39 ?100次閱讀