《FASTER NEURAL NETWORK TRAINING WITH DATA ECHOING》文章閱讀總結(jié)與思考。
論文寫的還挺多颤诀,不過都比較容易理解字旭。當(dāng)然論文非常學(xué)術(shù)語(yǔ)(就是廢話空話太多),于是我用最簡(jiǎn)潔的話吧本文做一個(gè)總結(jié)崖叫,方便讀者學(xué)習(xí)交流遗淳。學(xué)術(shù)搬運(yùn)工是我沒跑了:)
一、文章概述
大家已經(jīng)對(duì)摩爾定律十分熟悉了心傀,GPU和其他硬件加速器極大地加速了神經(jīng)網(wǎng)絡(luò)的訓(xùn)練(GPU屈暗、TPU、編程有點(diǎn)復(fù)雜的FPGA還有AI專用加速器)但是數(shù)據(jù)傳輸以及預(yù)處理仍然是非常慢脂男。隨著加速器的不斷改進(jìn)养叛,這些前期階段所花費(fèi)的時(shí)間將逐漸成為訓(xùn)練速度的瓶頸(就是我們常說(shuō)的“存儲(chǔ)墻”
)。作為研究者宰翅,我們的目標(biāo)只有一個(gè)了弃甥,那就是讓系統(tǒng)變的更快,讓訓(xùn)練變得更快V稀淆攻!PS:這個(gè)時(shí)候心疼我可憐的AI室友,訓(xùn)練代價(jià)非常大嘿架,所以中途不敢有任何閃失瓶珊。
好了言歸正傳,那么為了讓訓(xùn)練更快要怎么做呢耸彪?文章給了兩個(gè)可以考慮的方向:
- (1)使非加速器工作地更快
- (2)減少非加速器所需的工作量伞芹。
選項(xiàng)(1)可能需要大量的工程工作或技術(shù)探索,給系統(tǒng)增加太多的復(fù)雜性蝉娜。我的理解是加速CPU的計(jì)算能力丑瞧,或者寫代碼的時(shí)候用考慮更快速的更簡(jiǎn)潔的函數(shù)等等柑土。反正是非常麻煩的一件事情。
因此绊汹,作者將重點(diǎn)放在選項(xiàng)(2)上稽屏,探索減少訓(xùn)練前期階段的工作量的方法。既然數(shù)據(jù)傳輸于預(yù)處理這么慢西乖,那就讓他少做一點(diǎn)吧狐榔。
下面我們可以看一個(gè)簡(jiǎn)單的深度學(xué)習(xí)訓(xùn)練過程:
- 1 讀數(shù)據(jù)并解碼數(shù)據(jù)
- 2 對(duì)數(shù)據(jù)進(jìn)行混洗(打亂數(shù)據(jù)的順序)
- 3 數(shù)據(jù)增強(qiáng)(剪裁,翻轉(zhuǎn))
- 4 把圖片組建成一個(gè)batch批次方便訓(xùn)練
- 5 SGD梯度下降訓(xùn)練過程
由于任何流程階段的輸出都可以緩沖获雕,因此不同階段的計(jì)算互相重疊薄腻,最慢的階段將占用主要的訓(xùn)練時(shí)間。即短板效應(yīng)届案。
本文中的假設(shè)是基于預(yù)處理階段非常慢庵楷,訓(xùn)練非常快這種前提楣颠,如下圖:
左圖就是先有的某種訓(xùn)練情況:文章中用上下游(Upstream與Downstream來(lái)形容尽纽,害我理解了半天。能看出來(lái)寫論文造概念多么重要童漩。弄贿。。)來(lái)分別代表讀取數(shù)據(jù)預(yù)處理矫膨、SGD訓(xùn)練差凹。
左圖Idle的原因是因?yàn)橛?xùn)練太快,要等待下一個(gè)階段的數(shù)據(jù)(雖然有Pipeline侧馅,但是還是慢)危尿。于是,在這篇論文中馁痴,作者研究如何通過減少訓(xùn)練前期部分的時(shí)間來(lái)加速神經(jīng)網(wǎng)絡(luò)訓(xùn)練(圖 2a)脚线。作者將訓(xùn)練過程中第一部分的輸出重復(fù)用于多個(gè) SGD 更新,以利用空閑計(jì)算能力弥搞。這類算法稱為 “數(shù)據(jù)回送”(data echoing)
,每個(gè)中間輸出被使用的次數(shù)稱為 回送因子(echoing factor)
渠旁。 數(shù)據(jù)回送算法在訓(xùn)練流程中的某個(gè)位置(SGD 更新之前)插入重復(fù)階段攀例。如果上游任務(wù)(重復(fù)階段之前)花費(fèi)的時(shí)間超過下游任務(wù)(重復(fù)階段之后)花費(fèi)的時(shí)間,算法將回收下游閑置的計(jì)算能力顾腊,并提高模型的 SGD 更新率(圖 2b)粤铭。通過改變插入點(diǎn)、回送因子和 shuffle 程度杂靶,可以得到不同的數(shù)據(jù)回送算法梆惯。
二酱鸭、數(shù)據(jù)回送
數(shù)據(jù)回送指在訓(xùn)練流程中插入一個(gè)重復(fù)階段,回送前一階段的輸出垛吗。這里我們假設(shè)SGD操作(upstream)進(jìn)行e次凹髓,則數(shù)據(jù)回送完成一個(gè)上游步驟和 e 個(gè)下游步驟的時(shí)間為:
其中 Tupstream 是數(shù)據(jù)處理所有階段所用的時(shí)間,Tdownstream 是SGD階所用的時(shí)間怯屉,e 是回送因子蔚舀。
R=Tupstream/Tdownstream表示所需預(yù)處理階段時(shí)間與訓(xùn)練時(shí)間的比例。那么完成一個(gè)上游步驟和 e 個(gè)下游步驟的時(shí)間對(duì)于從 e 到 R 的所有回送因子都是相同的锨络。換句話說(shuō)赌躺,額外的下游步驟是“無(wú)消耗的”,因?yàn)樗鼈兪褂玫氖强臻e的下游計(jì)算能力羡儿。
如果 e=R礼患,并且重復(fù)數(shù)據(jù)和新數(shù)據(jù)價(jià)值相同,則可以實(shí)現(xiàn)最大加速掠归。
考慮到訓(xùn)練過程中的每個(gè)操作都需要一些時(shí)間來(lái)執(zhí)行缅叠,如果在 SGD 更新之前應(yīng)用數(shù)據(jù)回送,R 能取最大值拂到,但這將導(dǎo)致每個(gè) epoch 多次使用同一批數(shù)據(jù)痪署。然而,如果想在上游步驟和下游步驟之間找到更有利的權(quán)衡兄旬,更好的方式是較早的插入回送數(shù)據(jù)狼犯。
所以就需要考慮在不同的階段執(zhí)行數(shù)據(jù)回送操作。
不同插入點(diǎn)的數(shù)據(jù)回送:
批處理前或批處理后的回送(Batch前后):批處理前的回送是指數(shù)據(jù)在樣本級(jí)別而不是批級(jí)別進(jìn)行重復(fù)
领铐。這樣增加了相鄰批次不同的可能性悯森,但代價(jià)是不能復(fù)制一批內(nèi)的樣本。
批處理前回送的算法稱為樣本回送(example echoing)
绪撵,批處理后回送的算法稱為批回送(batch echoing)
瓢姻。
數(shù)據(jù)增強(qiáng)前或數(shù)據(jù)增強(qiáng)后的回送:數(shù)據(jù)增強(qiáng)前的回送允許重復(fù)數(shù)據(jù)進(jìn)行不同的轉(zhuǎn)換,能使重復(fù)數(shù)據(jù)更接近新數(shù)據(jù)。(這里我理解是這樣:如果在shuffle與數(shù)據(jù)增強(qiáng)之間插入數(shù)據(jù)回送,那么雖然用的是同一批數(shù)據(jù)蔓榄,但是兩次增強(qiáng)對(duì)數(shù)據(jù)的處理不同從而生成的數(shù)據(jù)有所區(qū)別)
數(shù)據(jù)回送的表現(xiàn)也受回送階段后 shuffle 程度的影響悬赏。在適用的情況下,作者將 shuffle 作為緩沖區(qū)。緩沖區(qū)越大,shuffle 程度越高,訓(xùn)練算法能夠近似于將整個(gè)訓(xùn)練集加載到內(nèi)存中恍风。
PS;這里的數(shù)據(jù)回送可以放在任何階段,比如下圖的1234 朋贬。后面的實(shí)驗(yàn)首先拿掉了shuffle這個(gè)階段凯楔,所以對(duì)2 3 4先進(jìn)行了效果測(cè)試。
三锦募、實(shí)驗(yàn)
作者在兩個(gè)語(yǔ)言建模任務(wù)摆屯、兩個(gè)圖像分類任務(wù)和一個(gè)目標(biāo)檢測(cè)任務(wù)上驗(yàn)證了數(shù)據(jù)回送的效果。對(duì)于語(yǔ)言建模任務(wù)御滩,作者在 LM1B 和 Common Crawl 數(shù)據(jù)集上訓(xùn)練了 Transformer 模型鸥拧。對(duì)于圖像分類任務(wù),作者在 CIFAR-10 數(shù)據(jù)集上訓(xùn)練了 ResNet-32 模型削解,在 ImageNet 數(shù)據(jù)集上訓(xùn)練了 ResNet-50 模型富弦。對(duì)于目標(biāo)檢測(cè)任務(wù),作者在 COCO 數(shù)據(jù)集上訓(xùn)練了 SSD 模型氛驮。
我們關(guān)心的問題就是這個(gè)方案到底能不能加速模型訓(xùn)練腕柜?能不能提高準(zhǔn)確率?會(huì)不會(huì)帶來(lái)不良影響矫废?
實(shí)驗(yàn)用了一堆篇幅來(lái)說(shuō)我們?cè)趺窗迅鱾€(gè)模型參數(shù)調(diào)到“最優(yōu)”盏缤。相當(dāng)于給讀者說(shuō):我每個(gè)模型的原始Baseline是已經(jīng)達(dá)到上限,如果回送方案測(cè)試的效果更優(yōu)那就是回送方案帶來(lái)的好處蓖扑,從而排除了未知情況干擾唉铜。
3.1 數(shù)據(jù)回送可減少訓(xùn)練所需的全新數(shù)據(jù)的數(shù)量
這個(gè)實(shí)驗(yàn)就是用來(lái)說(shuō)明,我用回放機(jī)制可以使得我模型達(dá)到預(yù)定最優(yōu)效果時(shí)律杠,需要更少的數(shù)據(jù)潭流。(聽起來(lái)很玄學(xué),不過他這五組的測(cè)試效果還不錯(cuò))
五組實(shí)驗(yàn)柜去,橫坐標(biāo)的不同顏色從左到右分別代表:①橘色:不用回放的原始方案灰嫉;②藍(lán)色:在batch操作后階段(下圖階段a)進(jìn)行回放;③淺綠色:在下圖b階段進(jìn)行數(shù)據(jù)回傳嗓奢,我理解的是這個(gè)時(shí)候回傳數(shù)據(jù)會(huì)再進(jìn)行一下Batch操作讼撒;④深綠色:在下圖c階段回傳,數(shù)據(jù)會(huì)再經(jīng)過增強(qiáng)股耽、Batch兩個(gè)操作根盒。
圖中虛線代表最優(yōu)理論讀入數(shù)據(jù)量。就是說(shuō)假如我重復(fù)讀入的數(shù)據(jù)帶來(lái)的信息量與全新的數(shù)據(jù)信息量相等物蝙,那么我就應(yīng)該達(dá)到虛線那個(gè)點(diǎn)炎滞。當(dāng)然,我重復(fù)讀入的數(shù)據(jù)信息量肯定少茬末,所以這個(gè)線是我們理想的線。
根據(jù)測(cè)試結(jié)果我們能看出,整體來(lái)看進(jìn)行回放操作會(huì)減少新數(shù)據(jù)的讀入量丽惭,并且隨著回放操作位置向前移動(dòng)击奶,效果越好(由于越向前移動(dòng)與上一次訓(xùn)練數(shù)據(jù)的差別越大)
3.2 數(shù)據(jù)回送可以縮短訓(xùn)練時(shí)間
實(shí)驗(yàn)對(duì)ResNet-50進(jìn)行測(cè)試(因?yàn)檫@個(gè)模型比較小,而所需數(shù)據(jù)部分占比比較大责掏,所以對(duì)當(dāng)前場(chǎng)景有利)柜砾,這里能達(dá)到R=6,也就是上游時(shí)間是下游時(shí)間的6倍换衬。
于是我們將e設(shè)置為2~5(回放次數(shù))
實(shí)驗(yàn)把回放放到數(shù)據(jù)增強(qiáng)操作之前痰驱,測(cè)試發(fā)現(xiàn),隨著e的增加瞳浦,效果越好担映,數(shù)據(jù)讀取量約少,即訓(xùn)練所需時(shí)間越短叫潦。
3.3在回送因子的合理上限內(nèi)蝇完,數(shù)據(jù)回送是有效的
此外,實(shí)驗(yàn)對(duì)不同e進(jìn)行了測(cè)試矗蕊,是不是回放次數(shù)越多效果就一定越好呢短蜕??
測(cè)試表明傻咖,在batch為1024大小下(并不知道單位朋魔,這arvix上的文章就是不如A嚴(yán)謹(jǐn)),e>8之后效果就反彈了卿操,不過還是比Baseline要好警检;
而當(dāng)我們將batch設(shè)置更大,這個(gè)能承受的e也更大硬纤。所以能說(shuō)明batch越大的話更適合多次回放解滓。這里我覺得可以想極端情況:當(dāng)我batch大到能裝下所有dataset的時(shí)候,那一次回放就是一次epoch筝家,那肯定效果好巴菘恪!hhhh
3.4 批尺寸的增加對(duì)數(shù)據(jù)回送的影響
上一個(gè)實(shí)驗(yàn)稍微點(diǎn)了一下batch的大小溪王,那這次實(shí)驗(yàn)就針對(duì)batch大小詳細(xì)做一下實(shí)驗(yàn)腮鞍。
對(duì)于這個(gè)圖,論文對(duì)其解釋也是有點(diǎn)模糊莹菱,不過我們直觀來(lái)看移国,隨著batch增大batch echoing應(yīng)該是要變好的,而example echoing變差了道伟。對(duì)于batch echoing迹缀,文章解釋為:因?yàn)殡S著批尺寸接近訓(xùn)練集的大小使碾,重復(fù)的批數(shù)據(jù)會(huì)接近新的批數(shù)據(jù)
。而對(duì)于example echoing祝懂,“由于隨著批尺寸的增加票摇,每批中重復(fù)樣本的比例也隨之增加,因此實(shí)際中砚蓬,批尺寸較大的樣本回送的表現(xiàn)可能更像較小的批尺寸的表現(xiàn)矢门。”
灰蛙。這個(gè)我就不是很懂了祟剔。難受
3.5 Shuffle 程度越高,數(shù)據(jù)回送表現(xiàn)更好
之前的測(cè)試都沒有考慮shuffle摩梧,不過如果我們把數(shù)據(jù)混洗操作加入物延,那么隨著混洗buffer大小的增加,對(duì)應(yīng)的效果也是更好障本。也就是說(shuō)隨機(jī)程度越好教届,連續(xù)兩次回放相似度越低。
3.6 數(shù)據(jù)回送不損害準(zhǔn)確率
人們可能擔(dān)心重復(fù)使用數(shù)據(jù)可能會(huì)損害最終的表現(xiàn)性能驾霜,但實(shí)驗(yàn)中沒有觀察到任何類似情況案训。為了進(jìn)一步證明數(shù)據(jù)回送不會(huì)降低解決方案的質(zhì)量,作者在 LM1B 上使用 Transformer 進(jìn)行了實(shí)驗(yàn)粪糙,在 ImageNet 上使用 Resnet-50 進(jìn)行了實(shí)驗(yàn)强霎。
實(shí)驗(yàn)表明用這個(gè)數(shù)據(jù)回放方案可以使得模型讀入更少的數(shù)據(jù)就能達(dá)到最優(yōu)的準(zhǔn)確率。從而節(jié)約了訓(xùn)練時(shí)間蓉冈。
不過對(duì)于精確度城舞,實(shí)驗(yàn)沒有測(cè)試。
四寞酿、結(jié)論
文章又回答了這個(gè)問題:盡管先前研究人員擔(dān)心重復(fù)數(shù)據(jù)的 SGD 更新是無(wú)用的家夺,甚至是有害的。但是對(duì)于實(shí)驗(yàn)中的每一項(xiàng)任務(wù)伐弹,至少有一種數(shù)據(jù)回送方法能夠減少需要從磁盤讀取的樣本數(shù)量拉馋。
目前這個(gè)方案也就是初步提出,感覺里面還要驗(yàn)證很多東西才能說(shuō)他真正有效惨好。放這里供大家學(xué)習(xí)吧煌茴。
其中還有一些問題我也沒有理解很清楚:
- 比如batch操作前后為什么會(huì)有區(qū)別?我之前理解的batch操作就是把數(shù)據(jù)組成一個(gè)batch隊(duì)列日川,所以感覺這個(gè)并不會(huì)對(duì)數(shù)據(jù)順序以及樣子帶來(lái)任何變化蔓腐。文章在測(cè)試的時(shí)候卻給了一些不一樣的反饋。這個(gè)有待深入學(xué)習(xí)一下龄句。
也歡迎大家給我留言回论,方便我們進(jìn)行交流(公眾號(hào)直接發(fā)消息就行了hhhh)
感謝我室友的微信聊天圖散罕,祝早日AAA。