DeepSeek-V3深入解讀!
上一篇文章對(duì)DeepSeek-R1進(jìn)行了詳細(xì)的介紹,今天來看看DeepSeek-R1的基座模型DeepSeek-V3。
項(xiàng)目地址:https://github.com/deepseek-ai/DeepSeek-V3
簡(jiǎn)單介紹下研究動(dòng)機(jī):現(xiàn)有的開源模型在性能和訓(xùn)練成本之間往往難以達(dá)到理想的平衡。一方面,為了提升模型性能,需要增加模型規(guī)模和訓(xùn)練數(shù)據(jù)量,這會(huì)導(dǎo)致訓(xùn)練成本急劇上升;另一方面,高效的訓(xùn)練和推理架構(gòu)對(duì)于降低計(jì)算資源消耗至關(guān)重要。因此,研究動(dòng)機(jī)在于開發(fā)一種既能實(shí)現(xiàn)強(qiáng)大性能,又能有效控制訓(xùn)練成本的開源語言模型,以推動(dòng)開源模型的發(fā)展,并為更廣泛的研究和應(yīng)用提供支持。
1、模型架構(gòu)
DeepSeek-V3的架構(gòu)基于Transformer框架,旨在通過高效的推理和經(jīng)濟(jì)的訓(xùn)練實(shí)現(xiàn)強(qiáng)大的模型性能。它繼承了DeepSeek-V2中驗(yàn)證過的多頭潛在注意力(MLA)和DeepSeekMoE架構(gòu),并在此基礎(chǔ)上進(jìn)行了擴(kuò)展和優(yōu)化。下面來詳細(xì)介紹下DeepSeek-V3的三個(gè)關(guān)鍵模塊:
多頭潛在注意力MLA
MLA的核心思想是通過低秩聯(lián)合壓縮來減少注意力機(jī)制中的查詢(query)、鍵(Key)和值(Value)的維度,從而在推理時(shí)顯著減少KV緩存的存儲(chǔ)需求。這種壓縮方法不僅減少了內(nèi)存占用,還通過保持性能與標(biāo)準(zhǔn)多頭注意力相當(dāng),實(shí)現(xiàn)了高效的推理。
結(jié)合圖2和公式,簡(jiǎn)單做下MLA的解釋:
- 壓縮潛在向量
計(jì)算,用于后續(xù)的鍵(Key)和值(Value)的生成;
- 將壓縮后的潛在向量
映射回原始維度空間以生成鍵
;
- 應(yīng)用旋轉(zhuǎn)位置編碼(RoPE)引入位置信息得到
,拼接壓縮后的鍵
,得到
;
- 將壓縮后的潛在向量
映射回原始維度空間得到值
;
- 查詢
的計(jì)算方式同理。
這些步驟共同構(gòu)成了MLA機(jī)制中的關(guān)鍵部分,通過壓縮和恢復(fù)操作減少了計(jì)算和存儲(chǔ)需求,同時(shí)通過RoPE引入位置信息以保持注意力機(jī)制的有效性。這種方法在保持模型性能的同時(shí),提高了推理效率。
最后通過注意力機(jī)制計(jì)算公式得到最終的輸出。
DeepSeekMoE
在DeepSeek-V3中,對(duì)于前饋網(wǎng)絡(luò)(Feed-Forward Networks, FFNs)采用DeepSeekMoE架構(gòu)。與其它MoE架構(gòu)(例如GShard)相比,DeepSeekMoE使用更細(xì)粒度的專家,并且將一些專家隔離為共享專家。給定輸入,其FFN輸出
計(jì)算如下:
和
分別表示共享專家和路由專家的數(shù)量;
和
分別表示第 i 個(gè)共享專家和第 i 個(gè)路由專家;
表示激活的路由專家數(shù)量;
是第 i 個(gè)專家的門控值;
是token到專家的親和度,表示第i個(gè)token與第i個(gè)路由專家之間的相關(guān)性或匹配程度;
是第 i 個(gè)路由專家的中心向量,是每個(gè)路由專家的固定表示,用于捕捉專家的特性或?qū)iL;Topk(?,K) 表示包含第t 個(gè)Token與所有路由專家計(jì)算的親和度分?jǐn)?shù)中前 K 個(gè)最高分?jǐn)?shù)的集合。
無輔助損失的負(fù)載均衡:
MoE模型中,專家負(fù)載的不均衡會(huì)導(dǎo)致路由崩潰(routing collapse),從而降低計(jì)算效率。傳統(tǒng)解決方案通常依賴輔助損失來避免負(fù)載不均衡,但過大的輔助損失可能會(huì)損害模型性能。
簡(jiǎn)單介紹下輔助損失:輔助損失是一種顯式的損失函數(shù),用于鼓勵(lì)負(fù)載均衡。它通常是一個(gè)正則化項(xiàng),添加到模型的總損失函數(shù)中,以懲罰負(fù)載不均衡的情況。具體來說,輔助損失會(huì)計(jì)算每個(gè)專家的負(fù)載,并對(duì)負(fù)載不均衡的情況施加懲罰。
為了在負(fù)載均衡和模型性能之間取得更好的平衡,DeepSeek-V3引入了無輔助損失的負(fù)載均衡策略,無輔助損失是一種不依賴顯式輔助損失函數(shù)的負(fù)載均衡策略。通過動(dòng)態(tài)調(diào)整每個(gè)專家的偏置項(xiàng),而不是通過顯式的損失函數(shù)來實(shí)現(xiàn)負(fù)載均衡。這種策略的目標(biāo)是在不引入額外損失的情況下,實(shí)現(xiàn)高效的負(fù)載均衡。
- 偏置項(xiàng)的引入:
其中是僅用于路由的每個(gè)專家的偏置項(xiàng)。
- 動(dòng)態(tài)調(diào)整:
在訓(xùn)練過程中,持續(xù)監(jiān)控每個(gè)訓(xùn)練步驟中整個(gè)批次的專家負(fù)載。在每個(gè)步驟結(jié)束時(shí),如果相應(yīng)的專家過載,將偏置項(xiàng)減少γ;如果相應(yīng)專家負(fù)載不足,則將其增加γ,γ是一個(gè)超參數(shù),稱為偏置更新速度。通過動(dòng)態(tài)調(diào)整,DeepSeek-V3在訓(xùn)練期間保持專家負(fù)載均衡,并實(shí)現(xiàn)了比通過純輔助損失鼓勵(lì)負(fù)載均衡的模型更好的性能。
序列級(jí)平衡損失:
盡管DeepSeek-V3主要依賴無輔助損失策略來實(shí)現(xiàn)負(fù)載均衡,但為了防止單個(gè)序列內(nèi)的極端不平衡,DeepSeek-V3還采用了序列級(jí)平衡損失:
表示第i個(gè)專家在整個(gè)序列上的負(fù)載比例,
衡量第i個(gè)專家在整個(gè)訓(xùn)練批次中的負(fù)載均衡程度。
另外,為了限制訓(xùn)練期間的通信成本,V3版本中還采用了節(jié)點(diǎn)限制的路由(Node-Limited Routing)這一通信優(yōu)化策略,通過根據(jù)每個(gè)節(jié)點(diǎn)上分布的專家的最高親和度分?jǐn)?shù)的總和,確保每個(gè)token在訓(xùn)練過程中最多被發(fā)送到M個(gè)節(jié)點(diǎn)。
由于實(shí)施了有效的負(fù)載均衡策略,DeepSeek-V3在整個(gè)訓(xùn)練過程中維持了專家之間的負(fù)載均衡,避免了過載情況的發(fā)生。因此,在訓(xùn)練階段不會(huì)丟棄任何token,確保了訓(xùn)練數(shù)據(jù)的完整性和模型性能的穩(wěn)定性。此外,為了在推理階段也保持負(fù)載均衡,DeepSeek-V3實(shí)現(xiàn)了特定的部署策略,這樣在推理時(shí)也不會(huì)丟棄任何token,進(jìn)一步確保了模型在實(shí)際應(yīng)用中的性能和可靠性。
多Token預(yù)測(cè)
多token預(yù)測(cè)(MTP)是一種通過擴(kuò)展模型預(yù)測(cè)范圍來增強(qiáng)模型性能的訓(xùn)練策略。通過在訓(xùn)練期間預(yù)測(cè)多個(gè)未來tokens,MTP可以提高數(shù)據(jù)效率并可能使模型能夠更好地規(guī)劃其表示以進(jìn)行更遠(yuǎn)未來的預(yù)測(cè)。在推理階段,MTP模塊可以被丟棄,而主模型可以獨(dú)立運(yùn)行,同時(shí)也可以用于推測(cè)性解碼以提高生成速度。這種方法在提高模型性能的同時(shí),也為推理加速提供了可能性。
MTP模塊由多個(gè)順序排列的子模塊組成,每個(gè)子模塊負(fù)責(zé)預(yù)測(cè)一個(gè)額外的未來Token。每個(gè)子模塊包含以下組件:
- 共享嵌入層(Embedding Layer):與主模型共享,用于將輸入Token映射到嵌入空間。
- 投影矩陣(Projection Matrix):用于將當(dāng)前Token的表示與后k個(gè)Token的嵌入組合起來,作為Transformer塊的輸入。
- Transformer塊(Transformer Block):用于處理輸入表示并生成輸出表示。
- 輸出頭(Output Head):與主模型共享,用于將Transformer塊的輸出映射到詞匯表的概率分布。
- 訓(xùn)練目標(biāo):對(duì)于每個(gè)MTP模塊,計(jì)算一個(gè)交叉熵?fù)p失(Cross-Entropy Loss),衡量預(yù)測(cè)分布與真實(shí)Token之間的差異:
總損失:將所有MTP模塊的損失加權(quán)平均,得到最終的MTP損失:
2、預(yù)訓(xùn)練Pre-training
數(shù)據(jù)構(gòu)建
與DeepSeek-V2相比,DeepSeek-V3的數(shù)據(jù)集在多語言覆蓋上進(jìn)行了優(yōu)化,特別是增加了數(shù)學(xué)和編程樣本的比例,并擴(kuò)展了除英語和中文之外的多語言覆蓋。另外數(shù)據(jù)處理流程經(jīng)過優(yōu)化,以減少冗余并保持?jǐn)?shù)據(jù)集的多樣性。最終DeepSeek-V3的預(yù)訓(xùn)練語料庫由14.8萬億個(gè)高質(zhì)量和多樣化的token組成。
Fill-in-Middle (FIM) 策略:FIM策略能夠使模型在保持下一個(gè)Token預(yù)測(cè)能力的同時(shí),能夠使模型根據(jù)上下文線索準(zhǔn)確預(yù)測(cè)中間文本。
具體來說,采用前綴-后綴-中間(Prefix-Suffix-Middle, PSM)框架來結(jié)構(gòu)化數(shù)據(jù),如下所示:
<|fim_begin|>/pre<|fim_hole|>/sur<|fim_end|>/middle<|eos_token|>.
其中,/pre
和/suf
是上下文文本,/middle
是需要預(yù)測(cè)的中間文本。這種結(jié)構(gòu)在文檔級(jí)別上作為預(yù)打包過程的一部分應(yīng)用。
DeepSeek-V3的Tokenizer采用了字節(jié)級(jí)BPE(Byte-level BPE),擴(kuò)展了詞匯表到128K個(gè)token。并且在此基礎(chǔ)上,Tokenizer的預(yù)處理和訓(xùn)練數(shù)據(jù)經(jīng)過優(yōu)化,與DeepSeek-V2相比,新的預(yù)處理引入了結(jié)合標(biāo)點(diǎn)符號(hào)和換行符的token,以提高多語言壓縮效率。但這種技巧可能會(huì)在處理多行提示時(shí)引入邊界偏差,為了緩解這種邊界偏差,DeepSeek團(tuán)隊(duì)在訓(xùn)練中隨機(jī)分割了一定比例的這種組合token,使模型能夠接觸到更廣泛的特殊情況,從而減輕偏差。
長上下文擴(kuò)展
在預(yù)訓(xùn)練階段之后,應(yīng)用YaRN進(jìn)行上下文擴(kuò)展,并執(zhí)行兩個(gè)額外的訓(xùn)練階段,每個(gè)階段包含 1000 步,以逐步將上下文窗口從 4K 擴(kuò)展到 32K,然后再擴(kuò)展到 128K。
通過這兩個(gè)階段的擴(kuò)展訓(xùn)練,DeepSeek-V3 能夠處理長達(dá) 128K 的輸入,同時(shí)保持強(qiáng)大的性能。圖 8 展示了 DeepSeek-V3 在經(jīng)過監(jiān)督微調(diào)后,在“Needle In A Haystack”(NIAH)測(cè)試中的顯著表現(xiàn),展示了其在長達(dá) 128K 的上下文窗口長度上的一致性魯棒性。
3、后訓(xùn)練Post-training
推理數(shù)據(jù)構(gòu)建
對(duì)于與推理相關(guān)的數(shù)據(jù)集,包括數(shù)學(xué)、代碼競(jìng)賽問題和邏輯謎題,數(shù)據(jù)是通過內(nèi)部的DeepSeek-R1模型生成的。盡管R1生成的數(shù)據(jù)具有較高的準(zhǔn)確性,但存在過度思考、格式不佳和長度過長等。為了平衡高準(zhǔn)確性和清晰簡(jiǎn)潔性,作者采用了以下方法:
- 開發(fā)專家模型:針對(duì)特定領(lǐng)域(如代碼、數(shù)學(xué)或一般推理),開發(fā)了一個(gè)專家模型,使用結(jié)合監(jiān)督微調(diào)(SFT)和強(qiáng)化學(xué)習(xí)(RL)的訓(xùn)練流程。這個(gè)專家模型作為最終模型的數(shù)據(jù)生成器。
- 生成SFT樣本:訓(xùn)練過程中,為每個(gè)實(shí)例生成兩種不同類型的SFT樣本:
原始響應(yīng)樣本:將問題與其原始響應(yīng)配對(duì),格式為<問題, 原始響應(yīng)>
。
系統(tǒng)提示樣本:將系統(tǒng)提示與問題和R1響應(yīng)結(jié)合,格式為<系統(tǒng)提示, 問題, R1響應(yīng)>
。
系統(tǒng)提示經(jīng)過精心設(shè)計(jì),包含指導(dǎo)模型生成帶有反思和驗(yàn)證機(jī)制的響應(yīng)的指令。在 RL 階段,模型利用高溫采樣生成結(jié)合了 R1 生成數(shù)據(jù)和原始數(shù)據(jù)模式的響應(yīng),經(jīng)過數(shù)百個(gè) RL 步驟后,中間 RL 模型學(xué)會(huì)了整合 R1 模式,從而戰(zhàn)略性地提升整體性能。
專家模型作為數(shù)據(jù)生成源,在完成 RL 訓(xùn)練階段后,實(shí)施拒絕采樣以篩選高質(zhì)量的 SFT 數(shù)據(jù)用于最終模型。這種方法確保最終訓(xùn)練數(shù)據(jù)保留了 DeepSeek-R1 的優(yōu)勢(shì),同時(shí)生成簡(jiǎn)潔且有效的響應(yīng)。
非推理數(shù)據(jù)構(gòu)建
對(duì)于非推理數(shù)據(jù),如創(chuàng)意寫作、角色扮演和簡(jiǎn)單問答,使用 DeepSeek-V2.5 生成響應(yīng),并由人工標(biāo)注員驗(yàn)證數(shù)據(jù)的準(zhǔn)確性和正確性。
強(qiáng)化學(xué)習(xí)
強(qiáng)化學(xué)習(xí)同R1,這里不過多介紹,簡(jiǎn)單附上相關(guān)內(nèi)容:
組相對(duì)策略優(yōu)化(GRPO):在傳統(tǒng)的強(qiáng)化學(xué)習(xí)設(shè)置中,通常需要一個(gè)與策略模型大小相同的批評(píng)模型來估計(jì)基線。為了降低RL訓(xùn)練成本,DeepSeek-R1-Zero采用了GRPO方法。
對(duì)于每個(gè)問題q,GRPO從舊策略中采樣一組輸出
,然后通過最大化目標(biāo)函數(shù)來優(yōu)化策略模型
:
其中?和β是超參數(shù),分別控制裁剪范圍和KL散度的權(quán)重,是優(yōu)勢(shì)值,計(jì)算方式如下:
是第i個(gè)輸出對(duì)應(yīng)的獎(jiǎng)勵(lì),而均值和標(biāo)準(zhǔn)差是基于整個(gè)組的獎(jiǎng)勵(lì)計(jì)算得出的。這種標(biāo)準(zhǔn)化處理有助于穩(wěn)定訓(xùn)練過程,并使得不同輸出間的比較更加公平。
獎(jiǎng)勵(lì)模型
在 RL 過程中使用了基于規(guī)則的獎(jiǎng)勵(lì)模型(Rule-Based RM)和基于模型的獎(jiǎng)勵(lì)模型(Model-Based RM)。
基于規(guī)則的獎(jiǎng)勵(lì)模型:對(duì)于可以通過特定規(guī)則驗(yàn)證的問題,采用基于規(guī)則的獎(jiǎng)勵(lì)系統(tǒng)來確定反饋。例如,某些數(shù)學(xué)問題具有確定性的結(jié)果,要求模型在指定格式(例如在一個(gè)框中)提供最終答案,從而允許應(yīng)用規(guī)則來驗(yàn)證其正確性。
基于模型的獎(jiǎng)勵(lì)模型:對(duì)于具有自由形式真實(shí)答案的問題,依賴獎(jiǎng)勵(lì)模型來確定響應(yīng)是否符合預(yù)期的真實(shí)答案。相反,對(duì)于沒有明確真實(shí)答案的問題(如涉及創(chuàng)意寫作的問題),獎(jiǎng)勵(lì)模型的任務(wù)是根據(jù)問題和相應(yīng)的答案提供反饋。獎(jiǎng)勵(lì)模型是從 DeepSeek-V3 SFT 檢查點(diǎn)訓(xùn)練的。
4、Infra
- 對(duì)于Infra,了解較少,簡(jiǎn)單介紹下,后續(xù)再深度解讀這一章節(jié)。
計(jì)算集群
DeepSeek-V3的訓(xùn)練是在一個(gè)強(qiáng)大的計(jì)算集群上完成的,該集群配備了2048個(gè)NVIDIA H800 GPU。這種大規(guī)模的GPU集群為模型的訓(xùn)練提供了強(qiáng)大的計(jì)算能力。具體來說:
- 節(jié)點(diǎn)配置
每個(gè)節(jié)點(diǎn)包含8個(gè)GPU,這些GPU通過NVLink和NVSwitch在節(jié)點(diǎn)內(nèi)部進(jìn)行高速連接。這種連接方式能夠?qū)崿F(xiàn)節(jié)點(diǎn)內(nèi)部的高效通信,減少數(shù)據(jù)傳輸?shù)难舆t。
- 跨節(jié)點(diǎn)通信
不同節(jié)點(diǎn)之間的通信則通過InfiniBand(IB)網(wǎng)絡(luò)實(shí)現(xiàn)。IB網(wǎng)絡(luò)以其高帶寬和低延遲的特點(diǎn),能夠有效地支持大規(guī)模分布式訓(xùn)練中的數(shù)據(jù)傳輸需求。
這種集群配置結(jié)合了節(jié)點(diǎn)內(nèi)部的高速NVLink連接和跨節(jié)點(diǎn)的IB網(wǎng)絡(luò),為DeepSeek-V3的分布式訓(xùn)練提供了強(qiáng)大的硬件支持。
訓(xùn)練框架
DeepSeek-V3的訓(xùn)練由HAI-LLM框架支持,這是一個(gè)高效且輕量級(jí)的訓(xùn)練框架,專為大規(guī)模模型訓(xùn)練設(shè)計(jì)。該框架采用了多種并行化策略來提高訓(xùn)練效率,具體包括:
- 16路管道并行(Pipeline Parallelism, PP)
將模型的不同層分配到不同的GPU上,通過流水線的方式進(jìn)行并行計(jì)算,減少單個(gè)GPU的計(jì)算負(fù)擔(dān)。
- 64路專家并行(Expert Parallelism, EP)
跨越8個(gè)節(jié)點(diǎn),支持大規(guī)模的Mixture-of-Experts(MoE)架構(gòu),通過并行化專家層的計(jì)算來提高效率。
- ZeRO-1數(shù)據(jù)并行(Data Parallelism, DP)
通過優(yōu)化內(nèi)存管理和通信效率,進(jìn)一步提升訓(xùn)練速度。
為了進(jìn)一步優(yōu)化訓(xùn)練過程,DeepSeek-V3實(shí)施了以下工程優(yōu)化策略:
- DualPipe與計(jì)算-通信重疊
DualPipe算法是DeepSeek-V3的一個(gè)關(guān)鍵創(chuàng)新,旨在解決跨節(jié)點(diǎn)專家并行帶來的通信開銷問題。具體優(yōu)化措施包括:
重疊計(jì)算和通信:DualPipe算法通過在前向和后向過程中重疊計(jì)算和通信階段,減少了管道氣泡,提高了訓(xùn)練效率。每個(gè)塊被分為四個(gè)組件:注意力、全對(duì)全分發(fā)、MLP和全對(duì)全組合。后向塊中的注意力和MLP進(jìn)一步分為輸入的后向和權(quán)重的后向,類似于ZeroBubble算法。
雙向管道調(diào)度:采用雙向管道調(diào)度,同時(shí)從管道的兩端輸入微批次,大部分通信可以完全重疊,從而實(shí)現(xiàn)接近零的全對(duì)全通信開銷。這種策略確保了即使模型進(jìn)一步擴(kuò)展,只要保持恒定的計(jì)算與通信比例,就可以在跨節(jié)點(diǎn)上使用細(xì)粒度專家,而不會(huì)增加額外的通信成本。
- 跨節(jié)點(diǎn)全對(duì)全通信的高效實(shí)現(xiàn)
為了充分利用IB和NVLink的帶寬,DeepSeek-V3開發(fā)了高效的跨節(jié)點(diǎn)全對(duì)全通信內(nèi)核。具體措施包括:
限制Token分發(fā):每個(gè)Token最多分發(fā)到4個(gè)節(jié)點(diǎn),減少IB流量。
通信重疊:通過NVLink即時(shí)轉(zhuǎn)發(fā)Token,確保IB和NVLink的通信完全重疊,提高通信效率。
Warp specialization技術(shù):將20個(gè)SM劃分為10個(gè)通信通道,動(dòng)態(tài)調(diào)整每個(gè)通信任務(wù)的warp數(shù)量,減少對(duì)計(jì)算資源的占用。
定制PTX指令:采用定制的PTX指令,自動(dòng)調(diào)整通信塊大小,減少L2緩存的使用和對(duì)其他SM的干擾。
這些優(yōu)化措施顯著提高了跨節(jié)點(diǎn)通信的效率,減少了通信開銷。
- 極低內(nèi)存占用與最小開銷
為了減少訓(xùn)練期間的內(nèi)存占用,DeepSeek-V3采用了以下技術(shù):
RMSNorm和MLA上投影的重計(jì)算:在反向傳播期間重新計(jì)算所有RMSNorm操作和MLA上投影,避免了持久存儲(chǔ)其輸出激活的需求,顯著減少了內(nèi)存占用。
CPU中的指數(shù)移動(dòng)平均(EMA):將EMA參數(shù)存儲(chǔ)在CPU內(nèi)存中,并在每個(gè)訓(xùn)練步驟后異步更新,避免了額外的內(nèi)存和時(shí)間開銷。
多Token預(yù)測(cè)的共享嵌入和輸出頭:通過將模型的最淺層和最深層部署在同一個(gè)PP等級(jí)上,實(shí)現(xiàn)MTP模塊和主模型之間的物理共享,進(jìn)一步提高了內(nèi)存效率。
這些內(nèi)存優(yōu)化措施使得DeepSeek-V3能夠在不使用昂貴的張量并行(TP)的情況下進(jìn)行訓(xùn)練,顯著降低了訓(xùn)練成本。
FP8 訓(xùn)練
FP8訓(xùn)練是DeepSeek-V3的一個(gè)重要?jiǎng)?chuàng)新,旨在通過低精度計(jì)算提高訓(xùn)練效率,同時(shí)保持模型的數(shù)值穩(wěn)定性。
DeepSeek-V3采用了一種細(xì)粒度的混合精度框架,利用FP8數(shù)據(jù)格式進(jìn)行訓(xùn)練。該框架的主要特點(diǎn)包括:
- 核心計(jì)算的低精度化:
GEMM操作:大多數(shù)核心計(jì)算內(nèi)核(如矩陣乘法GEMM)以FP8精度執(zhí)行。這些操作接受FP8張量作為輸入,并生成BF16或FP32輸出。例如,前向傳播(Fprop)、激活反向傳 播(Dgrad)和權(quán)重反向傳播(Wgrad)均以FP8精度執(zhí)行。這種設(shè)計(jì)理論上比BF16方法快一倍,并且顯著減少了內(nèi)存消耗。
存儲(chǔ)優(yōu)化:FP8 Wgrad GEMM允許激活以FP8格式存儲(chǔ),用于反向傳播,進(jìn)一步減少了內(nèi)存使用
- 關(guān)鍵操作的高精度保留:
嵌入模塊、輸出頭、MoE門控模塊、歸一化算子和注意力算子:這些操作對(duì)精度較為敏感,因此保留其原始精度(如BF16或FP32),以確保訓(xùn)練的數(shù)值穩(wěn)定性。
主權(quán)重、權(quán)重梯度和優(yōu)化器狀態(tài):這些關(guān)鍵參數(shù)以更高精度存儲(chǔ),以保證訓(xùn)練過程中的數(shù)值穩(wěn)定性。通過在分布式訓(xùn)練系統(tǒng)中跨多個(gè)數(shù)據(jù)并行(DP)等級(jí)進(jìn)行分片,可以最小化這些高精度組件帶來的內(nèi)存開銷。
為了提高低精度訓(xùn)練的準(zhǔn)確性,DeepSeek-V3引入了多種策略,重點(diǎn)關(guān)注量化方法和乘法過程:
- 細(xì)粒度量化:
激活量化:激活值以1x128的瓦片為基礎(chǔ)進(jìn)行分組和縮放,即每個(gè)Token每128個(gè)通道。這種方法能夠更好地適應(yīng)激活值中的異常值,減少量化誤差。
權(quán)重量化:權(quán)重以128x128的塊為基礎(chǔ)進(jìn)行分組和縮放,即每128個(gè)輸入通道每128個(gè)輸出通道。這種塊級(jí)量化方法能夠有效管理權(quán)重中的異常值。
每組縮放因子:在GEMM操作的內(nèi)部維度上引入每組縮放因子,這在標(biāo)準(zhǔn)FP8 GEMM中并不直接支持。結(jié)合精確的FP32累積策略,可以高效實(shí)現(xiàn)這一功能。
- 增加累積精度:
提升到CUDA Core:為了提高FP8 GEMM的精度,DeepSeek-V3采用了一種策略,將中間結(jié)果從Tensor Core提升到CUDA Core進(jìn)行高精度累積。具體來說,當(dāng)累積間隔達(dá)到128個(gè)元素時(shí),將部分結(jié)果復(fù)制到CUDA Core上的FP32寄存器中,進(jìn)行全精度累積。這種策略顯著提高了計(jì)算精度,同時(shí)保持了Tensor Core的高利用率。
最小累積間隔:實(shí)驗(yàn)表明,設(shè)置累積間隔為128個(gè)元素(相當(dāng)于4個(gè)WGMMA操作)是提高精度與引入開銷之間的最佳平衡點(diǎn)。
- 尾數(shù)優(yōu)先于指數(shù):
E4M3格式:與之前工作采用的混合FP8格式(如E4M3用于前向傳播,E5M2用于反向傳播)不同,DeepSeek-V3在所有張量上采用E4M3格式(4位指數(shù)和3位尾數(shù)),以獲得更高精度。這種方法的可行性歸因于細(xì)粒度量化策略,即瓦片和塊級(jí)縮放。
- 在線量化:
動(dòng)態(tài)縮放:在線計(jì)算每個(gè)1x128激活瓦片或128x128權(quán)重塊的最大絕對(duì)值,并基于此導(dǎo)出縮放因子,然后將激活或權(quán)重在線量化為FP8格式。這種方法避免了延遲量化中保留歷史最大值的復(fù)雜性,簡(jiǎn)化了框架設(shè)計(jì)。
結(jié)合FP8訓(xùn)練框架,DeepSeek-V3進(jìn)一步減少了內(nèi)存消耗和通信開銷:
- 低精度優(yōu)化器狀態(tài):
BF16格式:采用BF16數(shù)據(jù)格式跟蹤AdamW優(yōu)化器中的第一和第二矩,顯著減少了內(nèi)存占用,同時(shí)保持了訓(xùn)練精度。
主權(quán)重和梯度:主權(quán)重和梯度仍然以FP32格式存儲(chǔ),以確保數(shù)值穩(wěn)定性。
- 低精度激活:
FP8緩存:在Wgrad操作中,激活以FP8格式緩存,顯著減少了內(nèi)存使用。
- 特殊處理:
注意力算子后的線性算子輸入:這些激活對(duì)精度較為敏感,因此采用定制的E5M6數(shù)據(jù)格式,并在反向傳播中從1x128量化瓦片轉(zhuǎn)換為128x1瓦片。
MoE中的SwiGLU算子輸入:為了進(jìn)一步減少內(nèi)存成本,這些激活在反向傳播中重新計(jì)算,采用FP8格式存儲(chǔ),以平衡內(nèi)存效率和計(jì)算精度。
- 低精度通信:
激活量化:在MoE上投影之前,將激活量化為FP8,然后應(yīng)用分發(fā)組件,以減少通信開銷。
保留關(guān)鍵部分的高精度:對(duì)于前向和后向組合組件,仍然以BF16格式保留,以保持訓(xùn)練精度。
5、預(yù)訓(xùn)練結(jié)果
基準(zhǔn)數(shù)據(jù)集
- 多學(xué)科多項(xiàng)選擇:MMLU、MMLU-Redux、MMLU-Pro、MMMLU、C-Eval 和 CMMLU。
- 語言理解和推理:HellaSwag、PIQA、ARC 和 BigBench Hard(BBH)。
- 閉卷問答:TriviaQA 和 NaturalQuestions。
- 閱讀理解:RACE、DROP、C3 和 CMRC。
- 指代消解:CLUEWSC 和 WinoGrande。
- 語言建模:Pile。
- 中文理解和文化:CCPM。
- 數(shù)學(xué):GSM8K、MATH、MGSM 和 CMath。
- 代碼:HumanEval、LiveCodeBench-Base(0801-1101)、MBPP 和 CRUXEval。
- 標(biāo)準(zhǔn)化考試:AGIEval,包括英語和中文子集。
指標(biāo)
- 準(zhǔn)確率(EM, Exact Match):用于衡量模型生成的文本與參考答案完全匹配的比例。
- F1分?jǐn)?shù):用于衡量模型生成的文本與參考答案的重疊程度,通常用于閱讀理解和問答任務(wù)。
- 通過率(Pass@1):用于衡量模型生成的代碼或解決方案通過測(cè)試的比例,通常用于代碼生成和編程競(jìng)賽任務(wù)。
- 困惑度(Perplexity):用于衡量模型對(duì)文本序列的預(yù)測(cè)不確定性,數(shù)值越低表示模型的預(yù)測(cè)越準(zhǔn)確。
- 每字節(jié)比特?cái)?shù)(BPB, Bits-Per-Byte):用于衡量模型對(duì)每個(gè)字節(jié)的預(yù)測(cè)不確定性,數(shù)值越低表示模型的預(yù)測(cè)越準(zhǔn)確,適用于語言建模任務(wù)。
主要結(jié)果
DeepSeek-V3-Base在幾乎所有基準(zhǔn)測(cè)試中都顯著優(yōu)于DeepSeek-V2-Base和 Qwen2.5 72B Base,并且在大多數(shù)基準(zhǔn)上超越了 LLaMA-3.1 405B Base(激活參數(shù)是DeepSeek-V3的11倍),基本上成為了最強(qiáng)的開源模型。
多Token預(yù)測(cè)(MTP)策略的影響
在多個(gè)基準(zhǔn)測(cè)試中,使用MTP策略在大多數(shù)評(píng)估基準(zhǔn)上一致地提升了模型性能
無輔助損失的負(fù)載平衡策略
從表5中可以看出,與傳統(tǒng)的基于輔助損失的負(fù)載平衡方法相比,DeepSeek-V3采用的無輔助損失策略在大多數(shù)評(píng)估基準(zhǔn)上一致地實(shí)現(xiàn)了更好的模型性能。
批次級(jí)負(fù)載均衡與序列級(jí)負(fù)載均衡
通過對(duì)比無輔助損失方法(即批次級(jí)負(fù)載均衡)與序列級(jí)輔助損失方法,研究兩者在平衡范圍上的不同(批次級(jí) vs 序列級(jí)),以及這種差異如何影響專家模型的專業(yè)化程度。
實(shí)驗(yàn)結(jié)果顯示,批次級(jí)負(fù)載均衡不僅促進(jìn)了專家的專業(yè)化,還可能帶來更好的模型性能或至少不劣于序列級(jí)負(fù)載均衡方法。
盡管無輔助損失策略是主要方法,但為了防止極端不平衡,作者還是引入了序列級(jí)輔助損失。這個(gè)輔助損失的權(quán)重非常小(α\alphaα=0.0001),其主要目的是避免在單個(gè)序列中出現(xiàn)極端不平衡的情況,而不是強(qiáng)制每個(gè)序列內(nèi)的負(fù)載完全均衡。
6、后訓(xùn)練結(jié)果
基準(zhǔn)數(shù)據(jù)集
除基礎(chǔ)模型測(cè)試基準(zhǔn)外,仍使用了下列基準(zhǔn)數(shù)據(jù)集:
- 語言理解與問答:IFEval、FRAMES、LongBench v2、GPQA、SimpleQA、C-SimpleQA、
- 代碼生成與軟件工程:SWE-Bench Verified、Aider 1、LiveCodeBench(2024年8月至11月的問題)、Codeforces 2
- 數(shù)學(xué)問題解決:CNMO 2024(中國國家高中數(shù)學(xué)奧林匹克)、AIME 2024(美國數(shù)學(xué)邀請(qǐng)賽)
- 多語言能力:C-SimpleQA
- 開放性對(duì)話與生成:IFEval、FRAMES
結(jié)果
在所有評(píng)估基準(zhǔn)中,幾乎全部超越頂級(jí)開源模型Qwen-2.5 72B-Inst和LLaMA-3.1 405B-Inst,與頂級(jí)閉源模型如GPT-4o和Claude-3.5-Sonnet的競(jìng)爭(zhēng)中也展現(xiàn)出相當(dāng)?shù)母?jìng)爭(zhēng)力
開放性評(píng)估
AlpacaEval 2.0:在簡(jiǎn)單任務(wù)寫作和問答場(chǎng)景中,DeepSeek-V3的準(zhǔn)確率達(dá)到70.0,顯著優(yōu)于其他模型。
Arena-Hard:在復(fù)雜提示處理任務(wù)中,DeepSeek-V3的勝率達(dá)到85.5,與Claude-3.5-Sonnet相當(dāng),成為首個(gè)超過85%的開源模型。
作為生成式獎(jiǎng)勵(lì)模型
DeepSeek-V3在RewardBench上的表現(xiàn)與GPT-4o和Claude-3.5-Sonnet相當(dāng),顯示出其作為生成式獎(jiǎng)勵(lì)模型的潛力。通過投票機(jī)制,DeepSeek-V3的性能可以進(jìn)一步提升。
知識(shí)蒸餾的有效性
基于 DeepSeek-V2.5 消融了從 DeepSeek-R1 進(jìn)行蒸餾的貢獻(xiàn)。通過從DeepSeek-R1系列模型中蒸餾推理能力,DeepSeek-V2.5在代碼生成和數(shù)學(xué)問題解決任務(wù)中表現(xiàn)出顯著提升。
文中提出:研究表明,從推理模型進(jìn)行知識(shí)蒸餾為后訓(xùn)練優(yōu)化提供了一個(gè)有前景的方向。雖然目前的工作集中在從數(shù)學(xué)和編碼領(lǐng)域蒸餾數(shù)據(jù),但這種方法顯示出在需要復(fù)雜推理的其他認(rèn)知任務(wù)中增強(qiáng)模型性能的潛力。這些特定領(lǐng)域的有效性表明,長 CoT 蒸餾對(duì)于增強(qiáng)其他領(lǐng)域的模型性能可能具有重要價(jià)值。進(jìn)一步探索這一方法在不同領(lǐng)域的應(yīng)用仍然是未來研究的重要方向。
自我獎(jiǎng)勵(lì)機(jī)制
在強(qiáng)化學(xué)習(xí)(RL)中,獎(jiǎng)勵(lì)信號(hào)對(duì)于指導(dǎo)模型的學(xué)習(xí)過程至關(guān)重要。然而,在很多實(shí)際應(yīng)用場(chǎng)景中,并沒有簡(jiǎn)單的方法來獲得準(zhǔn)確的外部獎(jiǎng)勵(lì)信號(hào),特別是在那些難以通過自動(dòng)化工具驗(yàn)證的任務(wù)中。DeepSeek-V3采用了所謂的“憲法AI”方法,這是一種利用模型自身能力來評(píng)估結(jié)果并提供反饋?zhàn)鳛楠?jiǎng)勵(lì)信號(hào)的技術(shù)。
具體來說,這種方法依賴于DeepSeek-V3模型自己對(duì)生成內(nèi)容進(jìn)行投票評(píng)估,以此作為自我獎(jiǎng)勵(lì)的基礎(chǔ)。這種策略不僅增強(qiáng)了模型與人類價(jià)值觀的一致性(即對(duì)齊),而且提高了其在主觀評(píng)估任務(wù)中的表現(xiàn)。此外,通過整合額外的“憲法輸入”,即一組預(yù)定義的原則或指導(dǎo)方針,可以引導(dǎo)模型朝著更符合預(yù)期的方向優(yōu)化。
多Token預(yù)測(cè)的評(píng)估:DeepSeek-V3通過多Token預(yù)測(cè)(MTP)技術(shù),在推理過程中實(shí)現(xiàn)了顯著的加速。實(shí)驗(yàn)表明,額外預(yù)測(cè)的Token接受率在85%到90%之間,表現(xiàn)出了一致的可靠性,使得模型的解碼速度提升了1.8倍。
7、總結(jié)
從結(jié)構(gòu)上來看,DeepSeek-V3的三大貢獻(xiàn)主要是:
- 多頭潛在注意力機(jī)制MLA,通過低秩壓縮注意力鍵(Key)和值(Value),減少了在推理時(shí)需要緩存的KV空間,在保證模型的表達(dá)能力的同時(shí)提高了訓(xùn)練和推理的效率,并降低了內(nèi)存消耗。
- MoE,根據(jù)輸入數(shù)據(jù)的特點(diǎn),動(dòng)態(tài)路由輸入數(shù)據(jù)到最合適的專家子集,只激活相關(guān)的專家,從而減少不必要的計(jì)算,提高計(jì)算效率。并且MoE結(jié)構(gòu)可以增加更多的專家,很容易擴(kuò)展到更大的規(guī)模以處理更復(fù)雜的任務(wù),不同的專家也可以專門化處理不同類型的數(shù)據(jù)或任務(wù),從而提高模型在特定任務(wù)上的性能。
- 多Token預(yù)測(cè)MTP,在傳統(tǒng)的訓(xùn)練過程中,模型通常只預(yù)測(cè)下一個(gè)Token。而MTP策略要求模型預(yù)測(cè)多個(gè)未來的Tokens,這增加了訓(xùn)練信號(hào)的數(shù)量,從而可能提高模型的學(xué)習(xí)效率和性能。并且MTP通過預(yù)測(cè)多個(gè)未來的Tokens,可以幫助模型更好地規(guī)劃其內(nèi)部表示,從而改善對(duì)長序列的建模能力。在推理階段,MTP可以被用來實(shí)現(xiàn)推測(cè)性解碼(speculative decoding),即模型可以并行生成多個(gè)Tokens,而不是一個(gè)接一個(gè)地生成。這種方法可以顯著提高生成速度,從而減少推理時(shí)間。
在DeepSeek-V3的技術(shù)報(bào)告中,還詳細(xì)介紹了工程訓(xùn)練中算法、框架和硬件的協(xié)同設(shè)計(jì),尤其是設(shè)計(jì)了FP8混合精度訓(xùn)練框架,解決了跨節(jié)點(diǎn)MoE訓(xùn)練中的通信瓶頸問題,實(shí)現(xiàn)了計(jì)算與通信的高效重疊,顯著降低了訓(xùn)練成本。對(duì)大模型開發(fā)具有非常強(qiáng)的指導(dǎo)和參考意義。
這里還有一個(gè)細(xì)節(jié),在DeepSeek-V3的開發(fā)過程中,DeepSeek-R1就已經(jīng)被用作知識(shí)蒸餾的源模型,以提升DeepSeek-V3的推理能力。這里猜測(cè)R1是根據(jù)V2.5訓(xùn)練得到,并且報(bào)告中提到DeepSeek-R1生成的數(shù)據(jù)存在過度思考、格式不佳和長度過長等問題,這里猜測(cè)是DeepSeek-R1-Zero版本。從這里猜測(cè),DeepSeek團(tuán)隊(duì)在V3發(fā)布之前就已經(jīng)有了R1的初代模型訓(xùn)練和使用,并在V3發(fā)布之后,繼續(xù)基于V3訓(xùn)練了更強(qiáng)大更完善的R1模型。