自從BERT誕生以來(lái),,各大互聯(lián)網(wǎng)巨頭之間就展開(kāi)了預(yù)訓(xùn)練語(yǔ)言模型軍備競(jìng)賽,,XLNet、ERNIE,、RoBERTa,、T5、GPT-3.... 但當(dāng)事情進(jìn)展到號(hào)稱(chēng)自己是zero-shot learner的GPT-3時(shí),,批判的聲音變得明顯多了,。
很多人開(kāi)始質(zhì)疑,,一味的讓模型變大、讓參數(shù)量爆炸式增長(zhǎng),,真的能帶來(lái)真正的語(yǔ)言智能嗎,? 但不可否認(rèn)的是,GPT-3做到了許多早期預(yù)訓(xùn)練模型做不到,、做不好的事情,,如故事生成、文本->結(jié)構(gòu)生成,、Closed-book QA等,,相比GPT-2,這個(gè)千億參數(shù)規(guī)模的語(yǔ)言模型不僅生成的文本更流暢了,,甚至內(nèi)容的事實(shí)性也有了顯著的改善,。 但歸根結(jié)底,GPT-3的零樣本和小樣本學(xué)習(xí)能力主要還是來(lái)源于預(yù)訓(xùn)練階段對(duì)海量語(yǔ)料的大量記憶,,其次是語(yǔ)義編碼能力,、遠(yuǎn)距離依賴(lài)關(guān)系建模能力和文本生成能力的強(qiáng)化,以及自然語(yǔ)言進(jìn)行任務(wù)描述等設(shè)計(jì),。而在訓(xùn)練目標(biāo)/損失函數(shù)方面GPT-3并沒(méi)有顯式的引導(dǎo)模型去學(xué)習(xí)零樣本/小樣本泛化能力,,因此在一些互聯(lián)網(wǎng)上公開(kāi)較少的語(yǔ)料(如一些toB場(chǎng)景)上GPT-3經(jīng)常出現(xiàn)翻車(chē)也是可以理解的。 那么問(wèn)題來(lái)了,,如果我們將語(yǔ)言模型的規(guī)模從千億提升至萬(wàn)億,,能不能復(fù)現(xiàn)GPT-3創(chuàng)造的奇跡呢? 我覺(jué)得這個(gè)問(wèn)題要從目標(biāo)來(lái)看,。 舉個(gè)例子,。 假如你的目標(biāo)是要解決網(wǎng)友吐槽的“GPT-3小學(xué)數(shù)學(xué)題都解不好”的問(wèn)題,那訓(xùn)萬(wàn)億參數(shù)模型絕對(duì)是個(gè)不能更錯(cuò)誤的路線,,這類(lèi)不可枚舉的數(shù)值計(jì)算問(wèn)題需要專(zhuān)用的設(shè)計(jì),,靠增加數(shù)據(jù)量和模型容量,,只能解決更多數(shù)值計(jì)算的特定輸入,,而永遠(yuǎn)無(wú)法真正像計(jì)算機(jī)那樣建立起穩(wěn)定的函數(shù)關(guān)系。 但是,,如果你確信你的目標(biāo)場(chǎng)景數(shù)據(jù)分布是在互聯(lián)網(wǎng)上存在且公開(kāi)的,,或者你能通過(guò)某種渠道得到海量同分布或近分布數(shù)據(jù),那么你去訓(xùn)一個(gè)萬(wàn)億參數(shù)的模型是確實(shí)可能產(chǎn)生進(jìn)一步肉眼可見(jiàn)的飛躍,。再或者,,你僅僅想要模型會(huì)解更多fancy的任務(wù),以及對(duì)同一個(gè)任務(wù)能在開(kāi)放域解更多的case,,那去提升規(guī)模確實(shí)有意義的,。 而在一些影響因素更加繁雜的任務(wù),,如推薦、廣告點(diǎn)擊率預(yù)估,、搜索等,,特征維度高達(dá)千億、萬(wàn)億更是非常合理的事情,,畢竟這些工業(yè)界產(chǎn)品端不僅坐擁海量用戶(hù)交互數(shù)據(jù),,且無(wú)論用戶(hù)側(cè)還是物料側(cè),均是一個(gè)足夠大,、足夠復(fù)雜的開(kāi)放域問(wèn)題,,怎么擬合都不為過(guò)。 那問(wèn)題來(lái)了,,比拼語(yǔ)言模型規(guī)模這件事情難道沒(méi)個(gè)上限嗎,?
數(shù)據(jù)數(shù)據(jù)怎么成瓶頸啦?這不是個(gè)信息爆炸的時(shí)代嗎,? 沒(méi)錯(cuò),,信息是爆炸的,但互聯(lián)網(wǎng)上大量數(shù)據(jù)是dirty,、重復(fù),、無(wú)意義的,而在移動(dòng)互聯(lián)網(wǎng)時(shí)代,,互聯(lián)網(wǎng)也變得越來(lái)越封閉,,要連接起一座座信息孤島極其困難。對(duì)模型訓(xùn)練來(lái)說(shuō),,需要的不僅是數(shù)據(jù)絕對(duì)規(guī)模,,數(shù)據(jù)來(lái)源的豐富度和干凈程度同樣是模型能力的天花板。 因此,,在數(shù)據(jù)層面沒(méi)有相比上一代模型取得質(zhì)的飛躍的情況下,,近期那些去訓(xùn)千億、萬(wàn)億參數(shù)語(yǔ)言模型的工作基本就是在燒錢(qián)賺吆喝,。 貼一下三代GPT模型的數(shù)據(jù)變化:
可以看到,,數(shù)據(jù)層面每一代均相比前一代有了數(shù)量級(jí)的飛躍,無(wú)論是語(yǔ)料的覆蓋范圍(豐富度)還是絕對(duì)規(guī)模。因此,,下一代萬(wàn)億模型使用的數(shù)據(jù)相比GPT-3若在質(zhì)量,、來(lái)源和規(guī)模上沒(méi)有量級(jí)的改變,至少我是不相信有多大提升的,。 ps: 近期一頓操作猛如虎,,一看提升一點(diǎn)點(diǎn)的工作真心太多了(手動(dòng)狗頭) 算力不講了,money的問(wèn)題,。 分布式訓(xùn)練技術(shù)好了,,終于到討論技術(shù)的環(huán)節(jié)了。 千億,、萬(wàn)億參數(shù)的模型大概有三種設(shè)計(jì)方案/場(chǎng)景挑戰(zhàn):
第一種方案適用于一些影響因素非常多的場(chǎng)景(如推薦,、搜索),,例如商品推薦中的點(diǎn)擊率預(yù)估,用戶(hù)的性別年齡學(xué)歷等畫(huà)像,、瀏覽歷史,、購(gòu)買(mǎi)記錄、商品的類(lèi)型,、標(biāo)簽,、價(jià)格、標(biāo)題,、封面圖乃至當(dāng)下的時(shí)間節(jié)點(diǎn)和地理位置等,,均可能影響用戶(hù)當(dāng)下對(duì)一個(gè)商品的點(diǎn)擊,因此這類(lèi)場(chǎng)景就更適合寬模型,。 第二種方案則適用于影響因素不多,,但抽象程度很高的任務(wù),如NLP,、CV等,。 第三種方案則是一種更加復(fù)雜的場(chǎng)景,例如搜索,、計(jì)算廣告中計(jì)算query與網(wǎng)頁(yè)/廣告的相關(guān)性進(jìn)而排序,我們不僅要考慮文本語(yǔ)義層面的相關(guān)性,還需要考慮網(wǎng)頁(yè)/廣告的banner對(duì)用戶(hù)的吸引力等,,進(jìn)而需要點(diǎn)擊率預(yù)估(CTR),,這時(shí)網(wǎng)絡(luò)不僅具備大型NLP模型的深度,又兼具大型CTR模型的寬度,。 下面以百度飛槳(PaddlePaddle)為例,,分別談?wù)勥@三類(lèi)場(chǎng)景的關(guān)鍵技術(shù)方案。 等等,,為啥是百度飛槳,? 貼幾個(gè)可能鮮為人知的milestone,可能只有比較關(guān)注大規(guī)模機(jī)器學(xué)習(xí)/分布式訓(xùn)練相關(guān)工作的小伙伴才比較了解,。
換句話(huà)說(shuō),,Paddle的全稱(chēng)是Parallel Distributed Deep Learning,直譯為“并行分布式深度學(xué)習(xí)”,。當(dāng)Tensorflow忙著做生態(tài),、Pytorch忙著做易用性的時(shí)候,只有Paddle自始至終做著以分布式計(jì)算為代表的硬核底層優(yōu)化,,以支撐百度搜索,、推薦、廣告業(yè)務(wù)的十億乃至千億的流量和恐怖的模型復(fù)雜度,。 因此,,毫不夸張的講,從百度飛槳就能窺見(jiàn)如今工業(yè)界訓(xùn)練萬(wàn)億模型的前沿解決方案,。 萬(wàn)億稀疏參數(shù)模型訓(xùn)練:第一代架構(gòu)如前所述,,搜索推薦場(chǎng)景經(jīng)常面臨數(shù)據(jù)量大、特征維度高且稀疏化的問(wèn)題,。對(duì)于這種寬模型,,最合適的分布式訓(xùn)練架構(gòu)便是—— Parameter Server(PS) ,。 如圖所示,PS架構(gòu)將計(jì)算節(jié)點(diǎn)分為 server 與 worker,,其中,,worker用于執(zhí)行模型的前向與反向計(jì)算,而server則對(duì)各個(gè)worker發(fā)回的梯度進(jìn)行合并并更新模型參數(shù),,這種模型參數(shù)中心化管理的方式非常易于存儲(chǔ)超大規(guī)模模型參數(shù),。 百度搜索作為全球最大的中文搜索引擎,對(duì)模型的規(guī)模,、性能等要求非常高,。為了應(yīng)對(duì)嚴(yán)苛的實(shí)際業(yè)務(wù)挑戰(zhàn),早在 2018 年,,飛槳的純 CPU 參數(shù)服務(wù)器模式就可以支持萬(wàn)億規(guī)模稀疏參數(shù)的模型訓(xùn)練,。 但是隨著模型網(wǎng)絡(luò)越來(lái)越復(fù)雜,對(duì)算力要求越來(lái)越高,,在數(shù)據(jù)量不變的情況下,,CPU 計(jì)算性能差的弱勢(shì)就會(huì)顯現(xiàn),雖然可以通過(guò)增加 CPU 機(jī)器數(shù)量來(lái)解決,,甚至可以增加上百臺(tái),,但是這種方法不僅成本大幅提高,而且集群的穩(wěn)定性和擴(kuò)展性也存在較大的問(wèn)題,。因此百度飛槳引入了純 GPU 參數(shù)服務(wù)器來(lái)提升計(jì)算性能,,之前 100 臺(tái) CPU 機(jī)器才能訓(xùn)練的模型,僅需 1 臺(tái)多卡 GPU 機(jī)器即可完成訓(xùn)練,。當(dāng)然,,同時(shí)也要解決因?yàn)橛布嫠鶐?lái)的問(wèn)題。 第二代架構(gòu):純GPU參數(shù)服務(wù)器GPU 強(qiáng)大的算力毋庸置疑可以提升集群的計(jì)算性能,,但隨之而來(lái)的是,,不僅模型規(guī)模會(huì)受到機(jī)器顯存和內(nèi)存的制約,而且通信帶寬也會(huì)由于集群網(wǎng)卡數(shù)量降低而成為瓶頸,。 為了解決這兩個(gè)問(wèn)題,,百度飛槳引入了兩大技術(shù) SSD-MEM-HBM 三級(jí)存儲(chǔ) 和 RPC&NCCL 混合通信 到純 GPU 參數(shù)服務(wù)器[3]。 具體來(lái)講,,SSD-MEM-HBM 三級(jí)存儲(chǔ)策略允許全量參數(shù)使用 SSD 硬盤(pán)存儲(chǔ),,高頻參數(shù)存儲(chǔ)于內(nèi)存,當(dāng)前 Batch 訓(xùn)練所用參數(shù)使用顯存,,并且同時(shí)支持 SSD 的參數(shù)在硬盤(pán),、內(nèi)存、顯存之間快速拷貝,。這樣通過(guò)異步流水線執(zhí)行機(jī)制,,隱蔽了 IO 帶來(lái)的額外性能開(kāi)銷(xiāo),,在保證訓(xùn)練速度的同時(shí),使訓(xùn)練的模型大小不再受制于顯存和內(nèi)存,,極大提升模型的規(guī)模,。 而 RPC&NCCL 混合通信策略可以將部分稀疏參數(shù)采用 RPC 協(xié)議跨節(jié)點(diǎn)通信,,其余參數(shù)采用卡間 NCCL 方式完成通信,,充分利用帶寬資源。 百度飛槳純 GPU 參數(shù)服務(wù)器雖然解決了之前純 CPU 模式所面臨的問(wèn)題,,但新的問(wèn)題又出現(xiàn)了——如何提高訓(xùn)練資源的利用率? 第三代架構(gòu):異構(gòu)參數(shù)服務(wù)器,,兼顧網(wǎng)絡(luò)寬度與深度在純 GPU 的參數(shù)服務(wù)器下,所有的訓(xùn)練都在 GPU 中,,當(dāng)模型中部分網(wǎng)絡(luò)層比較復(fù)雜(并行難,,而串行鏈條長(zhǎng))的時(shí)候,GPU 利用率很難被打滿(mǎn),,而 GPU 機(jī)器中 CPU 與 GPU 的硬件配比是固定的,,無(wú)法靈活調(diào)整。針對(duì)這種情況,,有兩種解決方案:
基于這兩種解決方案,百度飛槳在 2.0 版本發(fā)布了通用異構(gòu)參數(shù)服務(wù)器,,使訓(xùn)練任務(wù)對(duì)硬件類(lèi)型和型號(hào)不敏感,,即可以同時(shí)使用不同的硬件混合異構(gòu)訓(xùn)練,如 CPU,、AI專(zhuān)用芯片以及不同型號(hào)的 GPU 如 v100,、P40、A100 等,。同時(shí)還可以解決大規(guī)模稀疏特征模型訓(xùn)練場(chǎng)景下 IO 占比過(guò)高導(dǎo)致的芯片資源利用率過(guò)低的問(wèn)題,。通過(guò)異構(gòu)參數(shù)服務(wù)器訓(xùn)練模式,用戶(hù)可以在硬件異構(gòu)集群中部署分布式訓(xùn)練任務(wù),,例如云服務(wù)器集群,,高效利用不同算力芯片,為用戶(hù)提供更高吞吐,、更低資源消耗的訓(xùn)練能力,。 異構(gòu)參數(shù)服務(wù)器的最大亮點(diǎn)是硬件感知的任務(wù)切分,因此甚至可以支持文首提到的最復(fù)雜結(jié)構(gòu)的萬(wàn)億模型——網(wǎng)絡(luò)又寬又深,。如上圖所示,,針對(duì)類(lèi)似 ERNIE+CTR 這樣計(jì)算密集型與 IO 密集型兼有的訓(xùn)練任務(wù),,可以被切分成多個(gè)子任務(wù)。其中的 IO 密集型任務(wù)(如數(shù)據(jù)讀取,、Embedding 查詢(xún))切分給 CPU 機(jī)器,,計(jì)算密集型任務(wù)切分給 GPU 機(jī)器;用戶(hù)可以根據(jù)子任務(wù)的計(jì)算復(fù)雜度來(lái)靈活決定機(jī)器配比,,并且還可以兼容傳統(tǒng)純 CPU 參數(shù)服務(wù)器和純 GPU 參數(shù)服務(wù)器所支持的訓(xùn)練任務(wù),。 4D混合并行:超大規(guī)模稠密模型訓(xùn)練前面的三代架構(gòu)解決了第一類(lèi)和第三類(lèi)萬(wàn)億參數(shù)模型的訓(xùn)練問(wèn)題(網(wǎng)絡(luò)極寬;網(wǎng)絡(luò)寬且深),,那么對(duì)于第二類(lèi)萬(wàn)億參數(shù)模型(網(wǎng)絡(luò)極深的大規(guī)模稠密模型)有沒(méi)有好的解決方案呢,? 百度最新提出的 4D 混合并行策略 就是為該場(chǎng)景量身定制的,目前已經(jīng)支持了高達(dá) 2300 億參數(shù)規(guī)模的100多層的 ERNIE 預(yù)訓(xùn)練模型的分布式訓(xùn)練,。 不同于前述的三代參數(shù)服務(wù)器的模式,,4D混合并行策略采用的是 集合通信模式 。這種模式?jīng)]有管理模型參數(shù)的中心節(jié)點(diǎn),,每個(gè)節(jié)點(diǎn)都是 Worker,,每個(gè) Worker 負(fù)責(zé)模型訓(xùn)練的同時(shí)還需要掌握當(dāng)前最新的全局梯度信息。而百度于2016年提出的Ring-Allreduce就是一種可以大大減少點(diǎn)對(duì)點(diǎn)通信次數(shù)的先進(jìn)的集合通信方式,,目前已成為飛槳,、Tensorflow、Pytorch等深度框架的分布式訓(xùn)練標(biāo)配方案,。 首先來(lái)看一個(gè)公式: 總訓(xùn)練速度 ∝ 單卡速度 * 卡數(shù) * 多卡加速比 其中單卡速度由數(shù)據(jù)讀取和計(jì)算速度決定,;多卡加速比由計(jì)算/通信效率決定。除了單卡可以使用的算子融合,、混合精度之類(lèi)的基礎(chǔ)性能優(yōu)化策略之外,,分布式訓(xùn)練還引入一系列并行策略。 并行策略的核心思想是將數(shù)據(jù)和計(jì)算有關(guān)的圖 / 算子切分到不同設(shè)備上,,同時(shí)盡可能降低設(shè)備間通信所需的代價(jià),,合理使用多臺(tái)設(shè)備資源,實(shí)現(xiàn)高效的并發(fā)調(diào)度訓(xùn)練,,最大化提升訓(xùn)練速度,。常見(jiàn)并行策略有:
我們從設(shè)備資源和計(jì)算/通信效率來(lái)分析三種策略的優(yōu)缺點(diǎn):
而4D混合并行策略的思想就是集三種策略的優(yōu)勢(shì)于一身,,實(shí)現(xiàn)取長(zhǎng)補(bǔ)短,。具體來(lái)說(shuō),先在單機(jī)內(nèi)使用模型并行和分組參數(shù)切片組合的 2D 策略,,這么選擇的原因是這兩個(gè)策略通信量較大,,適合使用機(jī)器內(nèi)的卡間通信,;而后,,為了承載千億規(guī)模模型,再疊加流水線并行策略,,使用多臺(tái)機(jī)器共同分擔(dān),;最后為了做到高效,在外層又疊加了數(shù)據(jù)并行來(lái)增加并發(fā)數(shù)量,,提升整體訓(xùn)練速度,。這樣業(yè)內(nèi)首個(gè) 4D 混合并行策略就誕生了。 4D 混合并行策略的性能如何呢,? 百度飛槳從理論性能角度對(duì)比分析了幾組混合并行策略,,即 DP2 + PP32 + Sharding2 + MP4、PP64 + Sharding2 + MP4 和 DP2 + PP32 + MP8,。如下表所示,,與兩種 3D 方式相比,4D 混合并行策略在通信量和 Bubble 時(shí)間上并未明顯增長(zhǎng),,但是大幅提升了數(shù)據(jù)并行路數(shù)! 此外,,百度飛槳使用64臺(tái)8卡v100機(jī)器在 2300 億參數(shù)規(guī)模的100+層的ERNIE模型上進(jìn)行了性能實(shí)測(cè)。如圖,,可以看到 4D 混合并行策略訓(xùn)練速度高于其它兩種 3D 混合并行策略,,達(dá)到了8698 tokens/s,至少可以提速 23.7%,。 至此,,千億規(guī)模的超大稠密模型的問(wèn)題在百度飛槳先進(jìn)的4D混合并行策略下,僅僅通過(guò)64臺(tái)8卡V100機(jī)器就解決了,;萬(wàn)億規(guī)模的超大稀疏模型和稀疏稠密混合的復(fù)雜模型在百度飛槳的異構(gòu)參數(shù)服務(wù)器下也得到了很好解決,。 那么,萬(wàn)億規(guī)模的稠密模型呢,?以及萬(wàn)億稠密+十萬(wàn)億稀疏的模型會(huì)怎樣呢,?讓我們拭目以待,,作下個(gè)時(shí)代的見(jiàn)證者吧! |
|