什么是大語(yǔ)言模型
大語(yǔ)言模型(Large Language Model,縮寫LLM),也稱大型語(yǔ)言模型,是一種人工智能模型,旨在理解和生成人類語(yǔ)言。它們?cè)诖罅康奈谋緮?shù)據(jù)上進(jìn)行訓(xùn)練,可以執(zhí)行廣泛的任務(wù),包括文本總結(jié)、翻譯、情感分析等等。LLM的特點(diǎn)是規(guī)模龐大,包含數(shù)十億的參數(shù),幫助它們學(xué)習(xí)語(yǔ)言數(shù)據(jù)中的復(fù)雜模式。
訓(xùn)練方式
訓(xùn)練語(yǔ)言模型需要向其提供大量的文本數(shù)據(jù),模型利用這些數(shù)據(jù)來(lái)學(xué)習(xí)人類語(yǔ)言的結(jié)構(gòu)、語(yǔ)法和語(yǔ)義。這個(gè)過(guò)程通常是通過(guò)無(wú)監(jiān)督學(xué)習(xí)完成的,使用一種叫做自我監(jiān)督學(xué)習(xí)的技術(shù)。在自我監(jiān)督學(xué)習(xí)中,模型通過(guò)預(yù)測(cè)序列中的下一個(gè)詞或標(biāo)記,為輸入的數(shù)據(jù)生成自己的標(biāo)簽,并給出之前的詞。訓(xùn)練過(guò)程包括兩個(gè)主要步驟:預(yù)訓(xùn)練(pre-training)和微調(diào)(fine-truning):在預(yù)訓(xùn)練階段,模型從一個(gè)巨大的、多樣化的數(shù)據(jù)集中學(xué)習(xí),通常包含來(lái)自不同來(lái)源的數(shù)十億詞匯,如網(wǎng)站、書籍和文章。這個(gè)階段允許模型學(xué)習(xí)一般的語(yǔ)言模式和表征。在微調(diào)階段,模型在與目標(biāo)任務(wù)或領(lǐng)域相關(guān)的更具體、更小的數(shù)據(jù)集上進(jìn)一步訓(xùn)練。這有助于模型微調(diào)其理解,并適應(yīng)任務(wù)的特殊要求。
面臨的挑戰(zhàn)
1. 資源消耗巨大:訓(xùn)練LLM需要大量的計(jì)算資源,這使得較小的組織或研究人員在開(kāi)發(fā)和部署這些模型方面面臨挑戰(zhàn)。此外,與訓(xùn)練LLM有關(guān)的能源消耗也引起了一定程度的環(huán)境問(wèn)題。
2. 輸出可能帶有偏見(jiàn):由于訓(xùn)練數(shù)據(jù)中可能帶有偏見(jiàn),而LLM可!以學(xué)習(xí)并延續(xù)其訓(xùn)練數(shù)據(jù)中的偏見(jiàn),導(dǎo)致有偏見(jiàn)的輸出,可能是冒犯性的、歧視性甚至是錯(cuò)誤性的觀念。
3. 理解能力受限:雖然大語(yǔ)言模型有能力產(chǎn)生看似連貫和和與背景上下文相關(guān)的文本,但LLM有時(shí)對(duì)其所寫的概念缺乏深刻的理解,這很可能導(dǎo)致不正確或無(wú)意義的輸出。
什么是分布式計(jì)算
和集中式計(jì)算相反,分布式計(jì)算的一個(gè)計(jì)算過(guò)程將會(huì)在多臺(tái)機(jī)器上進(jìn)行。組件之間彼此進(jìn)行交互以實(shí)現(xiàn)一個(gè)共同的目標(biāo),把需要進(jìn)行大量計(jì)算的工程數(shù)據(jù)分區(qū)成小塊,由多臺(tái)計(jì)算機(jī)分別計(jì)算,再上傳運(yùn)算結(jié)果后,將結(jié)果統(tǒng)一合并得出數(shù)據(jù)結(jié)論。
如何實(shí)現(xiàn)
- 如何拆分計(jì)算邏輯
- 如何分發(fā)計(jì)算邏輯
拆分邏輯
從在哪里發(fā)生計(jì)算的角度來(lái)看,所有的計(jì)算邏輯都能夠劃分為這兩種類型:
1能夠分發(fā)到各個(gè)節(jié)點(diǎn)上并行執(zhí)行的
2需要經(jīng)過(guò)一定量的結(jié)果合并之后才能繼續(xù)執(zhí)行的
兩者之間協(xié)調(diào)完成還需要解決 通訊、容災(zāi)、任務(wù)調(diào)度等問(wèn)題
首先對(duì)此公開(kāi)提出解決方案的是Google的MapReduce論文
Map Job 對(duì)應(yīng)的就是可以在各個(gè)節(jié)點(diǎn)上一起執(zhí)行相互不影響的邏輯
Reduce Job 處理的就是Map產(chǎn)生的中間結(jié)果
Map和Reduce之間通過(guò)一個(gè)Shuffle過(guò)程來(lái)鏈接
分發(fā)邏輯
與集中式計(jì)算最大的不同點(diǎn):移動(dòng)計(jì)算邏輯而不移動(dòng)數(shù)據(jù)
大語(yǔ)言模型的分布式訓(xùn)練
大模型可以帶來(lái)更精準(zhǔn)強(qiáng)大的語(yǔ)義理解和推理能力,所以隨著規(guī)模計(jì)算的普及和數(shù)據(jù)集的增大,使得模型的參數(shù)數(shù)量也以指數(shù)級(jí)的速度增長(zhǎng)。訓(xùn)練這樣大的模型非常具有挑戰(zhàn)性,具體原因如下:
對(duì)顯存的挑戰(zhàn)。即使是最大的GPU的主內(nèi)存也不可能適合這些模型的參數(shù),比如一個(gè)175B的GPT-3模型需要(175B * 4bytes)就是700GB模型參數(shù)空間,從而梯度也是700G,優(yōu)化器狀態(tài)是1400G,一共2.8TB。
對(duì)計(jì)算的挑戰(zhàn)。即使我們能夠把模型放進(jìn)單個(gè)GPU中(例如,通過(guò)在主機(jī)和設(shè)備內(nèi)存之間交換參數(shù)),但是其所需的大量計(jì)算操作會(huì)導(dǎo)致漫長(zhǎng)訓(xùn)練時(shí)間(例如,使用單個(gè)V100 NVIDIA GPU來(lái)訓(xùn)練1750億個(gè)參數(shù)的GPT-3需要大約288年)。如何計(jì)算可以參見(jiàn) 2104.04473的附錄 FLOATING-POINT OPERATIONS。
對(duì)計(jì)算的挑戰(zhàn)。不同并行策略對(duì)應(yīng)的通信模式和通信量不同。
數(shù)據(jù)并行:通信發(fā)生在后向傳播的梯度規(guī)約all-reduce操作,通信量是每個(gè)GPU之上模型的大小。
模型并行:在下面會(huì)詳述。
這就需要采用并行化來(lái)加速。使用硬件加速器來(lái)橫向擴(kuò)展(scale out)深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練主要有兩種模式:數(shù)據(jù)并行,模型并行。
數(shù)據(jù)并行
數(shù)據(jù)并行模式會(huì)在每個(gè)worker之上復(fù)制一份模型,這樣每個(gè)worker都有一個(gè)完整模型的副本。輸入數(shù)據(jù)集是分片的,一個(gè)訓(xùn)練的小批量數(shù)據(jù)將在多個(gè)worker之間分割;
worker定期匯總它們的梯度,以確保所有worker看到一個(gè)一致的權(quán)重版本。對(duì)于無(wú)法放進(jìn)單個(gè)worker的大型模型,人們可以在模型之中較小的分片上使用數(shù)據(jù)并行。
數(shù)據(jù)并行擴(kuò)展通常效果很好,但有兩個(gè)限制:
a)超過(guò)某一個(gè)點(diǎn)之后,每個(gè)GPU的batch size變得太小,這降低了GPU的利用率,增加了通信成本;
b)可使用的最大設(shè)備數(shù)就是batch size,著限制了可用于訓(xùn)練的加速器數(shù)量。
模型并行
WHY:
業(yè)界內(nèi)訓(xùn)練的模型越來(lái)越大,模型朝著更深和更寬的方向發(fā)展。以自然語(yǔ)言處理(NLP)領(lǐng)域?yàn)槔P蛷腂ert發(fā)展到GPT,模型規(guī)模從數(shù)億參數(shù)量增加到數(shù)百億甚至是數(shù)千億。當(dāng)參數(shù)規(guī)模為千億時(shí),存儲(chǔ)模型參數(shù)就需要數(shù)百GB的顯存空間,超出單個(gè)GPU卡的顯存容量。顯然,僅靠數(shù)據(jù)并行無(wú)法滿足超大規(guī)模模型訓(xùn)練對(duì)于顯存的需求。為了解決這個(gè)問(wèn)題,可以采用模型并行技術(shù)。
人們會(huì)使用一些內(nèi)存管理技術(shù),如激活檢查點(diǎn)(activation checkpointing)來(lái)克服數(shù)據(jù)并行的這種限制,也會(huì)使用模型并行來(lái)對(duì)模型進(jìn)行分區(qū)來(lái)解決這兩個(gè)挑戰(zhàn),使得權(quán)重及其關(guān)聯(lián)的優(yōu)化器狀態(tài)不需要同時(shí)駐留在處理器上。
WHAT:
模型并行模式會(huì)讓一個(gè)模型的內(nèi)存和計(jì)算分布在多個(gè)worker之間,以此來(lái)解決一個(gè)模型在一張卡上無(wú)法容納的問(wèn)題,其解決方法是把模型放到多個(gè)設(shè)備之上。
模型并行分為兩種:流水線并行和張量并行,就是把模型切分的方式。
流水線并行
流水線并行(pipeline model parallel)是把模型不同的層放到不同設(shè)備之上,比如前面幾層放到一個(gè)設(shè)備之上,中間幾層放到另外一個(gè)設(shè)備上,最后幾層放到第三個(gè)設(shè)備之上。
張量并行
張量并行則是層內(nèi)分割,把某一個(gè)層做切分,放置到不同設(shè)備之上,也可以理解為把矩陣運(yùn)算分配到不同的設(shè)備之上,比如把某個(gè)矩陣乘法切分成為多個(gè)矩陣乘法放到不同設(shè)備之上。
通信
張量并行:通信發(fā)生在每層的前向傳播和后向傳播過(guò)程之中,通信類型是all-reduce,不但單次通信數(shù)據(jù)量大,并且通信頻繁。
流水線并行:通信在流水線階段相鄰的切分點(diǎn)之上,通信類型是P2P通信,單詞通信數(shù)據(jù)量較少但是比較頻繁,而且因?yàn)榱魉€的特點(diǎn),會(huì)產(chǎn)生GPU空閑時(shí)間,這里稱為流水線氣泡(Bubble)。
PS
NCCL是Nvidia Collective multi-GPU Communication Library的簡(jiǎn)稱,它是一個(gè)實(shí)現(xiàn)多GPU的collective communication通信(all-gather, reduce, broadcast)庫(kù),Nvidia做了很多優(yōu)化,以在PCIe、Nvlink、InfiniBand上實(shí)現(xiàn)較高的通信速度。
All-reduce:從多個(gè)sender那里接收數(shù)據(jù),最終combine到每一個(gè)節(jié)點(diǎn)上。
Transformer Attention MLP GeLU Dropout
未完待續(xù)…文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-686544.html
引用
https://blog.csdn.net/weixin_47364682/article/details/122674457
https://zhuanlan.zhihu.com/p/507877303
https://zhuanlan.zhihu.com/p/617087561
https://zhuanlan.zhihu.com/p/28653942
https://zhuanlan.zhihu.com/p/129912419
https://www.zhihu.com/question/508671222文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-686544.html
到了這里,關(guān)于大語(yǔ)言模型的分布式訓(xùn)練的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!