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

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

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

如何顯著提升Vision Transformer的訓(xùn)練效率

深度學(xué)習(xí)自然語(yǔ)言處理 ? 來(lái)源:GiantPandaCV ? 作者:GiantPandaCV ? 2022-05-24 10:46 ? 次閱讀

近期MetaAI發(fā)布了一篇博客,關(guān)于如何顯著提升Vision Transformer的訓(xùn)練效率。

原文:[Significantly faster Vision Transformer training]

鏈接:https://ai.facebook.com/blog/significantly-faster-vision-transformer-training

What the research is

Vision Transformer模型幾乎火遍計(jì)算機(jī)視覺(jué)各個(gè)領(lǐng)域,其性能隨著參數(shù)增加和更久的訓(xùn)練過(guò)程而得到提升。隨著模型越來(lái)越大,超過(guò)了萬(wàn)億次浮點(diǎn)運(yùn)算的規(guī)模,該領(lǐng)域達(dá)到了瓶頸:訓(xùn)練一個(gè)模型往往要一個(gè)月,需要幾百上千個(gè)GPU,導(dǎo)致大部分人無(wú)法接觸到大規(guī)模ViT模型,并進(jìn)而增加了對(duì)加速器的需求。

為了降低門(mén)檻,讓更多人能夠應(yīng)用ViT,我們開(kāi)發(fā)一系列方法來(lái)加速整個(gè)訓(xùn)練。我們基于MetaAI的圖像分類(lèi)模型庫(kù)PyCls實(shí)現(xiàn)了一系列優(yōu)化,這些優(yōu)化極大的提升了模型訓(xùn)練過(guò)程的吞吐量:

d3d58a30-da96-11ec-ba43-dac502259ad0.png

How it works ?

我們首先對(duì)代碼庫(kù)進(jìn)行分析,以定位訓(xùn)練效率低下的原因,最后關(guān)注點(diǎn)落在計(jì)算類(lèi)型上:大部分模型都是用FP32進(jìn)行訓(xùn)練,如果使用FP16訓(xùn)練的話,可以降低顯存占用,并提高模型訓(xùn)練速度,但這一做法經(jīng)常會(huì)導(dǎo)致準(zhǔn)確率下降

所以我們選了一個(gè)折中的方法:自動(dòng)混合精度。在該方法下,我們用half類(lèi)型進(jìn)行計(jì)算,以加快訓(xùn)練,減少顯存使用。并以fp32類(lèi)型存儲(chǔ)參數(shù),以保證模型準(zhǔn)確率。其中我們沒(méi)有手動(dòng)將網(wǎng)絡(luò)各部分轉(zhuǎn)換成half類(lèi)型,而是應(yīng)用AMP各種模式(如O1, O2, O3),以尋找一個(gè)既能提升速度又不影響精度的平衡點(diǎn)。

FSDP

為了讓訓(xùn)練更加高效,我們應(yīng)用了FSDP訓(xùn)練策略,他能夠?qū)?shù),梯度,優(yōu)化器狀態(tài)分片到各GPU上。在FSDP的幫助下,我們可以用更少的GPU資源構(gòu)建更大的模型。

FSDP策略可以參考 [數(shù)據(jù)并行Deep-dive: 從DP 到 Fully Sharded Data Parallel (FSDP)完全分片數(shù)據(jù)并行] 鏈接:https://zhuanlan.zhihu.com/p/485208899

MTA Optimizer

前向計(jì)算完畢后,優(yōu)化器需要對(duì)各個(gè)參數(shù)進(jìn)行修改。而當(dāng)參數(shù)比較多的情況下,對(duì)應(yīng)啟動(dòng)的Optimizer Kernel就會(huì)變得很多,通常這些Kernel都比較小,計(jì)算負(fù)擔(dān)不大,啟動(dòng)Kernel的開(kāi)銷(xiāo)反而占了大頭。

ContiguousParams中,它將模型參數(shù)放置到一塊連續(xù)的顯存中進(jìn)行計(jì)算,這樣就能減少優(yōu)化器這部分的時(shí)間。下圖是Resnet50+SGD是否應(yīng)用ContiguousParams的比較,可以看到OptimizerStep這部分時(shí)間顯著減少了。

d4089a74-da96-11ec-ba43-dac502259ad0.png

而NVIDIA的Apex庫(kù)的做法則是在底層重新實(shí)現(xiàn)了一系列MultiTensorOptimizer,如Adam, Adagrad等等。

Apex這種方法比較硬核,普通用戶(hù)如果想要自己自定義優(yōu)化器并應(yīng)用Multi Tensor的優(yōu)化,就必須改動(dòng)底層CUDA代碼。而最近PyTorch也在計(jì)劃提供了一系列foreach接口[Replace optimizers in torch.optim with the ones from torch.optim._multi_tensor] 鏈接:https://github.com/pytorch/pytorch/pull/49039,讓用戶(hù)只需要在Python層即可享受到優(yōu)化,對(duì)應(yīng)的MultiTensor版Momentum優(yōu)化器代碼如下所示:

torch._foreach_mul_(bufs,momentum)
torch._foreach_add_(bufs,grads,alpha=1-dampening)

Pooled Classifier

原版的ViT是額外加了一個(gè)分類(lèi)token,來(lái)輸出最后的分類(lèi)結(jié)果。而這里采用平均池化 如:https://github.com/facebookresearch/pycls/blob/main/pycls/core/config.py#L205 處理最后的分類(lèi)

Batch Second Input Tensor Layout

這里的數(shù)據(jù)格式與以往不同,將batch維度放在第二維,并在調(diào)用nn.MultiheadAttention的時(shí)候,設(shè)置batch_first=False,以減少不必要的轉(zhuǎn)置

ifself.batch_firstandis_batched:
returnattn_output.transpose(1,0),attn_output_weights
else:
returnattn_output,attn_output_weights

總感覺(jué)這個(gè)實(shí)現(xiàn)怪怪的

其他優(yōu)化

我們?cè)诓扇?60大小的batchsize下,達(dá)到了1.51倍的加速比,進(jìn)一步的我們將batchsize設(shè)置為384,并將圖片大小增大到256,達(dá)到了1.86倍加速比。在全FP16運(yùn)算下,能夠達(dá)到2.18倍加速比,盡管這偶爾會(huì)降低準(zhǔn)確率(在實(shí)驗(yàn)中,準(zhǔn)確率降低不到10%)。

d451532c-da96-11ec-ba43-dac502259ad0.png

使用上述優(yōu)化,我們將Imagenet1K數(shù)據(jù)集每epoch訓(xùn)練時(shí)間從0.65小時(shí)降低到0.43小時(shí)

d4786106-da96-11ec-ba43-dac502259ad0.png

我們還研究了不同GPU配置對(duì)訓(xùn)練速度的影響,在不同配置下我們都實(shí)現(xiàn)了比DDP baseline更高的吞吐量。隨著GPU增加,吞吐量會(huì)因?yàn)樵O(shè)備之間的通信開(kāi)銷(xiāo)略微下降。然而即使在64塊GPU下,我們?nèi)匀槐菵DP基線快1.83倍

d4c4af7a-da96-11ec-ba43-dac502259ad0.png

文中鏈接

PyCls :https://github.com/facebookresearch/pycls

ContiguousParams:https://github.com/PhilJd/contiguous_pytorch_params

Adam:https://github.com/NVIDIA/apex/blob/master/csrc/multi_tensor_adam.cu

審核編輯 :李倩



聲明:本文內(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)投訴
  • 加速器
    +關(guān)注

    關(guān)注

    2

    文章

    790

    瀏覽量

    37686
  • Vision
    +關(guān)注

    關(guān)注

    1

    文章

    195

    瀏覽量

    18014

原文標(biāo)題:如何更快地訓(xùn)練Vision Transformer

文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    自動(dòng)駕駛中一直說(shuō)的BEV+Transformer到底是個(gè)啥?

    感知、理解和預(yù)測(cè)方面表現(xiàn)得更為強(qiáng)大,徹底終結(jié)了2D直視圖+CNN時(shí)代。BEV+Transformer通過(guò)鳥(niǎo)瞰視角與Transformer模型的結(jié)合,顯著提升了自動(dòng)駕駛
    的頭像 發(fā)表于 11-07 11:19 ?182次閱讀
    自動(dòng)駕駛中一直說(shuō)的BEV+<b class='flag-5'>Transformer</b>到底是個(gè)啥?

    提升效率:RTC時(shí)鐘實(shí)用設(shè)置

    今天來(lái)給大家講解的是RTC時(shí)鐘實(shí)用性,提升絕對(duì)的效率
    的頭像 發(fā)表于 11-04 16:35 ?582次閱讀
    <b class='flag-5'>提升</b><b class='flag-5'>效率</b>:RTC時(shí)鐘實(shí)用設(shè)置

    NVIDIA助力麗蟾科技打造AI訓(xùn)練與推理加速解決方案

    麗蟾科技通過(guò) Leaper 資源管理平臺(tái)集成 NVIDIA AI Enterprise,為企業(yè)和科研機(jī)構(gòu)提供了一套高效、靈活的 AI 訓(xùn)練與推理加速解決方案。無(wú)論是在復(fù)雜的 AI 開(kāi)發(fā)任務(wù)中,還是在高并發(fā)推理場(chǎng)景下,都能夠確保項(xiàng)目的順利進(jìn)行,并顯著
    的頭像 發(fā)表于 10-27 10:03 ?143次閱讀
    NVIDIA助力麗蟾科技打造AI<b class='flag-5'>訓(xùn)練</b>與推理加速解決方案

    英偉達(dá)推出歸一化Transformer,革命性提升LLM訓(xùn)練速度

    了新的突破。 相較于傳統(tǒng)的Transformer架構(gòu),nGPT在保持原有精度的同時(shí),直接將大型語(yǔ)言模型(LLM)的訓(xùn)練速度提升了高達(dá)20倍。這一顯著的性能
    的頭像 發(fā)表于 10-23 11:30 ?318次閱讀

    【《大語(yǔ)言模型應(yīng)用指南》閱讀體驗(yàn)】+ 基礎(chǔ)知識(shí)學(xué)習(xí)

    、機(jī)器翻譯、文本生成等領(lǐng)域具有廣泛應(yīng)用。它們能夠基于用戶(hù)的提問(wèn)或描述生成相關(guān)的答案或執(zhí)行指令,極大地提升了信息檢索和利用的效率。 2. 局限性 盡管大語(yǔ)言模型在自然語(yǔ)言理解方面取得了顯著進(jìn)展,但它們?nèi)匀淮嬖?/div>
    發(fā)表于 08-02 11:03

    Transformer能代替圖神經(jīng)網(wǎng)絡(luò)嗎

    Transformer作為一種在處理序列數(shù)據(jù)方面表現(xiàn)出色的深度學(xué)習(xí)模型,自其提出以來(lái),已經(jīng)在自然語(yǔ)言處理(NLP)、時(shí)間序列分析等領(lǐng)域取得了顯著的成果。然而,關(guān)于Transformer是否能完全代替圖神經(jīng)網(wǎng)絡(luò)(GNN)的問(wèn)題,需
    的頭像 發(fā)表于 07-12 14:07 ?359次閱讀

    使用PyTorch搭建Transformer模型

    Transformer模型自其問(wèn)世以來(lái),在自然語(yǔ)言處理(NLP)領(lǐng)域取得了巨大的成功,并成為了許多先進(jìn)模型(如BERT、GPT等)的基礎(chǔ)。本文將深入解讀如何使用PyTorch框架搭建Transformer模型,包括模型的結(jié)構(gòu)、訓(xùn)練
    的頭像 發(fā)表于 07-02 11:41 ?1429次閱讀

    進(jìn)一步解讀英偉達(dá) Blackwell 架構(gòu)、NVlink及GB200 超級(jí)芯片

    。 算力:各種浮點(diǎn)計(jì)算能力在新一代GPU中得到了顯著提升。 3. 創(chuàng)新功能 Transformer 引擎:第二代引擎顯著提高了計(jì)算、帶寬和模型大小
    發(fā)表于 05-13 17:16

    【大語(yǔ)言模型:原理與工程實(shí)踐】大語(yǔ)言模型的基礎(chǔ)技術(shù)

    Transformer有效避免了CNN中的梯度消失和梯度爆炸問(wèn)題,同時(shí)提高了處理長(zhǎng)文本序列的效率。此外,模型編碼器可以運(yùn)用更多層,以捕獲輸入序列中元素間的深層關(guān)系,并學(xué)習(xí)更全面的上下文向量表示。 預(yù)訓(xùn)練語(yǔ)言模型
    發(fā)表于 05-05 12:17

    工業(yè)觸摸顯示屏在提升生產(chǎn)效率、降低成本等方面具有顯著優(yōu)勢(shì)

     工業(yè)觸摸顯示屏在提升生產(chǎn)效率、降低成本等方面發(fā)揮著顯著的作用。具體來(lái)說(shuō),其主要優(yōu)勢(shì)體現(xiàn)在以下幾個(gè)方面。
    的頭像 發(fā)表于 04-23 10:16 ?440次閱讀

    Cognizant與Google Cloud深化合作,提升軟件交付效率

    近日,知名IT服務(wù)提供商Cognizant與Google Cloud宣布將進(jìn)一步擴(kuò)大合作伙伴關(guān)系,共同致力于增強(qiáng)軟件交付生命周期,并顯著提升開(kāi)發(fā)人員的工作效率。
    的頭像 發(fā)表于 03-26 10:01 ?316次閱讀

    景嘉微AI訓(xùn)練等領(lǐng)域智算模塊及整機(jī)研發(fā)成功,速度提升顯著

    據(jù)悉,景嘉微此舉旨在大范圍地拓展AI推理、訓(xùn)練以及科學(xué)計(jì)算等業(yè)務(wù),顯著提升自身核心競(jìng)爭(zhēng)力,穩(wěn)固在相關(guān)領(lǐng)域內(nèi)的市場(chǎng)地位。除此之外,新產(chǎn)品的發(fā)布還被公司視為推動(dòng)實(shí)施長(zhǎng)遠(yuǎn)發(fā)展戰(zhàn)略的重要步驟。
    的頭像 發(fā)表于 03-14 15:19 ?780次閱讀

    螞蟻集團(tuán)AI研發(fā)部門(mén)開(kāi)源AI Infra技術(shù),助力大模型訓(xùn)練效率提升

    螞蟻集團(tuán)AI創(chuàng)新研發(fā)部門(mén)NextEvo近日宣布,他們將全面開(kāi)源AI Infra技術(shù),以推動(dòng)AI研發(fā)效率提升。該技術(shù)框架名為DLRover,目標(biāo)在于實(shí)現(xiàn)大規(guī)模分布式訓(xùn)練的智能化。
    的頭像 發(fā)表于 02-04 10:01 ?975次閱讀

    Transformer壓縮部署的前沿技術(shù):RPTQ與PB-LLM

    隨著人工智能技術(shù)的迅速發(fā)展,Transformer在自然語(yǔ)言處理、機(jī)器翻譯、問(wèn)答系統(tǒng)等領(lǐng)域取得了顯著的性能提升。
    的頭像 發(fā)表于 01-24 14:05 ?1107次閱讀
    <b class='flag-5'>Transformer</b>壓縮部署的前沿技術(shù):RPTQ與PB-LLM

    探索Transformer Block精簡(jiǎn)的方式

    作者對(duì)Transformer Block移除了各種參數(shù),減少了15%參數(shù)量,提高了15%的訓(xùn)練速度,各個(gè)環(huán)節(jié)都有做充分的實(shí)驗(yàn),但一些經(jīng)驗(yàn)性得到的結(jié)論也并沒(méi)有直接回答一些問(wèn)題(如LN為什么影響收斂速度)。
    發(fā)表于 12-06 09:58 ?535次閱讀
    探索<b class='flag-5'>Transformer</b> Block精簡(jiǎn)的方式