久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

用上Pytorch Lightning的這六招,,深度學(xué)習(xí)pipeline提速10倍!

 520jefferson 2021-10-04
磐創(chuàng)AI推薦搜索關(guān)鍵詞列表:AI學(xué)習(xí)路線資源PyTorch


  磐創(chuàng)AI分享  

來源 | 量子位(QbitAI)

編輯 | 金磊,、發(fā)自,、凹非寺

面對(duì)數(shù)以億計(jì)的圖片數(shù)據(jù),到底該用什么樣的方法才能快速搞實(shí)驗(yàn),?

這樣的問題,,或許在做機(jī)器學(xué)習(xí)研究的你,也會(huì)經(jīng)常遇到,。

而就在最近,,一個(gè)國外小哥就提出了一種建議:

在Pytorch lightning基礎(chǔ)上,,讓深度學(xué)習(xí)pipeline速度提升10倍

圖片

用他自己的話來說就是——“爬樓時(shí)像給了你一個(gè)電梯”,。

這般“酸爽”,,到底是如何做到的呢?

圖片

優(yōu)化機(jī)器學(xué)習(xí)pipeline,,很重要

無論你是身處學(xué)術(shù)界還是工業(yè)界,,時(shí)間等各種因素,往往會(huì)成為你在搞實(shí)驗(yàn)的枷鎖,。

尤其是隨著數(shù)據(jù)集規(guī)模和機(jī)器學(xué)習(xí)模型,,變得越發(fā)龐大和復(fù)雜,讓實(shí)驗(yàn)變得既費(fèi)時(shí)又耗力,。

圖片

提速這件事,,就變得至關(guān)重要。

例如在2012年的時(shí)候,,訓(xùn)練一個(gè)AlexNet,,要花上5到6天的時(shí)間。

而現(xiàn)如今,,只需要短短幾分鐘就可以在更大的數(shù)據(jù)集上訓(xùn)練更大的圖像模型,。

這位小哥認(rèn)為,從某種角度上來說,,這是得益于各種各樣的“利器”的出現(xiàn),。

例如Pytorch Lingtning,就是其中一種,。

于是,,他便“死磕”pipeline,總結(jié)了六種“閃電加速”實(shí)驗(yàn)周期的方法,。

并行數(shù)據(jù)加載

數(shù)據(jù)加載和增強(qiáng)(augmentation)往往被認(rèn)為是訓(xùn)練pipeline時(shí)的瓶頸之一,。

一個(gè)典型的數(shù)據(jù)pipeline包含以下步驟:

  • 從磁盤加載數(shù)據(jù)

  • 在運(yùn)行過程中創(chuàng)建隨機(jī)增強(qiáng)

  • 將每個(gè)樣本分批整理

在這個(gè)過程中,倒是可以用多個(gè)CPU進(jìn)程并行加載數(shù)據(jù)來優(yōu)化,。

但與此同時(shí),,還可以通過下面的操作來加速這一過程:

1、將DataLoader中的num_workers參數(shù)設(shè)置為CPU的數(shù)量,。

2,、當(dāng)與GPU一起工作時(shí),將DataLoader中的pin_memory參數(shù)設(shè)置為True,。這可以將數(shù)據(jù)分配到頁鎖定的內(nèi)存中,,從而加快數(shù)據(jù)傳輸?shù)紾PU的速度。

使用分布式數(shù)據(jù)并行的多GPU訓(xùn)練

圖片

與CPU相比,GPU已經(jīng)大大加速了訓(xùn)練和推理時(shí)間,。

但有沒有比一個(gè)GPU更好的方法,?或許答案就是:

多個(gè)GPU!

在PyTorch中,,有幾種范式可以用多個(gè)GPU訓(xùn)練你的模型,。

兩個(gè)比較常見的范式是 “DataParallel ”和 “DistributedDataParallel”。

而小哥采用的方法是后者,,因?yàn)樗J(rèn)為這是一種更可擴(kuò)展的方法,。

但在PyTorch(以及其他平臺(tái))中修改訓(xùn)練pipeline并非易事。

必須考慮以分布式方式加載數(shù)據(jù)以及權(quán)重,、梯度和指標(biāo)的同步等問題。

不過,,有了PyTorch Lightning,,就可以非常容易地在多個(gè)GPU上訓(xùn)練PyTorch模型,還是幾乎不需要修改代碼的那種,!

圖片

混合精度

在默認(rèn)情況下,,輸入張量以及模型權(quán)重是以單精度(float32)定義的。

然而,,某些數(shù)學(xué)運(yùn)算可以用半精度(float16)進(jìn)行,。

這樣一來,就可以顯著提升速度,,并降低了模型的內(nèi)存帶寬,,還不會(huì)犧牲模型的性能。

通過在PyTorch Lightning中設(shè)置混合精度標(biāo)志(flag),,它會(huì)在可能的情況下自動(dòng)使用半精度,,而在其他地方保留單精度。

通過最小的代碼修改,,模型訓(xùn)練的速度可以提升1.5至2倍,。

圖片

早停法

當(dāng)我們訓(xùn)練深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的時(shí)候,通常希望能獲得最好的泛化性能,。

但是所有的標(biāo)準(zhǔn)深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),,比如全連接多層感知機(jī)都很容易過擬合。

當(dāng)網(wǎng)絡(luò)在訓(xùn)練集上表現(xiàn)越來越好,,錯(cuò)誤率越來越低的時(shí)候,,實(shí)際上在某一刻,它在測(cè)試集的表現(xiàn)已經(jīng)開始變差,。

因此,,早停法 (Early Stopping)便在訓(xùn)練過程中加入了進(jìn)來。

具體來說,,就是當(dāng)驗(yàn)證損失在預(yù)設(shè)的評(píng)估次數(shù)(在小哥的例子中是10次評(píng)估)后停止訓(xùn)練,。

這樣一來,,不僅防止了過擬合的現(xiàn)象,而且還可以在幾十個(gè) epoch內(nèi)找到最佳模型,。

圖片

Sharded Training

Sharded Training是基于微軟的ZeRO研究和DeepSpeed庫,。

它顯著的效果,就是讓訓(xùn)練大模型變得可擴(kuò)展和容易,。

否則,,這些模型就不適合在單個(gè)GPU上使用了。

而在Pytorch Lightning的1.2版本中,,便加入了對(duì)Shared Training的支持,。

雖然在小哥的實(shí)驗(yàn)過程中,并沒有看到訓(xùn)練時(shí)間或內(nèi)存占用方面有任何改善,。

但他認(rèn)為,,這種方法在其它實(shí)驗(yàn)中可能會(huì)提供幫助,尤其是在不使用單一GPU的大模型方面,。

圖片

模型評(píng)估和推理中的優(yōu)化

在模型評(píng)估和推理期間,,梯度不需要用于模型的前向傳遞。

因此,,可以將評(píng)估代碼包裹在一個(gè)torch.no_grad上下文管理器中,。

這可以防止在前向傳遞過程中的存儲(chǔ)梯度,從而減少內(nèi)存占用,。

如此一來,,就可以將更大的batch送入模型,讓評(píng)估和推理變得更快,。

效果如何,?

介紹了這么多,你肯定想知道上述這些方法,,具體起到了怎樣的作用,。

小哥為此做了一張表格,詳解了方法的加速效果,。

圖片

那么這些方法,,是否對(duì)在做機(jī)器學(xué)習(xí)實(shí)驗(yàn)的你有所幫助呢?

快去試試吧~

參考鏈接:

https://devblog./how-we-used-pytorch-lightning-to-make-our-deep-learning-pipeline-10x-faster-731bd7ad318a

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多