一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

小白學(xué)大模型:訓(xùn)練大語(yǔ)言模型的深度指南

穎脈Imgtec ? 2025-03-03 11:51 ? 次閱讀

在當(dāng)今人工智能飛速發(fā)展的時(shí)代,大型語(yǔ)言模型(LLMs)正以其強(qiáng)大的語(yǔ)言理解和生成能力,改變著我們的生活和工作方式。在最近的一項(xiàng)研究中,科學(xué)家們?yōu)榱松钊肓私馊绾胃咝У赜?xùn)練大型語(yǔ)言模型,進(jìn)行了超過(guò)4000次的實(shí)驗(yàn)。這些實(shí)驗(yàn)動(dòng)用了多達(dá)512個(gè)GPU(圖形處理單元),它們協(xié)同工作,為模型訓(xùn)練提供了強(qiáng)大的計(jì)算支持。在這項(xiàng)研究中,研究人員特別關(guān)注了兩個(gè)關(guān)鍵指標(biāo):吞吐量(通過(guò)標(biāo)記的大小來(lái)表示)和GPU利用率(通過(guò)標(biāo)記的顏色來(lái)表示)。這兩個(gè)指標(biāo)都根據(jù)模型的大小進(jìn)行了標(biāo)準(zhǔn)化處理,以便更直觀地比較不同模型在不同硬件配置下的表現(xiàn)。

AI模型訓(xùn)練的三大挑戰(zhàn)

內(nèi)存使用:有限的“容器”

想象一下,你有一個(gè)裝滿水的杯子,但你還需要往里面加更多的水。如果杯子滿了,就再也裝不下任何東西了。這就像訓(xùn)練AI模型時(shí)的內(nèi)存問(wèn)題。如果一個(gè)訓(xùn)練步驟所需的內(nèi)存超出了GPU的容量,那么訓(xùn)練就無(wú)法繼續(xù)。內(nèi)存是一個(gè)硬性限制,我們必須在有限的空間內(nèi)完成復(fù)雜的計(jì)算任務(wù)。

計(jì)算效率:讓硬件“火力全開”

我們花了大價(jià)錢購(gòu)買高性能的GPU,當(dāng)然希望它們能時(shí)刻保持高效運(yùn)轉(zhuǎn)。但現(xiàn)實(shí)往往是,GPU在等待數(shù)據(jù)傳輸或者等待其他GPU完成工作時(shí),會(huì)浪費(fèi)大量時(shí)間。這就像是一個(gè)生產(chǎn)線上的工人,因?yàn)樵牧蠜](méi)送到或者上一個(gè)環(huán)節(jié)還沒(méi)完成,只能干等著。為了提高效率,我們需要減少這些等待時(shí)間,讓硬件盡可能多地用于計(jì)算。

通信開銷:減少“內(nèi)耗”

在多GPU協(xié)同工作的場(chǎng)景中,不同GPU之間需要頻繁地交換信息。但這種通信會(huì)占用大量的時(shí)間和資源,甚至?xí)孏PU處于閑置狀態(tài)。這就像是一個(gè)團(tuán)隊(duì)開會(huì),如果溝通成本過(guò)高,那么真正干活的時(shí)間就會(huì)減少。因此,我們需要巧妙地利用節(jié)點(diǎn)內(nèi)部(速度快)和節(jié)點(diǎn)之間(速度慢)的帶寬,并盡可能讓通信和計(jì)算同時(shí)進(jìn)行,從而減少通信開銷。

從單個(gè)GPU開始:AI模型訓(xùn)練的第一步在探索如何用數(shù)千個(gè)GPU訓(xùn)練大型AI模型之前,我們先從最基礎(chǔ)的部分開始——在單個(gè)GPU上訓(xùn)練模型。這就好比在學(xué)會(huì)駕駛飛機(jī)之前,先要學(xué)會(huì)駕駛一輛汽車。別小看這一步,它是我們理解整個(gè)訓(xùn)練過(guò)程的關(guān)鍵。

b703f178-f7e2-11ef-9434-92fbcf53809c.png

單GPU訓(xùn)練的三個(gè)基本步驟

當(dāng)你在單個(gè)GPU上訓(xùn)練一個(gè)模型時(shí),整個(gè)過(guò)程通??梢苑譃槿齻€(gè)步驟:

前向傳播(Forward Pass):將輸入數(shù)據(jù)通過(guò)模型,得到模型的輸出結(jié)果。這就好比把食材放進(jìn)烤箱,等待美味的蛋糕出爐。

反向傳播(Backward Pass):計(jì)算梯度,也就是找出模型需要改進(jìn)的方向。這一步就像是檢查蛋糕的口感,看看哪里需要調(diào)整。

優(yōu)化步驟(Optimization):用計(jì)算出的梯度來(lái)更新模型的參數(shù),讓模型變得更好。這就好比根據(jù)反饋調(diào)整烤箱的溫度和時(shí)間。

b72bcbe4-f7e2-11ef-9434-92fbcf53809c.png

關(guān)鍵參數(shù):批次大?。˙atch Size)

批次大?。˙atch Size)是訓(xùn)練過(guò)程中一個(gè)非常重要的參數(shù)。它決定了每次訓(xùn)練時(shí)輸入模型的數(shù)據(jù)量。批次大小的選擇對(duì)模型的訓(xùn)練效果和效率有很大影響。

小批次大?。?/strong>在訓(xùn)練初期,小批次大小可以幫助模型快速找到一個(gè)好的學(xué)習(xí)方向,就像在迷宮中快速試探出一條路。但如果一直使用小批次,模型的梯度會(huì)比較“嘈雜”,最終可能無(wú)法達(dá)到最優(yōu)性能。

  • 大批量大?。?/strong>大批量大小可以提供更準(zhǔn)確的梯度估計(jì),但同時(shí)也會(huì)讓模型對(duì)每個(gè)訓(xùn)練樣本的利用效率降低,導(dǎo)致訓(xùn)練速度變慢,甚至浪費(fèi)計(jì)算資源。

批次大小與訓(xùn)練時(shí)間

批次大小還會(huì)影響訓(xùn)練一個(gè)給定數(shù)據(jù)集所需的時(shí)間。小批次大小需要更多的優(yōu)化步驟來(lái)處理相同數(shù)量的數(shù)據(jù),而每個(gè)優(yōu)化步驟都需要計(jì)算時(shí)間,因此總訓(xùn)練時(shí)間會(huì)更長(zhǎng)。不過(guò),只要批次大小在最優(yōu)值附近,模型的最終性能通常不會(huì)受到太大影響。

在大型語(yǔ)言模型(LLM)的預(yù)訓(xùn)練領(lǐng)域,批次大小通常用“token”(標(biāo)記)數(shù)量而不是樣本數(shù)量來(lái)表示。這樣可以讓訓(xùn)練數(shù)據(jù)與輸入序列長(zhǎng)度無(wú)關(guān),更加通用。

挑戰(zhàn):內(nèi)存不足怎么辦?

當(dāng)我們嘗試將訓(xùn)練擴(kuò)展到更大的批次大小時(shí),第一個(gè)挑戰(zhàn)就來(lái)了——GPU內(nèi)存不足。當(dāng)我們的GPU無(wú)法容納目標(biāo)批次大小時(shí),該怎么辦呢?

首先,我們需要理解為什么會(huì)出現(xiàn)內(nèi)存不足的問(wèn)題。在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí),我們需要在內(nèi)存中存儲(chǔ)以下內(nèi)容:

模型權(quán)重(Weights)

模型梯度(Gradients)

優(yōu)化器狀態(tài)(Optimizer States)

用于計(jì)算梯度的激活值(Activations)

訓(xùn)練過(guò)程中的內(nèi)存動(dòng)態(tài)變化

使用PyTorch的分析工具,我們可以清楚地看到,內(nèi)存的使用并不是一成不變的,而是在訓(xùn)練過(guò)程中不斷變化。例如,在一個(gè)訓(xùn)練步驟中,內(nèi)存的使用會(huì)隨著前向傳播、反向傳播和優(yōu)化步驟而起伏。

前向傳播:當(dāng)我們開始訓(xùn)練時(shí),模型的激活值會(huì)迅速增加,因?yàn)槟P托枰?jì)算輸入數(shù)據(jù)的輸出結(jié)果。

反向傳播:隨著梯度的計(jì)算,內(nèi)存中的梯度值會(huì)逐漸積累,而用于計(jì)算梯度的激活值則會(huì)被逐步清理。

  • 優(yōu)化步驟:最后,在更新模型參數(shù)時(shí),我們需要使用所有梯度,并更新優(yōu)化器的狀態(tài)。

有趣的是,第一次訓(xùn)練步驟與其他步驟看起來(lái)很不一樣。這是因?yàn)镻yTorch的內(nèi)存分配器在第一步中做了很多準(zhǔn)備工作,為后續(xù)步驟預(yù)留內(nèi)存,從而避免在后續(xù)步驟中頻繁搜索空閑內(nèi)存塊。這種機(jī)制雖然優(yōu)化了訓(xùn)練效率,但也可能導(dǎo)致一個(gè)常見(jiàn)問(wèn)題:第一次訓(xùn)練步驟成功了,但后續(xù)步驟卻因?yàn)閮?nèi)存不足而失敗。這正是因?yàn)閮?yōu)化器狀態(tài)在第一次步驟后開始占用更多內(nèi)存。

如何估算模型的內(nèi)存需求?

為了更好地管理內(nèi)存,我們需要了解模型的各個(gè)部分分別需要多少內(nèi)存。首先,我們來(lái)看看模型的權(quán)重、梯度和優(yōu)化器狀態(tài)。對(duì)于一個(gè)簡(jiǎn)單的Transformer模型,其參數(shù)數(shù)量可以通過(guò)以下公式估算:b74b3a10-f7e2-11ef-9434-92fbcf53809c.png其中,h是隱藏層維度,v是詞匯表大小,L是模型層數(shù)。從這個(gè)公式可以看出,當(dāng)隱藏層維度增大時(shí),h2項(xiàng)會(huì)迅速增長(zhǎng),成為內(nèi)存占用的主要部分。

b755969a-f7e2-11ef-9434-92fbcf53809c.png

接下來(lái),我們來(lái)計(jì)算這些參數(shù)的內(nèi)存需求。在傳統(tǒng)的全精度(FP32)訓(xùn)練中,每個(gè)參數(shù)和梯度需要4字節(jié),而優(yōu)化器(如Adam)還需要額外存儲(chǔ)動(dòng)量和方差,每個(gè)參數(shù)再占用8字節(jié)。

如果使用混合精度訓(xùn)練(如BF16),雖然計(jì)算速度更快,但內(nèi)存需求會(huì)略有變化。在混合精度訓(xùn)練中,我們通常使用BF16(2字節(jié))進(jìn)行計(jì)算,同時(shí)保留一份FP32(4字節(jié))的模型權(quán)重副本,以確保數(shù)值穩(wěn)定性。因此,總內(nèi)存需求如下:

  • 模型權(quán)重(BF16):
  • 梯度(BF16):
  • 模型權(quán)重副本(FP32):
  • 優(yōu)化器狀態(tài)(FP32):

模型參數(shù)規(guī)模全精度訓(xùn)練(FP32)混合精度訓(xùn)練(BF16 + FP32副本)
10億參數(shù)16 GB20 GB
70億參數(shù)112 GB140 GB
700億參數(shù)1120 GB1400 GB
4050億參數(shù)6480 GB8100 GB

激活值內(nèi)存:訓(xùn)練中的“內(nèi)存大戶”

在訓(xùn)練大型語(yǔ)言模型時(shí),激活值內(nèi)存(Activation Memory)是一個(gè)非常關(guān)鍵且復(fù)雜的部分。它不僅取決于模型的結(jié)構(gòu),還與輸入數(shù)據(jù)的長(zhǎng)度和批次大小密切相關(guān)。激活值內(nèi)存的管理,往往決定了我們能否在有限的硬件資源上訓(xùn)練更大規(guī)模的模型。

激活值內(nèi)存的大小并不固定,它會(huì)隨著輸入序列的長(zhǎng)度和批次大小的變化而變化。經(jīng)過(guò)仔細(xì)分析Transformer模型的反向傳播過(guò)程,我們可以估算出激活值內(nèi)存的大小。具體公式如下:

其中:L 是模型的層數(shù);seq 是輸入序列的長(zhǎng)度;bs 是批次大小;h 是模型的隱藏層維度;n_heads 是多頭注意力機(jī)制中的頭數(shù)。

激活值重計(jì)算:用計(jì)算換內(nèi)存的“魔法”

在傳統(tǒng)的訓(xùn)練過(guò)程中,我們會(huì)存儲(chǔ)每一步的隱藏狀態(tài)(即激活值),以便在反向傳播時(shí)用來(lái)計(jì)算梯度。但有了激活值重計(jì)算,我們只需要在模型的關(guān)鍵節(jié)點(diǎn)存儲(chǔ)少量激活值,丟棄其余的激活值,并在反向傳播時(shí)從最近的保存點(diǎn)重新計(jì)算它們。這就好比在旅行中,你只在關(guān)鍵地點(diǎn)留下標(biāo)記,而不是記錄整個(gè)路線的每一個(gè)細(xì)節(jié)。激活值重計(jì)算有幾種不同的策略,每種策略在內(nèi)存節(jié)省和計(jì)算成本之間都有不同的權(quán)衡:1. 完整重計(jì)算(Full Recomputation)這種策略會(huì)在Transformer模型的每一層之間存儲(chǔ)激活值。因?yàn)樗枰诜聪騻鞑r(shí)重新執(zhí)行每一層的前向傳播,所以計(jì)算成本最高,但節(jié)省的內(nèi)存也最多。通常,這種策略會(huì)使計(jì)算成本和時(shí)間增加30-40%,效果非常明顯。2. 選擇性重計(jì)算(Selective Recomputation)

選擇性重計(jì)算是一種更高效的策略。研究人員發(fā)現(xiàn),注意力機(jī)制的計(jì)算通常占用大量?jī)?nèi)存,但重新計(jì)算的成本較低。因此,我們可以丟棄這些激活值,而只存儲(chǔ)前饋網(wǎng)絡(luò)(Feedforward)的激活值。例如,在一個(gè)1750億參數(shù)的GPT-3模型中,這種策略可以減少70%的激活值內(nèi)存占用,而計(jì)算成本僅增加2.7%。

梯度累積:用“微批次”突破內(nèi)存限制

梯度累積的核心思想非常簡(jiǎn)單:將一個(gè)大批次拆分成多個(gè)小批次(微批次),然后依次對(duì)每個(gè)微批次執(zhí)行前向傳播和反向傳播,計(jì)算梯度,并將這些梯度累加起來(lái)。最后,我們用累加后的梯度平均值來(lái)更新模型參數(shù)。這樣,我們就可以在不增加內(nèi)存占用的情況下,有效地模擬大批次訓(xùn)練的效果。

b76336c4-f7e2-11ef-9434-92fbcf53809c.png

具體來(lái)說(shuō),我們把每個(gè)前向傳播的批次大小稱為“微批次大小”(Micro Batch Size, mbs),而把兩次優(yōu)化步驟之間的總批次大小稱為“全局批次大小”(Global Batch Size, gbs)。如果我們每執(zhí)行8次前向/反向傳播后進(jìn)行一次優(yōu)化步驟,那么全局批次大小就是微批次大小的8倍。雖然梯度累積解決了內(nèi)存問(wèn)題,但它也有一個(gè)明顯的缺點(diǎn):每次優(yōu)化步驟需要多次連續(xù)的前向/反向傳播,這會(huì)增加計(jì)算開銷,從而減慢訓(xùn)練速度。不過(guò),如果你仔細(xì)思考,你會(huì)發(fā)現(xiàn)這些前向/反向傳播是可以并行化的——每個(gè)微批次的計(jì)算是獨(dú)立的,唯一的區(qū)別是輸入樣本不同。這意味著,我們可以通過(guò)多GPU并行計(jì)算來(lái)加速這一過(guò)程。數(shù)據(jù)并行:用多GPU加速模型訓(xùn)練在數(shù)據(jù)并行中,每個(gè)GPU處理一個(gè)獨(dú)立的微批次數(shù)據(jù),因此每個(gè)GPU上計(jì)算出的梯度是不同的。為了保持所有模型實(shí)例的一致性,我們需要在反向傳播過(guò)程中,通過(guò)一個(gè)稱為“全歸約”(all-reduce)的操作來(lái)平均這些梯度。全歸約是數(shù)據(jù)并行中的第一個(gè)“分布式通信原語(yǔ)”,它負(fù)責(zé)在GPU實(shí)例和節(jié)點(diǎn)之間同步和通信。

優(yōu)化數(shù)據(jù)并行的三種策略

1. 優(yōu)化一:計(jì)算與通信重疊在簡(jiǎn)單的數(shù)據(jù)并行實(shí)現(xiàn)中,我們通常需要等待反向傳播完成后,才開始同步梯度。但其實(shí),我們可以將通信與計(jì)算重疊起來(lái),讓它們同時(shí)進(jìn)行。具體來(lái)說(shuō),當(dāng)反向傳播到達(dá)最后一層時(shí),我們可以立即開始同步這些層的梯度,而不需要等待前面層的梯度計(jì)算完成。這樣,大部分全歸約操作可以在反向傳播過(guò)程中完成,從而提高效率。在PyTorch中,我們可以通過(guò)為每個(gè)參數(shù)添加一個(gè)全歸約鉤子函數(shù)來(lái)實(shí)現(xiàn)這一點(diǎn)。當(dāng)某個(gè)參數(shù)的梯度計(jì)算完成后,立即觸發(fā)全歸約操作,而其他參數(shù)的梯度計(jì)算仍在繼續(xù)。這樣可以顯著減少等待梯度同步的時(shí)間。2. 優(yōu)化二:梯度分桶(Bucketing)GPU在處理大型張量時(shí)通常比處理多個(gè)小型張量更高效,通信操作也是如此。因此,我們可以將梯度分組到“桶”中,然后對(duì)每個(gè)桶中的梯度執(zhí)行一次全歸約操作,而不是對(duì)每個(gè)梯度單獨(dú)執(zhí)行全歸約。這就像打包物品時(shí),發(fā)送幾個(gè)大箱子比發(fā)送許多小箱子更高效。通過(guò)這種方式,我們可以顯著減少通信開銷,加快通信速度。3. 優(yōu)化三:與梯度累積結(jié)合

我們之前提到,梯度累積通過(guò)多次前向和反向傳播來(lái)累積梯度,然后在最后一步更新參數(shù)。當(dāng)我們將梯度累積與數(shù)據(jù)并行結(jié)合時(shí),需要注意梯度同步的時(shí)機(jī)。在簡(jiǎn)單的實(shí)現(xiàn)中,每次反向傳播后都會(huì)觸發(fā)全歸約操作,但這其實(shí)是不必要的。我們可以在最后一步統(tǒng)一觸發(fā)全歸約操作,從而減少通信開銷。

數(shù)據(jù)并行與梯度累積的結(jié)合

在訓(xùn)練大型語(yǔ)言模型時(shí),全局批次大?。℅BS)是一個(gè)關(guān)鍵參數(shù),它直接影響模型的收斂速度和訓(xùn)練效率。通過(guò)引入數(shù)據(jù)并行(Data Parallelism, DP)和梯度累積(Gradient Accumulation, GA),我們可以更靈活地調(diào)整全局批次大小,同時(shí)優(yōu)化訓(xùn)練速度和硬件利用率。全局批次大小 (GBS) = 微批次大小 (MBS) × 梯度累積步數(shù) (GA) × 數(shù)據(jù)并行實(shí)例數(shù) (DP)在實(shí)際應(yīng)用中,人們通常會(huì)優(yōu)先選擇最大化數(shù)據(jù)并行的節(jié)點(diǎn)數(shù)量(DP),因?yàn)閿?shù)據(jù)并行是并行化的,而梯度累積是順序的。只有在數(shù)據(jù)并行無(wú)法滿足目標(biāo)全局批次大小時(shí),才會(huì)增加梯度累積的步數(shù)。例如,當(dāng)我們有足夠的GPU時(shí),可以通過(guò)增加數(shù)據(jù)并行的節(jié)點(diǎn)數(shù)量來(lái)加速訓(xùn)練,而不是單純依賴梯度累積。

確定目標(biāo)全局批次大?。℅BS):通過(guò)查閱文獻(xiàn)或?qū)嶒?yàn)測(cè)量模型的收斂情況,確定最佳的全局批次大?。ㄒ詔oken為單位)。

選擇序列長(zhǎng)度:根據(jù)文獻(xiàn)或?qū)嶒?yàn)選擇合適的訓(xùn)練序列長(zhǎng)度。通常,2-8k tokens是一個(gè)可靠的選擇。

確定單個(gè)GPU的最大微批次大?。∕BS):逐步增加微批次大小,直到單個(gè)GPU的內(nèi)存不足。

  1. 確定可用的GPU數(shù)量:根據(jù)目標(biāo)數(shù)據(jù)并行實(shí)例數(shù)(DP),計(jì)算所需的梯度累積步數(shù)。全局批次大小除以數(shù)據(jù)并行實(shí)例數(shù),即為剩余的梯度累積步數(shù)。

ZeRO:零冗余優(yōu)化器,讓內(nèi)存管理更高效

DeepSpeed的ZeRO(Zero Redundancy Optimizer)通過(guò)將這些組件分散到不同的數(shù)據(jù)并行節(jié)點(diǎn)上,顯著減少了內(nèi)存冗余,同時(shí)仍然允許使用完整的參數(shù)集進(jìn)行計(jì)算。接下來(lái),我們將深入了解ZeRO的三個(gè)階段:ZeRO-1、ZeRO-2和ZeRO-3。b770b826-f7e2-11ef-9434-92fbcf53809c.png

ZeRO-1:優(yōu)化器狀態(tài)分區(qū)

在傳統(tǒng)的數(shù)據(jù)并行中,所有節(jié)點(diǎn)在反向傳播后收集相同的梯度,并同時(shí)執(zhí)行相同的優(yōu)化器步驟。這不僅效率低下,還浪費(fèi)了大量?jī)?nèi)存。ZeRO-1通過(guò)將優(yōu)化器狀態(tài)分成N_d(數(shù)據(jù)并行度)等份來(lái)解決這個(gè)問(wèn)題。每個(gè)模型副本只保留1/N_d的優(yōu)化器狀態(tài),并在優(yōu)化步驟中只更新1/N_d的浮點(diǎn)參數(shù)。

ZeRO-2:添加梯度分區(qū)

在ZeRO-1的基礎(chǔ)上,ZeRO-2進(jìn)一步將梯度也進(jìn)行分區(qū)。由于每個(gè)副本只需要與優(yōu)化器狀態(tài)對(duì)應(yīng)的梯度片段,因此在反向傳播時(shí),我們只需要執(zhí)行“歸約分散”(reduce-scatter)操作,而不是“全歸約”(all-reduce)。這樣,每個(gè)副本只需要保留1/N_d的梯度,從而節(jié)省更多內(nèi)存。

ZeRO-3:添加參數(shù)分區(qū)

ZeRO-3(也稱為FSDP,即“完全分片數(shù)據(jù)并行”)是ZeRO的最終階段,它將模型參數(shù)也進(jìn)行了分區(qū)。這意味著每個(gè)副本在需要時(shí)才會(huì)動(dòng)態(tài)收集所需的參數(shù)片段,并在使用后立即釋放它們。這種“按需收集”的方式進(jìn)一步減少了內(nèi)存占用。

張量并行:打破內(nèi)存限制的“魔法”在訓(xùn)練大型語(yǔ)言模型時(shí),激活值內(nèi)存往往會(huì)成為瓶頸,尤其是在單個(gè)GPU無(wú)法容納模型的單層時(shí)。這時(shí),張量并行(Tensor Parallelism, TP)就派上了用場(chǎng)。張量并行不僅分區(qū)了模型的參數(shù)、梯度和優(yōu)化器狀態(tài),還分區(qū)了激活值,且無(wú)需在計(jì)算前收集所有片段。

b77d3358-f7e2-11ef-9434-92fbcf53809c.png

張量并行的基本原理

張量并行的核心在于矩陣乘法的數(shù)學(xué)性質(zhì)。在神經(jīng)網(wǎng)絡(luò)中,矩陣乘法通常表示為 X × W,其中:

  • X是輸入或激活值;
  • W是神經(jīng)網(wǎng)絡(luò)層的權(quán)重。

張量并行利用了矩陣乘法的兩個(gè)基本性質(zhì):

按列分區(qū):可以將矩陣 B 的每一列分別與矩陣 A 相乘,然后組合結(jié)果。

按行分區(qū):可以將矩陣 A 的每一行分別與矩陣 B 相乘,然后將結(jié)果相加。

按行分區(qū)(Row-wise Sharding)

按行分區(qū)是另一種實(shí)現(xiàn)方式。具體步驟如下:

  1. 按行分割權(quán)重矩陣:將權(quán)重矩陣 W 按行分割成多個(gè)片段,并將這些片段分配到不同的GPU上。
  2. 分割輸入矩陣:將輸入矩陣 X 分割成多個(gè)片段(需要一個(gè)“分散”操作,scatter)。
  3. 計(jì)算局部結(jié)果:每個(gè)GPU計(jì)算局部輸入矩陣與局部權(quán)重矩陣的乘積。

匯總結(jié)果:通過(guò)一個(gè)“全歸約”(all-reduce)操作,將所有GPU上的局部結(jié)果相加,得到最終結(jié)果。

多頭注意力機(jī)制(MHA)中的張量并行

多頭注意力機(jī)制是Transformer模型的核心部分,它涉及多個(gè)矩陣乘法操作(Q、K、V)。張量并行在MHA中的應(yīng)用也非常直觀:

按列分區(qū)(Column Parallel):將Q、K、V矩陣按列分割,并分配到不同的GPU上。每個(gè)GPU計(jì)算一個(gè)或多個(gè)注意力頭的輸出。這種方法非常適合多頭注意力機(jī)制,因?yàn)槊總€(gè)GPU可以獨(dú)立計(jì)算一個(gè)或多個(gè)頭的注意力結(jié)果。

  1. 按行分區(qū)(Row Parallel):對(duì)于輸出投影(Output Projection),可以按行分割權(quán)重矩陣,從而減少每個(gè)GPU上的內(nèi)存需求。

序列并行的基本原理

序列并行的核心思想是:在張量并行的基礎(chǔ)上,進(jìn)一步將激活值和計(jì)算分割到不同的GPU上,但這次是沿著輸入序列的維度,而不是隱藏維度。這種方法特別適用于那些需要完整隱藏維度的操作,如LayerNorm和Dropout。

以LayerNorm為例,它需要完整的隱藏維度來(lái)計(jì)算均值和方差:

b78adf58-f7e2-11ef-9434-92fbcf53809c.png

其中,均值和方差是在隱藏維度上計(jì)算的。盡管LayerNorm的計(jì)算成本較低,但它仍然需要大量的激活值內(nèi)存,因?yàn)樾枰暾碾[藏維度。序列井行通過(guò)在序列維度上分割激活值,將內(nèi)存負(fù)擔(dān)分散到多個(gè)GPU上,從而顯著減少了每個(gè)GPU的內(nèi)存需求。

Diving in the GPUs – fusing, threading, mixing

Fused Kernels

Flash Attention 1-3

Mixed Precision Training

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    33554

    瀏覽量

    274196
  • 人工智能
    +關(guān)注

    關(guān)注

    1804

    文章

    48449

    瀏覽量

    244955
  • 語(yǔ)言模型
    +關(guān)注

    關(guān)注

    0

    文章

    557

    瀏覽量

    10596
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【大語(yǔ)言模型:原理與工程實(shí)踐】揭開大語(yǔ)言模型的面紗

    語(yǔ)言模型(LLM)是人工智能領(lǐng)域的尖端技術(shù),憑借龐大的參數(shù)量和卓越的語(yǔ)言理解能力贏得了廣泛關(guān)注。它基于深度學(xué)習(xí),利用神經(jīng)網(wǎng)絡(luò)框架來(lái)理解和生成自然語(yǔ)
    發(fā)表于 05-04 23:55

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

    全面剖析大語(yǔ)言模型的核心技術(shù)與基礎(chǔ)知識(shí)。首先,概述自然語(yǔ)言的基本表示,這是理解大語(yǔ)言模型技術(shù)的前提。接著,詳細(xì)介紹自然
    發(fā)表于 05-05 12:17

    【大語(yǔ)言模型:原理與工程實(shí)踐】大語(yǔ)言模型的預(yù)訓(xùn)練

    語(yǔ)言模型的核心特點(diǎn)在于其龐大的參數(shù)量,這賦予了模型強(qiáng)大的學(xué)習(xí)容量,使其無(wú)需依賴微調(diào)即可適應(yīng)各種下游任務(wù),而更傾向于培養(yǎng)通用的處理能力。然而,隨著學(xué)習(xí)容量的增加,對(duì)預(yù)訓(xùn)練數(shù)據(jù)的需求也相
    發(fā)表于 05-07 17:10

    【大語(yǔ)言模型:原理與工程實(shí)踐】大語(yǔ)言模型的應(yīng)用

    。 關(guān)于大語(yǔ)言模型是否具備與人類“系統(tǒng)2”相似的能力,存在廣泛的爭(zhēng)議。然而,隨著模型參數(shù)量的增加和大規(guī)模預(yù)訓(xùn)練的實(shí)施,大語(yǔ)言
    發(fā)表于 05-07 17:21

    語(yǔ)言模型:原理與工程時(shí)間+小白初識(shí)大語(yǔ)言模型

    解鎖 我理解的是基于深度學(xué)習(xí),需要訓(xùn)練各種數(shù)據(jù)知識(shí)最后生成自己的的語(yǔ)言理解和能力的交互模型。 對(duì)于常說(shuō)的RNN是處理短序列的數(shù)據(jù)時(shí)表現(xiàn)出色,耳真正厲害的是Transformer,此框架
    發(fā)表于 05-12 23:57

    【《大語(yǔ)言模型應(yīng)用指南》閱讀體驗(yàn)】+ 俯瞰全書

    上周收到《大語(yǔ)言模型應(yīng)用指南》一書,非常高興,但工作項(xiàng)目繁忙,今天才品鑒體驗(yàn),感謝作者編寫了一部?jī)?nèi)容豐富、理論應(yīng)用相結(jié)合、印刷精美的著作,也感謝電子發(fā)燒友論壇提供了一個(gè)讓我了解大語(yǔ)言
    發(fā)表于 07-21 13:35

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

    一些局限性。例如,模型可能無(wú)法完全理解文本中的深層含義和語(yǔ)境信息;同時(shí),由于訓(xùn)練數(shù)據(jù)可能存在偏差和噪聲,生成的答案也可能存在不準(zhǔn)確或誤導(dǎo)性的情況。 總結(jié)以下,大語(yǔ)言模型通過(guò)
    發(fā)表于 08-02 11:03

    深度融合模型的特點(diǎn)

    深度融合模型的特點(diǎn),背景深度學(xué)習(xí)模型訓(xùn)練完成之后,部署并應(yīng)用在生產(chǎn)環(huán)境的這一步至關(guān)重要,畢竟訓(xùn)練
    發(fā)表于 07-16 06:08

    深度學(xué)習(xí)模型是如何創(chuàng)建的?

    到準(zhǔn)備模型,然后再在邊緣的嵌入式系統(tǒng)上運(yùn)行。訓(xùn)練深度學(xué)習(xí)模型是過(guò)程的工作量和時(shí)間密集型部分,其中通過(guò)提供需要時(shí)間和
    發(fā)表于 10-27 06:34

    一種基于亂序語(yǔ)言模型的預(yù)訓(xùn)練模型-PERT

    由于亂序語(yǔ)言模型不使用[MASK]標(biāo)記,減輕了預(yù)訓(xùn)練任務(wù)與微調(diào)任務(wù)之間的gap,并由于預(yù)測(cè)空間大小為輸入序列長(zhǎng)度,使得計(jì)算效率高于掩碼語(yǔ)言模型
    的頭像 發(fā)表于 05-10 15:01 ?1718次閱讀

    訓(xùn)練語(yǔ)言模型帶來(lái)的硬件挑戰(zhàn)

    生成式AI和大語(yǔ)言模型(LLM)正在以難以置信的方式吸引全世界的目光,本文簡(jiǎn)要介紹了大語(yǔ)言模型,訓(xùn)練這些
    的頭像 發(fā)表于 09-01 17:14 ?1924次閱讀
    <b class='flag-5'>訓(xùn)練</b>大<b class='flag-5'>語(yǔ)言</b><b class='flag-5'>模型</b>帶來(lái)的硬件挑戰(zhàn)

    深度學(xué)習(xí)如何訓(xùn)練出好的模型

    算法工程、數(shù)據(jù)派THU深度學(xué)習(xí)在近年來(lái)得到了廣泛的應(yīng)用,從圖像識(shí)別、語(yǔ)音識(shí)別到自然語(yǔ)言處理等領(lǐng)域都有了卓越的表現(xiàn)。但是,要訓(xùn)練出一個(gè)高效準(zhǔn)確的深度學(xué)習(xí)
    的頭像 發(fā)表于 12-07 12:38 ?1366次閱讀
    <b class='flag-5'>深度</b>學(xué)習(xí)如何<b class='flag-5'>訓(xùn)練</b>出好的<b class='flag-5'>模型</b>

    深度學(xué)習(xí)模型訓(xùn)練過(guò)程詳解

    深度學(xué)習(xí)模型訓(xùn)練是一個(gè)復(fù)雜且關(guān)鍵的過(guò)程,它涉及大量的數(shù)據(jù)、計(jì)算資源和精心設(shè)計(jì)的算法。訓(xùn)練一個(gè)深度學(xué)習(xí)模型
    的頭像 發(fā)表于 07-01 16:13 ?2152次閱讀

    語(yǔ)言模型的預(yù)訓(xùn)練

    能力,逐漸成為NLP領(lǐng)域的研究熱點(diǎn)。大語(yǔ)言模型的預(yù)訓(xùn)練是這一技術(shù)發(fā)展的關(guān)鍵步驟,它通過(guò)在海量無(wú)標(biāo)簽數(shù)據(jù)上進(jìn)行訓(xùn)練,使模型學(xué)習(xí)到
    的頭像 發(fā)表于 07-11 10:11 ?799次閱讀

    騰訊公布大語(yǔ)言模型訓(xùn)練新專利

    語(yǔ)言模型訓(xùn)練過(guò)程中引入第一摘要文本和第二摘要文本,為模型提供了更為豐富的學(xué)習(xí)信息。這兩個(gè)摘要文本在信息量上存在差異,且第一摘要文本中既包含正確語(yǔ)句也包含錯(cuò)誤語(yǔ)句。這一設(shè)計(jì)使得
    的頭像 發(fā)表于 02-10 09:37 ?290次閱讀