加速DNN模型訓(xùn)練速度方法中,數(shù)據(jù)并行受到單個(gè)加速器可支持模型大小的限制;而模型并行因?yàn)镈NN順序性導(dǎo)致大量算力浪費(fèi)。目前Google推出GPipe,將兩種方法的優(yōu)勢進(jìn)行結(jié)合,解決了兩者的劣勢,成功提升訓(xùn)練速度。
深度神經(jīng)網(wǎng)絡(luò)(DNN)已經(jīng)推動(dòng)了許多機(jī)器學(xué)習(xí)任務(wù),比如語音識別,視覺識別和語言處理。
BigGan、Bert和GPT2.0的最新進(jìn)展表明,越大的DNN模型,越能帶來更好的性能。
而視覺識別任務(wù)的過去進(jìn)展也表明,模型大小和分類準(zhǔn)確性之間,存在很強(qiáng)的相關(guān)性。
例如2014年ImageNet視覺識別挑戰(zhàn)賽中,獲勝者GoogleNet使用400萬參數(shù),精確度達(dá)到了74.8%。
而2017年ImageNet挑戰(zhàn)賽的獲勝者Squeeze-and-Excitation Networks,使用1.5億參數(shù),精確度達(dá)到了82.7%。
僅僅3年,數(shù)據(jù)處理能力翻了36番。而在同一時(shí)期,GPU內(nèi)存僅增加了約3倍。
當(dāng)前最先進(jìn)的圖像模型,已經(jīng)達(dá)到了云TPUv2內(nèi)存的可用上限。因此,迫切需要一種更高效、可擴(kuò)展的基礎(chǔ)設(shè)施,以實(shí)現(xiàn)大規(guī)模深度學(xué)習(xí),并克服當(dāng)前加速器的內(nèi)存限制。
ImageNet精度和模型大小之間的強(qiáng)相關(guān)性
基于以上目的,Google推出了GPipe。
GPipe是什么,效果如何?
GPipe是一個(gè)分布式機(jī)器學(xué)習(xí)、可擴(kuò)展的管道并行庫,可以學(xué)習(xí)巨型深度神經(jīng)網(wǎng)絡(luò)。
使用同步隨機(jī)梯度下降和管道并行性進(jìn)行訓(xùn)練,適用于由多個(gè)連續(xù)層組成的任何DNN。
GPipe允許研究人員輕松部署更多加速器來訓(xùn)練更大的模型,并在不調(diào)整超參數(shù)的情況下,達(dá)到提升性能的效果。
GPipe將跨加速器和管道執(zhí)行的網(wǎng)絡(luò)層進(jìn)行分區(qū),以便實(shí)現(xiàn)對硬件更高的利用率,同時(shí)利用重新計(jì)算來將激活的內(nèi)存使用降至最低。
例如,使用8個(gè)加速器的分區(qū),GPipe就可以訓(xùn)練25倍大神經(jīng)網(wǎng)絡(luò)。
而GPipe也幾乎實(shí)現(xiàn)了線性加速。使用4倍數(shù)量的加速器,處理同一個(gè)模型的速度提升了3.5倍;16倍加速器速度提升11倍。
同時(shí)它也要保證計(jì)算的梯度和分區(qū)的數(shù)量保持一致,從而在不對模型的參數(shù)做任何改動(dòng)的前提下,都能保持線性加速。
目前,核心GPipe庫已在Lingvo框架下開源。
為什么要對跨加速器的模型進(jìn)行分區(qū)?
有兩種標(biāo)準(zhǔn)方法可以加速DNN模型:
數(shù)據(jù)并行方法,使用更多的機(jī)器并將輸入數(shù)據(jù)分開
模型并行性。將模型移動(dòng)到如GPU或TPU等具有加速模型訓(xùn)練的特殊硬件
然而加速器的內(nèi)存、與主機(jī)的通信帶寬均有限。因此模型并行性就需要將模型進(jìn)行分割,將不同的分區(qū)分配給不通過的加速器。
可是由于由于DNN的順序性,這種樸素的策略可能導(dǎo)致在計(jì)算期間,只有一個(gè)加速器處于激活狀態(tài),導(dǎo)致大量算力的浪費(fèi)。
而標(biāo)準(zhǔn)數(shù)據(jù)并行方法是允許在多個(gè)加速器上,同時(shí)訓(xùn)練不同輸入數(shù)據(jù)的相同模型,但每個(gè)加速器可支持模型大小又有限制。
GPipe的做法是將模型分割,并劃分給不同的加速器,自動(dòng)將小Batch拆分為更小的微Batch,這樣就實(shí)現(xiàn)了跨多個(gè)加速器的高效訓(xùn)練。
此外,因?yàn)樘荻纫恢痹谖⑴沃欣鄯e,所以分區(qū)數(shù)量不會(huì)影響模型質(zhì)量。
Time部分:由于網(wǎng)絡(luò)的連續(xù)性,幼稚模型并行策略導(dǎo)致嚴(yán)重的未充分利用。 一次只有一個(gè)加速器處于活動(dòng)狀態(tài)
Bubble部分:GPipe將輸入小批量分成較小的微批次,使不同的加速器可以同時(shí)在單獨(dú)的微批次上工作
使用GPipe和不使用,之間的差異有多大?
一個(gè)TPUv2有8個(gè)加速器核心和64GB內(nèi)存(每個(gè)加速器8GB),由于內(nèi)存限制,單個(gè)加速器可以訓(xùn)練的參數(shù)量上限是8200萬。
借助反向傳播和批量分割中的重新計(jì)算,GPipe將中間激活內(nèi)存從6.26GB減少到3.46GB,將單個(gè)加速器參數(shù)處理上限提升至3.18億個(gè)。
我們還看到,通過管道并行性,最大模型大小與分區(qū)數(shù)成正比,如預(yù)期的那樣。
通過GPipe,AmoebaNet能夠在云TPUv2的8個(gè)加速器上加入18億個(gè)參數(shù),比沒有GPipe的情況下多25倍。
Google測量了GPipe對AmoebaNet-D模型吞吐量的影響。效率和加速器的數(shù)量幾乎是呈線性加速,8個(gè)加速器+8個(gè)分區(qū),比2個(gè)加速器+2個(gè)分區(qū)快2.5倍。
TPUv3效果更好。在1024個(gè)令牌句子上啟用了80億個(gè)參數(shù)Transformer語言模型,16個(gè)加速器將速度提升了11倍
使用GPipe加速AmoebaNet-D,這種模型不適合一個(gè)加速器
基線naive-2是將模型拆分為兩個(gè)分區(qū)時(shí)本機(jī)分區(qū)方法的性能
Pipeline-k指的是GPipe的性能,它將模型分成帶有k個(gè)加速器的k個(gè)分區(qū)
GPipe還可以通過使用更多加速器來擴(kuò)展訓(xùn)練,而無需更改超參數(shù)。因此,它可以與數(shù)據(jù)并行性相結(jié)合,以互補(bǔ)的方式使用更多的加速器來擴(kuò)展神經(jīng)網(wǎng)絡(luò)訓(xùn)練。
GPipe精確度能達(dá)到多少?
前面我們提到,處理的數(shù)據(jù)量越大,獲得的精度就越高。
Google在ImageNet ILSVRC-2012數(shù)據(jù)集上,使用Cloud TPUv2訓(xùn)練了一個(gè)有5.57億參數(shù)、480 x 480輸入圖像尺寸的AmoebaNet-B模型。
該網(wǎng)絡(luò)被分成4個(gè)分區(qū),這個(gè)巨型模型在多個(gè)流行數(shù)據(jù)集上表現(xiàn)良好,在沒有任何外部數(shù)據(jù)的情況下,精度達(dá)到了最先進(jìn)的84.3% top-1,以及97% top-5的single-crop驗(yàn)證準(zhǔn)確度。
大型神經(jīng)網(wǎng)絡(luò)不僅適用于ImageNet等數(shù)據(jù)集,還通過遷移學(xué)習(xí),與其他數(shù)據(jù)集息息相關(guān)。
目前我們已知ImageNet模型越好,遷移就越好。Google在CIFAR10和CIFAR100數(shù)據(jù)集上進(jìn)行了遷移學(xué)習(xí)實(shí)驗(yàn),將最佳公布的CIFAR-10精度提高到99%,將CIFAR-100精度提高到91.3%。
哪里能獲取到GPipe?
Github:
https://github.com/tensorflow/lingvo/blob/master/lingvo/core/gpipe.py
-
加速器
+關(guān)注
關(guān)注
2文章
806瀏覽量
38055 -
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4779瀏覽量
101125 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8438瀏覽量
133016
原文標(biāo)題:谷歌開源效率怪獸GPipe,速度提升25倍,CIFAR-10精度達(dá)到99%
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論