如何利用計算中心成千上百的AI加速芯片的集群,訓(xùn)練參數(shù)量超過百億的大規(guī)模模型?并行計算是一種行之有效的方法,除了分布式并行計算相關(guān)的技術(shù)之外,其實在訓(xùn)練大模型的過程還會融合更多的技術(shù),如新的算法模型架構(gòu)和內(nèi)存/計算優(yōu)化技術(shù)等。
這篇文章梳理我們在大模型訓(xùn)練中使用到的相關(guān)技術(shù)點,主要分為三個方面來回顧現(xiàn)階段使用多AI加速芯片訓(xùn)練大模型的主流方法。
****分布式并行加速:****并行訓(xùn)練主要分為數(shù)據(jù)并行、模型并行、流水線并行、張量并行四種并行方式,通過上述四種主要的分布式并行策略來作為大模型訓(xùn)練并行的主要策略。
****算法模型架構(gòu):****大模型訓(xùn)練離不開Transformer網(wǎng)絡(luò)模型結(jié)構(gòu)的提出,后來到了萬億級稀疏場景中經(jīng)常遇到專家混合模型MoE都是大模型離不開的新算法模型結(jié)構(gòu)。
****內(nèi)存和計算優(yōu)化:****關(guān)于內(nèi)存優(yōu)化技術(shù)主要由激活A(yù)ctivation重計算、內(nèi)存高效的優(yōu)化器、模型壓縮,而計算優(yōu)化則集中體現(xiàn)在混合精度訓(xùn)練、算子融合、梯度累加等技術(shù)上。
大模型訓(xùn)練的目標公式
超大模型訓(xùn)練的總體目標就是提升總的訓(xùn)練速度,減少大模型的訓(xùn)練時間,你知道啦,畢竟訓(xùn)練一個大模型基本上從按下回車的那一刻開始要1到2個月,是很蛋疼的。下面主要看一下在大模型訓(xùn)練中的總訓(xùn)練速度的公式:
總訓(xùn)練速度 ∝ 單卡速度 * 加速芯片數(shù)量 * 多卡加速比
上面公式當中,單卡速度主要由單塊AI加速芯片的運算速度、數(shù)據(jù)IO來決定;而加速芯片數(shù)量這個很清楚,數(shù)量越多增加訓(xùn)練速度;而多卡加速比則是有計算和通訊效率決定。
我們再把使用到技術(shù)跟這個公式關(guān)聯(lián)在一起:
1、單卡速度:單卡速度既然是運算速度和數(shù)據(jù)IO的快慢來決定,那么就需要對單卡訓(xùn)練進行優(yōu)化,于是主要的技術(shù)手段有精度訓(xùn)練、算子融合、梯度累加來加快單卡的訓(xùn)練性能。
2、加速芯片數(shù)量:理論上,AI芯片數(shù)量越多,模型訓(xùn)練越快。但是,隨著訓(xùn)練數(shù)據(jù)集規(guī)模的進一步增長,加速比的增長并不明顯。如數(shù)據(jù)并行就會出現(xiàn)局限性,當訓(xùn)練資源擴大到一定規(guī)模時,由于通信瓶頸的存在,增加計算資源的邊際效應(yīng)并明顯,甚至增加資源也沒辦法進行加速。這時候需要通訊拓撲進行優(yōu)化,例如通過ring-all-reduce的通訊方式來優(yōu)化訓(xùn)練模式。
3、多卡加速比:多卡加速比既然由計算、通訊效率決定,那么就需要結(jié)合算法和集群中的網(wǎng)絡(luò)拓撲一起優(yōu)化,于是有了數(shù)據(jù)并行DP、模型并行MP、流水線并行PP相互結(jié)合的多維度混合并行策略,來增加多卡訓(xùn)練的效率。
總的來說呢,超大模型訓(xùn)練的目標就是優(yōu)化上面的公式,提升總訓(xùn)練速度。核心思想是將數(shù)據(jù)和計算有關(guān)的圖/算子切分到不同設(shè)備上,同時盡可能降低設(shè)備間通信所需的代價,合理使用多臺設(shè)備的計算資源,實現(xiàn)高效的并發(fā)調(diào)度訓(xùn)練,最大化提升訓(xùn)練速度。
大模型訓(xùn)練的集群架構(gòu)
這里的集群架構(gòu)是為了機器學(xué)習(xí)模型的分布式訓(xùn)練問題。深度學(xué)習(xí)的大模型目前主要是在集群中才能訓(xùn)練出來啦,而集群的架構(gòu)也需要根據(jù)分布式并行、深度學(xué)習(xí)、大模型訓(xùn)練的技術(shù)來進行合理安排。
在2012年左右Spark采取了簡單直觀的數(shù)據(jù)并行的方法解決模型并行訓(xùn)練的問題,但由于Spark的并行梯度下降方法是同步阻斷式的,且模型參數(shù)需通過全局廣播的形式發(fā)送到各節(jié)點,因此Spark的并行梯度下降是相對低效的。
2014年李沐提出了分布式可擴展的Parameter Server架構(gòu),很好地解決了機器學(xué)習(xí)模型的分布式訓(xùn)練問題。Parameter Server不僅被直接應(yīng)用在各大公司的機器學(xué)習(xí)平臺上,而且也被集成在TensorFlow,Pytroch、MindSpore、PaddlePaddle等主流的深度框架中,作為機器學(xué)習(xí)分布式訓(xùn)練最重要的解決方案之一。
目前最流行的模式有兩種:
1. 參數(shù)服務(wù)器模式(Parameter Server,PS)
2. 集合通訊模式(Collective Communication,CC)
其中參數(shù)服務(wù)器主要是有一個或者多個中心節(jié)點,這些節(jié)點稱為PS節(jié)點,用于聚合參數(shù)和管理模型參數(shù)。而集合通信則沒有管理模型參數(shù)的中心節(jié)點,每個節(jié)點都是 Worker,每個Worker負責(zé)模型訓(xùn)練的同時,還需要掌握當前最新的全局梯度信息。
參數(shù)服務(wù)器模式
參數(shù)服務(wù)器架構(gòu)Parameter Server,PS架構(gòu)包括兩個部分,首先是把計算資源分為兩個部分,參數(shù)服務(wù)器節(jié)點和工作節(jié)點:1)參數(shù)服務(wù)器節(jié)點用來存儲參數(shù);2)工作節(jié)點部分用來做算法的訓(xùn)練。
第二個部分就是把機器學(xué)習(xí)算法也分成兩個方面,即1)參數(shù)和2)訓(xùn)練。
如圖所示,PS架構(gòu)將計算節(jié)點分為server與worker,其中,worker用于執(zhí)行網(wǎng)絡(luò)模型的前向與反向計算。而server則對各個worker發(fā)回的梯度進行合并并更新模型參數(shù),對深度學(xué)習(xí)模型參數(shù)中心化管理的方式,非常易于存儲超大規(guī)模模型參數(shù)。
但是隨著模型網(wǎng)絡(luò)越來越復(fù)雜,對算力要求越來越高,在數(shù)據(jù)量不變的情況下,單個GPU的計算時間是有差異的,并且網(wǎng)絡(luò)帶寬之間并不平衡,會存在部分GPU計算得比較快,部分GPU計算得比較慢。這個時候如果使用異步更新網(wǎng)絡(luò)模型的參數(shù),會導(dǎo)致優(yōu)化器相關(guān)的參數(shù)更新出現(xiàn)錯亂。而使用同步更新則會出現(xiàn)阻塞等待網(wǎng)絡(luò)參數(shù)同步的問題。
GPU 強大的算力毋庸置疑可以提升集群的計算性能,但隨之而來的是,不僅模型規(guī)模會受到機器顯存和內(nèi)存的制約,而且通信帶寬也會由于集群網(wǎng)卡數(shù)量降低而成為瓶頸。
這個時候百度基于PS架構(gòu)之上提出了Ring-All-Reduce新的通訊架構(gòu)方式。
如圖所示,通過異步流水線執(zhí)行機制,隱蔽了 IO 帶來的額外性能開銷,在保證訓(xùn)練速度的同時,使訓(xùn)練的模型大小不再受制于顯存和內(nèi)存,極大提升模型的規(guī)模。而 RPC&NCCL 混合通信策略可以將部分稀疏參數(shù)采用 RPC 協(xié)議跨節(jié)點通信,其余參數(shù)采用卡間 NCCL 方式完成通信,充分利用帶寬資源。
集合通訊模式
大模型訓(xùn)練相關(guān)論文
2022年學(xué)習(xí)大模型、分布式深度學(xué)習(xí),不可能錯過的AI論文,你都讀過了嗎?根據(jù)句上面的介紹,我們將會分為分布式并行策略相關(guān)的論文、分布式框架相關(guān)的論文、通訊帶寬優(yōu)化相關(guān)的論文等不同的維度對論文進行整理。并給出一個簡單的解讀,希望大家可以一起去分享好的思想。
分布式并行策略相關(guān)
數(shù)據(jù)并行(Data Parallel,DP):數(shù)據(jù)并行訓(xùn)練加速比最高,但要求每個設(shè)備上都備份一份模型,顯存占用比較高。
模型并行(Model Parallel,MP):模型并行,通信占比高,適合在機器內(nèi)做模型并行且支持的模型類型有限。
流水線并行(Pipeline Parallel,PP):流水線并行,訓(xùn)練設(shè)備容易出現(xiàn)空閑狀態(tài),加速效率沒有數(shù)據(jù)并行高;但能減少通信邊界支持更多的層數(shù),適合在機器間使用。
混合并行(Hybrid parallel,HP):混合并行策略的思想,集三種策略的優(yōu)勢于一身,實現(xiàn)取長補短。具體來說,先在單機內(nèi)使用模型并行和分組參數(shù)切片組合的策略,這么選擇的原因是這兩個策略通信量較大,適合使用機器內(nèi)的卡間通信。接著,為了承載千億規(guī)模大模型,疊加流水線并行策略,使用多臺機器共同分擔(dān)計算。最后,為了計算和通訊高效,在外層又疊加了數(shù)據(jù)并行來增加并發(fā)數(shù)量,提升整體訓(xùn)練速度。這就是我們目前在AI框架中添加的并行策略,業(yè)界基本上都是使用這種方式。
****并行相關(guān)的論文****
下面就是并行相關(guān)的經(jīng)典推薦論文,首先就是Jeff Dean在2012年的開創(chuàng)文章,然后介紹Facebook Pytroch里面使用到的數(shù)據(jù)并行中DDP、FSDP的策略。然而這并不夠,因為有多重并行策略,于是NVIDIA推出了基于GPU的數(shù)據(jù)、模型、流水線并行的比較綜述文章。實際上流水線并行會引入大量的服務(wù)器空載buffer,于是Google和微軟分別針對流水線并行優(yōu)化推出了GPipe和PipeDream。最后便是NVIDIA針對自家的大模型Megatron,推出的模型并行涉及到的相關(guān)策略。
- Large Scale Distributed Deep Networks
2012年的神作,要知道那個時候神經(jīng)網(wǎng)絡(luò)都不多,這是出自于Google大神Jeff Dean的文章。主要是神經(jīng)網(wǎng)絡(luò)進行模型劃分,因為推出得比較早,所以會稍微Naitve一點,但是作為分布式并行的開創(chuàng)之作,稍微推薦一下。
- Getting Started with Distributed Data Parallel
- PyTorch Distributed: Experiences on Accelerating Data Parallel Training.
Facebook為Pytorch打造的分布式數(shù)據(jù)并行策略算法 Distributed Data Parallel (DDP)。與 Data Parallel 的單進程控制多 GPU 不同,在 distributed 的幫助下,只需要編寫一份代碼,torch 就會自動將其分配給n個進程,分別在 n 個 GPU 上運行。不再有主 GPU,每個 GPU 執(zhí)行相同的任務(wù)。對每個 GPU 的訓(xùn)練都是在自己的過程中進行的。每個進程都從磁盤加載其自己的數(shù)據(jù)。分布式數(shù)據(jù)采樣器可確保加載的數(shù)據(jù)在各個進程之間不重疊。損失函數(shù)的前向傳播和計算在每個 GPU 上獨立執(zhí)行。因此,不需要收集網(wǎng)絡(luò)輸出。在反向傳播期間,梯度下降在所有GPU上均被執(zhí)行,從而確保每個 GPU 在反向傳播結(jié)束時最終得到平均梯度的相同副本。
- Fully Sharded Data Parallel: faster AI training with fewer GPUs
Facebook發(fā)布的FSDP(Fully Sharded Data Parallel),對標微軟在DeepSpeed中提出的ZeRO,F(xiàn)SDP可以看成PyTorch中的DDP優(yōu)化版本,本身也是數(shù)據(jù)并行,但是和DDP不同的是,F(xiàn)SDP采用了parameter sharding,所謂的parameter sharding就是將模型參數(shù)也切分到各個GPUs上,而DDP每個GPU都要保存一份parameter,F(xiàn)SDP可以實現(xiàn)更好的訓(xùn)練效率(速度和顯存使用)。
- Efficient Large-Scale Language Model Training on GPU Clusters
很好的一篇綜述出品與NVIDIA,論文中, NVIDIA 介紹了分布式訓(xùn)練超大規(guī)模模型的三種必須的并行技術(shù):數(shù)據(jù)并行(Data Parallelism)、模型并行(Tensor Model Parallelism)和流水并行(Pipeline Model Parallelism)。
- Automatic Cross-Replica Sharding of Weight Update in Data-Parallel Training
在傳統(tǒng)的數(shù)據(jù)并行中,模型參數(shù)被復(fù)制并在每次訓(xùn)練循環(huán)結(jié)束后被優(yōu)化器更新。然而,當每個核的批量數(shù)不夠大的時候,計算或許會變成一個瓶頸。例如,以MLPerf的BERT訓(xùn)練為例,在512個第三代TPU芯片上,LAMB優(yōu)化器的參數(shù)更新時間可以占到整個循環(huán)時間的18%。Xu等人在2020年提出了參數(shù)更新劃分技術(shù),這種分布式計算技術(shù)首先執(zhí)行一個reduce-scatter操作,然后使得每個加速器有整合梯度的一部分。這樣每個加速器就可以算出相應(yīng)的被更新的局部參數(shù)。在下一步,每個被更新的局部參數(shù)被全局廣播到各個加速器,這樣使得每個加速器上都有被更新的全局參數(shù)。為了獲得更高的加速比,同時用數(shù)據(jù)并行和模型并行去處理參數(shù)更新劃分。在圖像分割模型中,參數(shù)是被復(fù)制的,這種情況下參數(shù)更新劃分類似于數(shù)據(jù)并行。然后,當參數(shù)被分布后到不同的核之后,就執(zhí)行多個并發(fā)的參數(shù)更新劃分。
- PipeDream: Fast and Efficient Pipeline Parallel DNN Training
微軟研究院宣布了Fiddle項目的創(chuàng)立,其包括了一系列的旨在簡化分布式深度學(xué)習(xí)的研究項目。PipeDreams是Fiddle發(fā)布的第一個側(cè)重于深度學(xué)習(xí)模型并行訓(xùn)練的項目之一。其主要采用“流水線并行”的技術(shù)來擴展深度學(xué)習(xí)模型的訓(xùn)練。在 PipeDream 中主要克服流水線并行化訓(xùn)練的挑戰(zhàn),算法流程主要如下。首先,PipeDream 必須在不同的輸入數(shù)據(jù)間,協(xié)調(diào)雙向流水線的工作。然后,PipeDream 必須管理后向通道里的權(quán)重版本,從而在數(shù)值上能夠正確計算梯度,并且在后向通道里使用的權(quán)重版本必須和前向通道里使用的相同。最后,PipeDream 需要流水線里的所有 stage 都花費大致相同的計算時間,這是為了使流水線得到最大的通量。
- GPipe: Easy Scaling with Micro-Batch Pipeline Parallelism
GPipe是Google發(fā)明的論文,專注于通過流水線并行擴展深度學(xué)習(xí)應(yīng)用程序的訓(xùn)練負載。GPipe 把一個L層的網(wǎng)絡(luò),切分成 K個 composite layers。每個composite layer 運行在單獨的TPU core上。這K個 core composite layers只能順序執(zhí)行,但是GPipe引入了流水并行策略來緩解這個順序執(zhí)行的性能問題,把 mini-batch細分為多個更小的macro-batch,提高并行程度。GPipe 還用recomputation這個簡單有效的技巧來降低內(nèi)存,進一步允許訓(xùn)練更大的模型。
- Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism.
- Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM.
出自NVIDIA,雖然這兩篇文章都是在講Megatron網(wǎng)絡(luò)模型,實際上里面展開的都是模型并行等多維度并行的相關(guān)的技術(shù)點。其中第一篇論文共有兩個主要的結(jié)論:1,利用數(shù)據(jù)和模型并行的分布式技術(shù)訓(xùn)練了具有3.9B參數(shù)的BERT-large模型,在GLUE的很多數(shù)據(jù)集上都取得了SOTA成績。同時,還訓(xùn)練了具有8.3B參數(shù)的GPT-2語言模型,并在數(shù)據(jù)集Wikitext103,LAMBADA,RACE都上取得SOTA成績。這篇論文,一方面體現(xiàn)了算力的重要性,另一方面體現(xiàn)了模型并行和數(shù)據(jù)并行技術(shù)關(guān)鍵性。這兩項優(yōu)化技術(shù)在加速模型訓(xùn)練和推斷過程中至關(guān)重要。
大模型算法相關(guān)
****必須了解的基礎(chǔ)大模型結(jié)構(gòu)****
基礎(chǔ)大模型結(jié)構(gòu)基本上都是由Google貢獻的,首先要看17年只需要Attention替代RNN序列結(jié)構(gòu),于是出現(xiàn)了第四種深度學(xué)習(xí)的架構(gòu)Transformer。有了Transformer的基礎(chǔ)架構(gòu)后,在18年推出了BERT預(yù)訓(xùn)練模型,之后的所有大模型都是基于Transformer結(jié)構(gòu)和BERT的預(yù)訓(xùn)練機制。后面比較有意思的就是使用Transformer機制的視覺大模型ViT和引入專家決策機制的MoE。
- Attention is all you need.
Google首創(chuàng)的Transformer大模型,是現(xiàn)在所有大模型最基礎(chǔ)的架構(gòu),現(xiàn)在Transformer已經(jīng)成為除了MLP、CNN、RNN以外第四種最重要的深度學(xué)習(xí)算法架構(gòu)。谷歌在arxiv發(fā)了一篇論文名字教Attention Is All You Need,提出了一個只基于attention的結(jié)構(gòu)來處理序列模型相關(guān)的問題,比如機器翻譯。傳統(tǒng)的神經(jīng)機器翻譯大都是利用RNN或者CNN來作為encoder-decoder的模型基礎(chǔ),而谷歌最新的只基于Attention的Transformer模型摒棄了固有的定式,并沒有用任何CNN或者RNN的結(jié)構(gòu)。該模型可以高度并行地工作,所以在提升翻譯性能的同時訓(xùn)練速度也特別快。
- BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
Google發(fā)布的首個預(yù)訓(xùn)練大模型BERT,從而引爆了預(yù)訓(xùn)練大模型的潮流和趨勢,這個不用介紹大家肯定有所聽聞啦。BERT的全稱為Bidirectional Encoder Representation from Transformers,是一個預(yù)訓(xùn)練的語言表征模型。它強調(diào)了不再像以往一樣采用傳統(tǒng)的單向語言模型或者把兩個單向語言模型進行淺層拼接的方法進行預(yù)訓(xùn)練,而是采用新的masked language model(MLM),以致能生成深度的雙向語言表征。BERT論文發(fā)表時提及在11個NLP(Natural Language Processing,自然語言處理)任務(wù)中獲得了新的state-of-the-art的結(jié)果,令人目瞪口呆。
- An Image is Worth 16x16 Words: transformer for Image Recognition at Scale
ViT Google提出的首個使用Transformer的視覺大模型,基本上大模型的創(chuàng)新算法都是出自于Google,不得不服。ViT作為視覺轉(zhuǎn)換器的使用,而不是CNN或混合方法來執(zhí)行圖像任務(wù)。結(jié)果是有希望的但并不完整,因為因為除了分類之外的基于視覺的任務(wù):如檢測和分割,還沒有表現(xiàn)出來。此外,與Vaswani等人(2017年)不同,與CNN相比,transformer 性能的提升受到的限制要大得多。作者假設(shè)進一步的預(yù)訓(xùn)練可以提高性能,因為與其他現(xiàn)有技術(shù)模型相比,ViT具有相對可擴展性。
- GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding.
好像G開頭的模型都是Google的了一樣魔性。在 ICLR 2021 上,Google 的進一步將 MoE 應(yīng)用到了基于 Transformer 的神經(jīng)機器翻譯的任務(wù)上。GShard 將 Transformer 中的 Feedforward Network(FFN)層替換成了 MoE 層,并且將 MoE 層和數(shù)據(jù)并行巧妙地結(jié)合起來。在數(shù)據(jù)并行訓(xùn)練時,模型在訓(xùn)練集群中已經(jīng)被復(fù)制了若干份。GShard 通過將每路數(shù)據(jù)并行的 FFN 看成 MoE 中的一個專家來實現(xiàn) MoE 層,這樣的設(shè)計通過在多路數(shù)據(jù)并行中引入 All-to-All 通信來實現(xiàn) MoE 的功能。
****具有里程碑意義性的大模型****
- GPT-3: Language Models are Few-Shot Learners
OpenAI發(fā)布的首個百億規(guī)模的大模型,應(yīng)該非常具有開創(chuàng)性意義,現(xiàn)在的大模型都是對標GPT-3。GPT-3依舊延續(xù)自己的單向語言模型訓(xùn)練方式,只不過這次把模型尺寸增大到了1750億,并且使用45TB數(shù)據(jù)進行訓(xùn)練。同時,GPT-3主要聚焦于更通用的NLP模型,解決當前BERT類模型的兩個缺點:對領(lǐng)域內(nèi)有標簽數(shù)據(jù)的過分依賴:雖然有了預(yù)訓(xùn)練+精調(diào)的兩段式框架,但還是少不了一定量的領(lǐng)域標注數(shù)據(jù),否則很難取得不錯的效果,而標注數(shù)據(jù)的成本又是很高的。對于領(lǐng)域數(shù)據(jù)分布的過擬合:在精調(diào)階段,因為領(lǐng)域數(shù)據(jù)有限,模型只能擬合訓(xùn)練數(shù)據(jù)分布,如果數(shù)據(jù)較少的話就可能造成過擬合,致使模型的泛華能力下降,更加無法應(yīng)用到其他領(lǐng)域。
- T5: Text-To-Text Transfer Transformer
Google把T5簡單的說就是將所有 NLP 任務(wù)都轉(zhuǎn)化成Text-to-Text(文本到文本)任務(wù)。對于T5這篇論文,很Google的一篇文章啦,讓我也很無力,畢竟財大氣粗之外,還有想法,這就是高富帥?;氐秸撐谋旧恚琓5意義不在燒了多少錢,也不在屠了多少榜,其中idea創(chuàng)新也不大,它最重要作用是給整個NLP預(yù)訓(xùn)練模型領(lǐng)域提供了一個通用框架,把所有任務(wù)都轉(zhuǎn)化成一種形式
- Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
微軟亞研提出的Swin Transformer的新型視覺Transformer,它可以用作計算機視覺的通用backbone。在兩個領(lǐng)域之間的差異,例如視覺實體尺度的巨大差異以及與文字中的單詞相比,圖像中像素的高分辨率,帶來了使Transformer從語言適應(yīng)視覺方面的挑戰(zhàn)。
****超過萬億規(guī)模的稀疏大模型****
- Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts.
Google發(fā)布的多任務(wù)MoE。多任務(wù)學(xué)習(xí)的目的在于用一個模型來同時學(xué)習(xí)多個目標和任務(wù),但常用的任務(wù)模型的預(yù)測質(zhì)量通常對任務(wù)之間的關(guān)系很敏感(數(shù)據(jù)分布不同,ESMM 解決的也是這個問題),因此,google 提出多門混合專家算法(Multi-gate Mixture-of-Experts)旨在學(xué)習(xí)如何從數(shù)據(jù)中權(quán)衡任務(wù)目標(task-specific objectives)和任務(wù)之間(inter-task relationships)的關(guān)系。所有任務(wù)之間共享混合專家結(jié)構(gòu)(MoE)的子模型來適應(yīng)多任務(wù)學(xué)習(xí),同時還擁有可訓(xùn)練的門控網(wǎng)路(Gating Network)以優(yōu)化每一個任務(wù)。
- Switch transformers: Scaling to trillion parameter models with simple and efficient sparsity.
Google重磅推出首個萬億參數(shù)的超大規(guī)模稀疏語言模型Switch Transformer。 聲稱他們能夠訓(xùn)練包含超過一萬億個參數(shù)的語言模型的技術(shù)。直接將參數(shù)量從GPT-3的1750億拉高到1.6萬億,其速度是Google以前開發(fā)的語言模型T5-XXL的4倍。
內(nèi)存和計算優(yōu)化
最后就是優(yōu)化方面的,其中主要是并行優(yōu)化器、模型壓縮量化、內(nèi)存復(fù)用優(yōu)化、混合精度訓(xùn)練等方面的優(yōu)化,下面各列了幾個最經(jīng)典的文章。
- Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour
一篇17年關(guān)于優(yōu)化器的老文章,文章的一個重要的結(jié)論很簡單,就是一個線性縮放原則,但里面分析的不錯,講到了深度學(xué)習(xí)中很多基本知識的一個理解。本文從實驗的角度進行細致的分析。雖然文章分析的是如何在更大的batch上進行訓(xùn)練,但同樣的道理本文也可以用在像我一樣的貧民黨,當我們沒有足夠的GPU或者顯存不足的時候到底該怎么調(diào)節(jié)一些參數(shù)。
內(nèi)存優(yōu)化相關(guān)論文:
- Training Deep Nets with Sublinear Memory Cost.
陳天奇這個名字可能圈內(nèi)人都會比較熟悉了,在2016年的時候提出的,主要是對神經(jīng)網(wǎng)絡(luò)做內(nèi)存復(fù)用。這篇文章提出了一種減少深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練時內(nèi)存消耗的系統(tǒng)性方法。主要關(guān)注于減少存儲中間結(jié)果(特征映射)和梯度的內(nèi)存成本,因為在許多常見深度架構(gòu)中,與中間特征映射的大小相比,參數(shù)的大小相對較小。使用計算圖分析來執(zhí)行自動原地操作和內(nèi)存共享優(yōu)化。更重要的是,還提出了一種新的以計算交換內(nèi)存的方法。
- Gist: Efficient data encoding for deep neural network training
Gist是ISCA'18的一篇頂會文章,不算是新文章了,但是引用量在系統(tǒng)文章中算是非常高的,看完之后發(fā)現(xiàn)實驗果然扎實,值得學(xué)習(xí)。主要思想還是圍繞如何降低神經(jīng)網(wǎng)絡(luò)訓(xùn)練時候的顯存使用量。Gist面向數(shù)據(jù)壓縮,發(fā)掘訓(xùn)練模式以及各個層數(shù)據(jù)的特征,對特定數(shù)據(jù)進行不同方案的壓縮,從而達到節(jié)省空間的目的。
- Adafactor: Adaptive learning rates with sublinear memory cost.
AdaFactor,一個由Google提出來的新型優(yōu)化器,AdaFactor具有自適應(yīng)學(xué)習(xí)率的特性,但比RMSProp還要省顯存,并且還針對性地解決了Adam的一些缺陷。說實話,AdaFactor針對Adam所做的分析相當經(jīng)典,值得我們認真琢磨體味,對有興趣研究優(yōu)化問題的讀者來說,更是一個不可多得的分析案例。
- ZeRO: Memory Optimization Towards Training A Trillion Parameter Models Samyam.
微軟提出很經(jīng)典很經(jīng)典的一個算法了,為了這個算法還基于Pytroch開發(fā)了一個分布式并行DeepSpeed框架?,F(xiàn)有普遍的數(shù)據(jù)并行模式下的深度學(xué)習(xí)訓(xùn)練,每一臺機器都需要消耗固定大小的全量內(nèi)存,這部分內(nèi)存和并不會隨著數(shù)據(jù)的并行而減小,因而,數(shù)據(jù)并行模式下機器的內(nèi)存通常會成為訓(xùn)練的瓶頸。這篇論文開發(fā)了一個Zero Redundancy Optimizer (ZeRO),主要用于解決數(shù)據(jù)并行狀態(tài)下內(nèi)存不足的問題,使得模型的內(nèi)存可以平均分配到每個gpu上,每個gpu上的內(nèi)存消耗與數(shù)據(jù)并行度成反比,而又基本不影響通信效率。
- Mixed precision training.
混合精度的文章,參考ZOMI醬寫得全網(wǎng)最全-混合精度訓(xùn)練原理啦,里面的內(nèi)容都在文章中。
底層系統(tǒng)架構(gòu)相關(guān)
- Parameter Server for Distributed Machine Learning
亞馬遜首席科學(xué)家李沐在讀書時期發(fā)表的文章。工業(yè)界需要訓(xùn)練大型的機器學(xué)習(xí)模型,一些廣泛使用的特定的模型在規(guī)模上的兩個特點:1. 深度學(xué)習(xí)模型參數(shù)很大,超過單個機器的容納能力有限;2. 訓(xùn)練數(shù)據(jù)巨大,需要分布式并行提速。這種需求下,當前類似Map Reduce的框架并不能很好適合。于是李沐大神在OSDI和NIPS上都發(fā)過文章,其中OSDI版本偏向于系統(tǒng)設(shè)計,而NIPS版本偏向于算法層面。關(guān)于深度學(xué)習(xí)分布式訓(xùn)練架構(gòu)來說是一個奠基性的文章。
- More Effective Distributed ML via a Stale Synchronous Parallel Parameter Server.
- GeePS: Scalable deep learning on distributed GPUs with a GPU-specialized parameter server
分布式深度學(xué)習(xí)可以采用BSP和SSP兩種模式。1為SSP通過允許faster worker使用staled參數(shù),從而達到平衡計算和網(wǎng)絡(luò)通信開銷時間的效果。SSP每次迭代收斂變慢,但是每次迭代時間更短,在CPU集群上,SSP總體收斂速度比BSP更快,但是在GPU集群上訓(xùn)練,2為BSP總體收斂速度比SSP反而快很多。
- Bandwidth Optimal All-reduce Algorithms for Clusters of Workstations
- Bringing HPC Techniques toDeep Learning
百度在17年的時候聯(lián)合NVIDIA,提出了ring-all-reduce通訊方式,現(xiàn)在已經(jīng)成為了業(yè)界通訊標準方式或者是大模型通訊的方式。過去幾年中,神經(jīng)網(wǎng)絡(luò)規(guī)模不斷擴大,而訓(xùn)練可能需要大量的數(shù)據(jù)和計算資源。 為了提供所需的計算能力,我們使用高性能計算(HPC)常用的技術(shù)將模型縮放到數(shù)十個GPU,但在深度學(xué)習(xí)中卻沒有充分使用。 這種ring allreduce技術(shù)減少了在不同GPU之間進行通信所花費的時間,從而使他們可以將更多的時間花費在進行有用的計算上。 在百度的硅谷AI實驗室(SVAIL)中,我們成功地使用了這些技術(shù)來訓(xùn)練最先進的語音識別模型。 我們很高興將Ring Allreduce的實現(xiàn)發(fā)布為TensorFlow的庫和補丁程序,并希望通過發(fā)布這些庫,我們可以使深度學(xué)習(xí)社區(qū)更有效地擴展其模型。