這兩天,DeepSeek-V3 低調(diào)發(fā)布,在國際上狠狠秀了一波肌肉:只用了 500 多萬美金的成本,帶來了不輸 Claude 3.5 的成績,并開源! ![]() 下面,讓我們以更加系統(tǒng)的方式,來看看這次的 DeepSeek-V3,是這么煉成的。本文將從性能、架構(gòu)、工程、預(yù)訓(xùn)練和后訓(xùn)練五個緯度來拆解 V3,所用到的圖表、數(shù)據(jù)源于技術(shù)報告:《DeepSeek-V3 Technical Report》。 公眾號后臺回復(fù):DSV3,獲得詳細報告?!?/p> 性能DeepSeek-V3 的性能優(yōu)勢,在各項基準測試中得到了充分驗證?!?/p> 如圖,DeepSeek-V3 在 MMLU-Pro、GPQA-Diamond、MATH 500、AIME 2024、Codeforces (Percentile) 和 SWE-bench Verified 等涵蓋知識理解、邏輯推理、數(shù)學(xué)能力、代碼生成以及軟件工程能力等多個維度的權(quán)威測試集上,均展現(xiàn)出了領(lǐng)先或極具競爭力的性能。特別是在 MATH 500 和 AIME 2024 這類考察高級數(shù)學(xué)推理能力的測試中,DeepSeek-V3 的表現(xiàn)尤為突出,大幅超越其他模型?!?/p> 在與 DeepSeek-V2-Base、Qwen2.5 72B Base 和 LLaMA-3.1 405B Base 等開源基礎(chǔ)模型的對比中,DeepSeek-V3-Base 在 BBH、MMLU 系列、DROP、HumanEval、MBPP、LiveCodeBench-Base、GSM8K、MATH、MGSM、CMath 等幾乎所有任務(wù)上均取得最佳成績?!?/p> 經(jīng)過指令微調(diào)后,DeepSeek-V3 的性能進一步提升。在與包括 GPT-4o、Claude-3.5-Sonnet 在內(nèi)的多個頂尖模型的對比中,DeepSeek-V3 在 MMLU、MMLU-Redux、DROP、GPQA-Diamond、HumanEval-Mul、LiveCodeBench、Codeforces、AIME 2024、MATH-500、CNMO 2024、CLUEWSC 等任務(wù)上,均展現(xiàn)出與其相當甚至更優(yōu)的性能?!?/p> 并且,這么棒的數(shù)據(jù),總成本只需要約 550 萬美金:如果是租 H800 來搞這個(但我們都知道,DeepSeek 背后的幻方,最不缺的就是卡) ![]() 架構(gòu)DeepSeek-V3 的這次發(fā)布,伴隨三項創(chuàng)新:Multi-head Latent Attention (MLA)、DeepSeekMoE 架構(gòu)以及無額外損耗的負載均衡策略。 ![]() Multi-head Latent Attention (MLA):高效處理長文本MLA 通過將 Key (K) 和 Value (V) 聯(lián)合映射至低維潛空間向量 (cKV),顯著降低了 KV Cache 的大小,從而提升了長文本推理的效率。DeepSeek-V3 中 MLA 的 KV 壓縮維度 (dc) 設(shè)置為 512,Query 壓縮維度 (d') 設(shè)置為 1536,解耦 Key 的頭維度 (dr) 設(shè)置為 64。這種設(shè)計在保證模型性能的同時,大幅減少了顯存占用和計算開銷?!?/p> DeepSeekMoE 架構(gòu):稀疏激活,高效擴展DeepSeek-V3 采用的 DeepSeekMoE 架構(gòu),通過細粒度專家、共享專家和 Top-K 路由策略,實現(xiàn)了模型容量的高效擴展。每個 MoE 層包含 1 個共享專家和 256 個路由專家,每個 Token 選擇 8 個路由專家,最多路由至 4 個節(jié)點。這種稀疏激活的機制,使得 DeepSeek-V3 能夠在不顯著增加計算成本的情況下,擁有龐大的模型容量?!?/p> 無額外損耗的負載均衡:MoE 的關(guān)鍵優(yōu)化DeepSeek-V3 提出了一種創(chuàng)新的無額外損耗負載均衡策略,通過引入并動態(tài)調(diào)整可學(xué)習(xí)的偏置項 (Bias Term) 來影響路由決策,避免了傳統(tǒng)輔助損失對模型性能的負面影響。該策略的偏置項更新速度 (γ) 在預(yù)訓(xùn)練的前 14.3T 個 Token 中設(shè)置為 0.001,剩余 500B 個 Token 中設(shè)置為 0.0;序列級平衡損失因子 (α) 設(shè)置為 0.0001?!?/p> 以上圖(報告第 28 頁,圖9)中的數(shù)據(jù)為例,使用了該策略的訓(xùn)練模型在不同領(lǐng)域的專家負載情況,相比于添加了額外負載損失(Aux-Loss-Based)的模型,分工更為明確,這表明該策略能更好地釋放MoE的潛力?!?/p> 工程DeepSeek-V3 的這次發(fā)布,伴隨多項工程優(yōu)化貫穿了流水線并行、通信優(yōu)化、內(nèi)存管理和低精度訓(xùn)練等多個方面?!?/p> DualPipe 流水線并行:雙向奔赴,消弭氣泡DeepSeek-V3 采用了一種名為 DualPipe 的創(chuàng)新流水線并行策略。與傳統(tǒng)的單向流水線 (如 1F1B) 不同,DualPipe 采用雙向流水線設(shè)計,即同時從流水線的兩端饋送 micro-batch。這種設(shè)計可以顯著減少流水線氣泡 (Pipeline Bubble),提高 GPU 利用率?!?/p> 此外,DualPipe 還將每個 micro-batch 進一步劃分為更小的 chunk,并對每個 chunk 的計算和通信進行精細的調(diào)度。通過巧妙地編排計算和通信的順序,實現(xiàn)了兩者的高度重疊?!?/p> 單個 forward 和 backward chunk 的重疊策略(原報告第 12頁)。 如圖,如何將一個 chunk 劃分為 attention、all-to-all dispatch、MLP 和 all-to-all combine 等四個組成部分,并通過精細的調(diào)度策略,使得計算和通信可以高度重疊。其中,橙色表示 forward,綠色表示 'backward for input',藍色表示 'backward for weights',紫色表示 PP communication,紅色表示 barriers?!?/p> 8 個 PP rank 和 20 個 micro-batch 的 DualPipe 調(diào)度示例(原報告第 13頁)。通過在 8 個 PP rank 上,20 個 micro-batch 的 DualPipe 調(diào)度情況,可以看到,通過雙向流水線的設(shè)計,以及計算和通信的重疊,流水線氣泡被顯著減少,GPU 利用率得到了極大提升。 ![]() DualPipe 在流水線氣泡數(shù)量和激活內(nèi)存開銷方面均優(yōu)于 1F1B 和 ZeroBubble 等現(xiàn)有方法。(原報告第 13頁) 通信優(yōu)化:多管齊下,突破瓶頸跨節(jié)點 MoE 訓(xùn)練的一大挑戰(zhàn)是巨大的通信開銷。DeepSeek-V3 通過一系列精細的優(yōu)化策略,有效地緩解了這一瓶頸?!?/p>
內(nèi)存管理:精打細算,極致利用DeepSeek-V3 在內(nèi)存管理方面也做到了極致,通過多種策略最大程度地減少了內(nèi)存占用?!?/p>
FP8 低精度訓(xùn)練:精度與效率的平衡DeepSeek-V3 通過 FP8 混合精度訓(xùn)練,在保證模型精度的同時,大幅降低顯存占用并提升訓(xùn)練速度?!?/p>
![]()
![]()
預(yù)訓(xùn)練DeepSeek-V3 的訓(xùn)練策略涵蓋了數(shù)據(jù)構(gòu)建、分詞其、超參數(shù)設(shè)置、長上下文擴展和多 Token 預(yù)測等多個方面?!?/p> 數(shù)據(jù)構(gòu)建DeepSeek-V3 的預(yù)訓(xùn)練語料庫規(guī)模達到了 14.8 萬億 Token,這些數(shù)據(jù)經(jīng)過了嚴格的篩選和清洗,以確保其高質(zhì)量和多樣性。相比于前代模型 DeepSeek-V2,新模型的數(shù)據(jù)構(gòu)建策略更加精細。首先,大幅提升了數(shù)學(xué)和編程相關(guān)數(shù)據(jù)在整體數(shù)據(jù)中的占比,這直接增強了模型在相關(guān)領(lǐng)域的推理能力,使其在 MATH 500、AIME 2024 等數(shù)學(xué)基準測試和 HumanEval、LiveCodeBench 等代碼基準測試中表現(xiàn)突出。其次,進一步擴展了多語言數(shù)據(jù)的覆蓋范圍,超越了傳統(tǒng)的英語和中文,提升了模型的多語言處理能力?!?/p> 為了保證數(shù)據(jù)質(zhì)量,DeepSeek 開發(fā)了一套完善的數(shù)據(jù)處理流程,著重于最小化數(shù)據(jù)冗余,同時保留數(shù)據(jù)的多樣性。此外,他們還借鑒了近期研究 (https:///abs/2404.10830,Ding et al., 2024) 中提出的文檔級打包 (Document Packing) 方法,將多個文檔拼接成一個訓(xùn)練樣本,避免了傳統(tǒng)方法中由于截斷導(dǎo)致的上下文信息丟失,確保模型能夠?qū)W習(xí)到更完整的語義信息?!?/p> 針對代碼數(shù)據(jù),DeepSeek-V3 借鑒了 DeepSeekCoder-V2 中采用的 Fill-in-Middle (FIM) 策略,以 0.1 的比例將代碼數(shù)據(jù)構(gòu)造成 <|fim_begin|> pre<|fim_hole|> suf<|fim_end|> middle<|eos_token|> 的形式。這種策略通過“填空”的方式,迫使模型學(xué)習(xí)代碼的上下文關(guān)系,從而提升代碼生成和補全的準確性?!?/p> 分詞器與詞表:兼顧效率與準確性DeepSeek-V3 采用了基于字節(jié)級 BPE (Byte-level BPE) 的分詞器,并構(gòu)建了一個包含 128K 個 token 的詞表。為了優(yōu)化多語言的壓縮效率,DeepSeek 對預(yù)分詞器 (Pretokenizer) 和訓(xùn)練數(shù)據(jù)進行了專門的調(diào)整?!?/p> 與 DeepSeek-V2 相比,新的預(yù)分詞器引入了將標點符號和換行符組合成新 token 的機制。這種方法可以提高壓縮率,但也可能在處理不帶換行符的多行輸入 (例如 few-shot 學(xué)習(xí)的 prompt) 時引入 token 邊界偏差 (Token Boundary Bias) (Lundberg, 2023)。為了減輕這種偏差,DeepSeek-V3 在訓(xùn)練過程中以一定概率隨機地將這些組合 token 拆分開來,從而讓模型能夠適應(yīng)更多樣化的輸入形式,提升了模型的魯棒性?!。ㄏ聢D來自 Token Boundary Bias 的原文) ![]() 模型配置與超參數(shù)DeepSeek-V3 的模型配置和訓(xùn)練超參數(shù)都經(jīng)過了精心的設(shè)計和調(diào)優(yōu),以最大化模型的性能和訓(xùn)練效率。
DeepSeek-V3 的 Transformer 層數(shù)設(shè)置為 61 層,隱藏層維度為 7168。所有可學(xué)習(xí)參數(shù)均采用標準差為 0.006 的隨機初始化。在 MLA 結(jié)構(gòu)中,注意力頭的數(shù)量 (nh) 設(shè)置為 128,每個注意力頭的維度 (dh) 為 128,KV 壓縮維度 (dc) 為 512,Query 壓縮維度 (d') 為 1536,解耦的 Key 頭的維度 (dr) 為 64。除了前三層之外,其余的 FFN 層均替換為 MoE 層。每個 MoE 層包含 1 個共享專家和 256 個路由專家,每個專家的中間隱藏層維度為 2048。每個 Token 會被路由到 8 個專家,并且最多會被路由到 4 個節(jié)點。多 Token 預(yù)測的深度 (D) 設(shè)置為 1,即除了預(yù)測當前 Token 之外,還會額外預(yù)測下一個 Token。此外,DeepSeek-V3 還在壓縮的潛變量之后添加了額外的 RMSNorm 層,并在寬度瓶頸處乘以了額外的縮放因子。
DeepSeek-V3 采用了 AdamW 優(yōu)化器,β1 設(shè)置為 0.9,β2 設(shè)置為 0.95,權(quán)重衰減系數(shù) (weight_decay) 設(shè)置為 0.1。最大序列長度設(shè)置為 4K。學(xué)習(xí)率方面,采用了組合式的調(diào)度策略:在前 2K 步,學(xué)習(xí)率從 0 線性增加到 2.2 × 10^-4;然后保持 2.2 × 10^-4 的學(xué)習(xí)率直到模型處理完 10T 個 Token;接下來,在 4.3T 個 Token 的過程中,學(xué)習(xí)率按照余弦曲線 (Cosine Decay) 逐漸衰減至 2.2 × 10^-5;在最后的 500B 個 Token 中,學(xué)習(xí)率先保持 2.2 × 10^-5 不變 (333B 個 Token),然后切換到一個更小的常數(shù)學(xué)習(xí)率 7.3 × 10^-6 (167B 個 Token)。梯度裁剪的范數(shù)設(shè)置為 1.0。Batch Size 方面,采用了動態(tài)調(diào)整的策略,在前 469B 個 Token 的訓(xùn)練過程中,Batch Size 從 3072 逐漸增加到 15360,并在之后的訓(xùn)練中保持 15360 不變。 為了實現(xiàn) MoE 架構(gòu)中的負載均衡,DeepSeek-V3 采用了無額外損耗的負載均衡策略,并將偏置項的更新速度 (γ) 在預(yù)訓(xùn)練的前 14.3T 個 Token 中設(shè)置為 0.001,在剩余的 500B 個 Token 中設(shè)置為 0.0。序列級平衡損失因子 (α) 設(shè)置為 0.0001,以避免單個序列內(nèi)的極端不平衡。多 Token 預(yù)測 (MTP) 損失的權(quán)重 (λ) 在前 10T 個 Token 中設(shè)置為 0.3,在剩余的 4.8T 個 Token 中設(shè)置為 0.1?!?/p> 長上下文擴展與多 Token 預(yù)測:錦上添花為了使 DeepSeek-V3 具備處理長文本的能力,DeepSeek 采用了兩階段的訓(xùn)練策略,將模型的上下文窗口從 4K 逐步擴展到 128K。他們采用了 YaRN (Peng et al., 2023a) 技術(shù),并將其應(yīng)用于解耦的共享 Key (k)。在長上下文擴展階段,DeepSeek-V3 的超參數(shù)保持不變:scale 設(shè)置為 40,β 設(shè)置為 1,ρ 設(shè)置為 32,縮放因子設(shè)置為 0.1 ln n + 1?!?/p>
![]() 上圖(報告第 23 頁) 的 'Needle In A Haystack' (NIAH) 測試結(jié)果清晰地展示了 DeepSeek-V3 在處理長文本方面的卓越能力。 此外,DeepSeek-V3 還采用了多 Token 預(yù)測 (MTP) 策略 (2.2 節(jié),第 10 頁),要求模型在每個位置預(yù)測未來的多個 Token,而不僅僅是下一個 Token。圖 3 (第 10 頁) 詳細展示了 MTP 的實現(xiàn)方式。 ![]() 這種策略增強了模型的預(yù)見能力,并提供了更豐富的訓(xùn)練信號,從而提升了訓(xùn)練效率。表 4 (第 26 頁) 的消融實驗結(jié)果證明了 MTP 策略的有效性。 ![]() 后訓(xùn)練DeepSeek-V3 的后訓(xùn)練 (Post-Training) 階段,包括有監(jiān)督微調(diào) (Supervised Fine-Tuning, SFT) 和強化學(xué)習(xí) (Reinforcement Learning, RL) 兩個步驟。 有監(jiān)督微調(diào) (SFT)SFT 階段,DeepSeek-V3 在一個包含 1.5M 指令-響應(yīng)對的高質(zhì)量數(shù)據(jù)集上進行了微調(diào)。該數(shù)據(jù)集涵蓋了多種任務(wù)類型和領(lǐng)域,并采用了不同的數(shù)據(jù)構(gòu)建策略,以最大程度地激發(fā)模型的潛能。 數(shù)據(jù)構(gòu)建策略
![]()
訓(xùn)練細節(jié)
強化學(xué)習(xí) (RL)為了使 DeepSeek-V3 更好地對齊人類偏好,DeepSeek 采用了強化學(xué)習(xí) (RL) 技術(shù),并構(gòu)建了基于規(guī)則的獎勵模型 (Rule-Based RM) 和基于模型的獎勵模型 (Model-Based RM) 相結(jié)合的獎勵機制。
![]() 作為獎勵模型,在 RewardBench 上的表現(xiàn)上,DeepSeek 多個方面超越或持平 GPT-4o 和 Claude-3.5-sonnet?!?/p> RL 過程中,DeepSeek-V3 采用了 Group Relative Policy Optimization (GRPO) 算法 (原報告第 30 頁) 。與傳統(tǒng)的 PPO 算法不同,GRPO 不需要一個單獨的 Critic 模型來估計 Value 函數(shù),而是通過比較一組樣本的獎勵來估計 Advantage。具體流程如下:
數(shù)據(jù)配比在后訓(xùn)練過程中,DeepSeek-V3 整合了多種類型的數(shù)據(jù),數(shù)據(jù)來源和配比如下:
以及... |
|
來自: 長沙7喜 > 《智能技術(shù)》