本文從模型架構、並行策略、通訊最佳化和視訊記憶體最佳化四個方面展開,深入分析了DeepSeek-V3高效訓練的關鍵技術,探討其如何以僅5%的算力實現對標GPT-4o的效能。
今年春節 DeepSeek-V3&R1 對國內外 AI 圈產生了巨大的影響,其本質在於開拓了一條不同於 OpenAI 訓練方法的道路,證明了透過模型架構和訓練方法的極致最佳化,能夠基於更少的算力資源訓練出同等能力水平的大模型,這不僅讓人們對 OpenAI 等廠商的高算力投入產生質疑,更透過將先進模型開源的策略對 OpenAI 等閉源模型的商業模式形成了巨大沖擊。
本文試圖探究 DeepSeek 為什麼能夠利用5%的算力訓練出對標 GPT-4o 的先進模型,由於 DeepSeek-R1 源於 DeepSeek-V3 架構,且 DeepSeek-V3 論文中講述了更多高效訓練方法相關的內容,所以本文將以 DeepSeek-V3 為研究物件,分析其在高效訓練方面都採用了哪些關鍵技術,未來再單獨針對 DeepSeek-R1 進行分析總結。
1.1 高效的模型架構設計:多頭潛在注意力 MLA 和 DeepSeekMoE 架構
1. 多頭潛在注意力 MLA:MLA(Multi – head Latent Attention)架構與標準的MHA(Multi – head Attention)架構相比,核心是對注意力鍵和值進行低秩聯合壓縮,減少了推理時的 Key – Value(KV)快取,減少了推理記憶體佔用,提升了推理效率,該架構對訓練過程無直接幫助,不是本文分析的重點。
2. DeepSeekMoE 架構:核心是採用了更細粒度的專家分配策略,每個MoE層有1個共享專家和256個路由專家(共有58個MoE層14906個專家),每個輸入Token可以啟用8個路由專家,該架構可以有效利用計算資源,實現高效訓練,其與標準MoE架構存在以下不同點:
a)專家構成:標準MoE架構的型別和分工較為寬泛,一般不會特別強調共享專家的設定,各個專家相對獨立的處理不同輸入資料,在處理不同型別資料特徵時,專家間一般缺少專門設計的協作和共享機制;而 DeepSeekMoE 架構中的共享專家可對不同輸入資料中的共性特徵進行處理,在不同型別的輸入資料間實現共性特徵的知識共享,以便減少模型引數冗餘,而路由專家則負責處理具有特定模式或特徵的資料,提高模型對不同資料的適應性和處理能力。
b)專家分配:標準MoE架構的專家分配策略相對比較粗放,門控網路根據輸入資料進行專家選擇時,對於一些複雜資料特徵的區分不夠精準,不能很好地將資料分配到最能處理該特徵的專家;而 DeepSeekMoE 架構採用了更細粒度的專家分配策略,門控網路能夠更精準地分析輸入資料的特徵,將其分配到最合適的專家,提升模型對於複雜資料的處理能力。
c)專家啟用:標準MoE架構對於輸入資料啟用的專家數量沒有固定標準,在某些情況下輸入資料可能會啟用過多非必要的專家,導致計算資源的浪費;而 DeepSeekMoE 架構明確了每個輸入 Token 啟用8個路由專家,在保證模型處理效果的同時,避免了過度啟用專家帶來的計算資源浪費,提高了計算效率、降低了計算成本;在具體實現方式上,共享專家會對每個輸入 Token 進行處理,以便提取通用的基本特徵,而路由專家會根據輸入 Token 的特徵而決定是否被啟用參與計算。
1.2 創新的負載均衡策略:無輔助損失負載均衡和序列級負載均衡
1. 基本概念:在MoE大模型訓練過程中,輸入資料會根據一定的路由規則分配到不同的專家模型進行處理,這個過程中可能會出現負載不均衡的情況,即某些專家被頻繁呼叫,而另一些專家則很少被使用,這會導致訓練效率和模型效能下降;
業界通常採用的負載均衡策略為引入專門的輔助損失函式來強制平衡專家之間的負載,例如透過懲罰專家之間的負載差異來促使模型均勻地使用各個專家,額外引入的損失函式往往會導致模型複雜度增加、訓練不穩定、發生與原本訓練目標不一致等問題;
除了上述基於單 Token 的負載不均問題外,一個輸入序列中的 Token 在專家間的分配情況也容易出現負載不均,即同一序列中的多個 Token 可能會集中分配給某些專家。
2. 最佳化方法:DeepSeek-V3 採用無輔助損失負載均衡技術,透過直接在路由機制中融入負載均衡邏輯,避免了引入輔助損失函式,實現了僅透過對路由決策動態調整就實現專家負載均衡的效果;同時訓練過程輔以序列級負載均衡策略,確保了每個序列內的專家負載均衡。
a)無輔助損失負載均衡:DeepSeek-V3 為每個專家引入了一個可學習的偏置項,在訓練過程中它會隨著專家負載情況進行動態更新,當門控網路計算輸入 Token 與各專家的匹配得分時,該偏置項會動態調整每個專家的匹配得分,基於得分和對各專家利用率的即時監測(例如在一定時間視窗內專家處理的 Token 數量、計算資源佔用時長等),動態調整路由策略,將輸入 Token 即時分配給負載較低的專家,這種方法不僅負載均衡效果好,而且避免了引入輔助損失函式帶來的衍生問題。
b)序列級負載均衡:DeepSeek-V3 額外增加了一個序列級負載均衡損失函式,對序列中的每個 Token 進行精細化的分析和處理,根據 Token 在序列中的位置、上下文資訊等更合理地分配到各個專家(而不是僅僅基於單個 Token 的特徵進行獨立分配),透過這種負載均衡方案,兼顧了 Token 之間的關聯性和序列的整體結構。
1.3 多令牌預測(MTP) 訓練目標:提高訓練效率和推理速度
1. 基本概念:MTP 的全稱是 Multi – Token Prediction(多令牌預測),與之對應的是 DeepSeek-V3 釋出之前業界普遍使用的單令牌預測(Single – Token Prediction,STP),STP 一次僅預測一個Token,而 MTP 可同時預測多個 Token,這一方案在訓練階段可以提升資料訓練效率,在推理階段可以實現顯著加速。
2. 實現方案:如 DeepSeek 論文中所展示的 MTP 架構所示,MTP 由一個主模型(Main Model)以及多個 MTP 模組(MTP Module 1、MTP Module 2 等)構成,主模型負責基礎的下一個 Token 預測任務,MTP 模組則用於預測多個未來 Token,它們共同協作完成多Token 預測訓練。
a)輸入 Token 與輸出 Token:如圖左下方的t1、t2、t3、t4等,是模型的輸入序列;如圖上方的t2、t3、t4、t5是模型預測需要匹配的真實 Token 序列,不同部分對應不同的預測任務。
b)主模型(Main Model)與 MTP 模組:輸入 Token 先經過嵌入層轉換為向量表示,然後分別在 Main Model 和 MTP 內部進行計算,基於與目標 Token 計算得到的 Loss,指導模型更新訓練引數。
c)共享機制:嵌入層(Embedding Layer)和輸出頭(Output Head)在主模型和 MTP 模組之間共享,這種共享機制確保了模型在不同預測任務中的引數一致性,同時減少了引數數量,提高了訓練效率。
3. 核心價值:MTP 不僅在推理時能夠顯著加速生成速度(據稱生成速度可提升 1.8 倍),對於高效訓練同樣很有價值。
a)實現高效訓練:由於一次可預測多個 Token,在相同資料量的情況下,相比 STP 架構,模型可以學習到更多的資訊,從而提升了資料的利用效率,使得訓練更加高效。
b)提升訓練效果:模型可以基於對多個 Token 的預測,更合理地調整自身引數,學習到更豐富的語言模式和語義資訊,有助於模型在訓練中更好地收斂,提升訓練效果。
2.1 高效的並行策略設計:大量使用 EP、不再使用 TP
1. 並行策略總結:DeepSeek-V3 的訓練由 HAI-LLM 框架(DeepSeek 自研訓練框架)支援,採用了16路流水線並行(PP),跨越8個節點的64路專家並行(EP),以及 ZeRO-1 資料並行(DP),實現了充分利用計算資源,提高訓練效率,減少訓練時間和成本。其中 PP 和 DP 將在本節後邊兩個要點進行分析,此處重點分析其為何沒有使用 TP。
2. 使用 EP 而不是 TP:在 DeepSeek-V3 訓練中,優先使用 EP 而沒有使用 TP 的原因核心有以下幾個方面:
a)模型結構適配性:MoE 模型由多個專家網路和一個門控網路組成,EP 正好與這種結構相匹配,它可以將不同的專家分配到不同的計算單元上平行計算,讓模型同時處理多個不同的任務或資料特徵,提高模型的處理能力和訓練效率;TP 通常用於處理大型張量的計算,不能很好地對應 MoE 模型的結構特點。
b)通訊成本考慮:在 EP 中不同專家之間的通訊相對較少,主要的通訊開銷在於門控網路與專家網路之間的資訊互動,以及在進行模型引數更新等操作時的一些全域性通訊;TP 需要在多個裝置之間頻繁地進行張量的切分、合併等操作,通訊量會隨著模型規模和資料量的增加而顯著增加,降低訓練效率。
c)計算資源利用率:MoE 模型中的不同專家可能具有不同的計算複雜度和資料需求,EP 可以根據各個專家的特點靈活地分配計算資源,使不同效能的計算單元都能得到充分利用;TP 的資源分配方式相對單一,對於不同專家的多樣性計算需求支援不佳。
2.2 Dualpipe 流水線並行策略:雙流平行計算最佳化與雙向流水線排程最佳化
a)基本概念:如 DeepSeek 在論文中所述,在訓練過程中包含前向傳遞、反向傳遞兩個階段,具體包括計算流和通訊流兩個流。
-
前向傳遞:通常按順序執行ATTN(計算流)、DISPATCH(通訊流)、MLP(計算流)、COMBINE(通訊流)操作。
-
ATTN(計算流):指注意力機制計算,使大模型能夠捕捉文字等資料中的依賴關係,提升模型的效能和泛化能力。
-
DISPATCH(通訊流):指資料或任務在不同GPU節點之間的傳遞,提高整個訓練系統的並行度和效率。
-
MLP(計算流):即多層感知機計算,由輸入層、輸出層和一個或多個隱藏層構成,利用梯度下降法更新權重引數。
-
COMBINE(通訊流):指將不同GPU節點上將計算結果進行合併的通訊操作。
ii. 反向傳遞:需要執行COMBINE(通訊流)、MLP_B(計算流)、MLP_W(計算流)、DISPATCH(通訊流)、ATTN_B(計算流)、ATTN_W(計算流)操作:
-
COMBINE(通訊流):定義與前向傳遞相同,此處特指反向傳遞時的資料彙總,以便進行全域性引數更新。
-
MLP_B(計算流):此處的B指的是Bias,指的是反向傳播中對於偏執項的計算,以便更新大模型的偏執引數。
-
MLP_W(計算流):此處的W指的是Weight,指的是反向傳播中對於權重引數的計算,用於更新權重引數。
-
DISPATCH(通訊流):在反向計算中,DISPATCH 的作用仍然是負責資料或任務的分發。
-
ATTN_B(計算流):偏置項也會影響注意力權重的計算和最終的輸出,透過計算調整注意力機制中的偏置引數。
-
ATTN_W(計算流):計算損失函式對注意力權重的梯度,透過更新注意力權重捕捉資料中的依賴關係和重要資訊。
b)最佳化方法:此處的雙流並行,指的是計算流和通訊流,雙流並行即在大模型訓練的反向傳遞階段,將原本存在先後順序的更新當前層權重(即MLP_B)和將梯度繼續傳遞到前一層(即MLP_W)這兩個操作,拆分成兩個獨立且並行的流,同時透過細緻的設計,讓訓練的 barrier 剛好停在兩個流任務完成的時候,而不需要通訊流或者是計算流進行等待,提高計算效率。
a)基本概念:PP並行方法中,訓練過程經常容易出現氣泡(即GPU閒置),核心原因是在PP並行中不同的計算階段可能具有不同的計算複雜度和執行時間,導致計算快的階段需要等待計算慢的階段完成後才能繼續進行下一輪計算,同時不同階段之間需要進行資料通訊來傳遞中間結果,可能會受到網路頻寬等影響導致資料傳輸延遲,如下圖所示,其中有以下一些關鍵資訊。
i.顏色:藍色代表前向傳播,綠色代表反向傳播,灰色代表空閒狀態(即氣泡)。
ii.數字:表示不同的微批次(Micro – batch),圖中不同GPU上的數字序列,反映了各個微批次在不同GPU上的計算順序和時間分佈。
b)最佳化方法:傳統的單向流水線通常是按照固定順序,從流水線起始端依次進行微批次(micro – batch)處理;而DeepSeek-V3在訓練過程中採用了雙向流水線排程設計,即同時從兩端進行微批次(micro – batch)處理,減少流水線氣泡,另外DeepSeek將每個 micro – batch 進一步劃分為更小的塊(chunk),並對計算和通訊進行精細排程,實現兩者的高度重疊,提高 GPU 利用率。
iii.起始端:在PP並行中,通常將裝置編號較小的一端視為起始端,即圖中的 Device 0。
iv.末端:裝置編號較大的一端為末端,也就是圖中的 Device 7,在雙向流水線中,Device 7 等裝置也會在合適的時機啟動計算任務,且與起始端的計算任務相互配合,並非只是被動等待起始端計算完成後才開始工作。
2.3 ZeRO-1(DP) 資料並行策略:降低記憶體佔用,加速模型訓練
1.基本概念:ZeRO(Zero Redundancy Optimizer)即零冗餘最佳化器,是由微軟提出的一種旨在減少分散式訓練中記憶體使用的技術框架;ZeRO-1(DP)結合了零冗餘最佳化器的思想和資料並行策略。
2.工作原理:在傳統的資料並行中,每個裝置都儲存完整的最佳化器狀態(如梯度、引數等),這會導致記憶體冗餘;而 ZeRO-1 會將最佳化器狀態劃分到不同的裝置上,每個裝置只儲存一部分最佳化器狀態,在反向傳播計算完成後,各個裝置會交換自己所負責的引數的梯度資訊,然後根據這些梯度更新各自儲存的部分最佳化器狀態和模型引數;透過這種方式,雖然每個裝置只儲存了部分資訊,但最終所有裝置上的模型引數會保持一致。
a)降低記憶體佔用:ZeRO-1(DP) 資料並行策略顯著降低了單個 GPU 的記憶體佔用,讓模型能夠在有限的視訊記憶體中進行訓練。
b)加速模型訓練:首先由於記憶體佔用降低,模型可以處理更大的批次資料,提高了計算資源的利用率,從而加快訓練速度;另外ZeRO-1 透過在不同GPU之間共享一部分狀態變數,減少了 GPU 之間的通訊開銷,進一步提升了整體訓練效率。
3.1 Moe 路由的All2All最佳化設計:網路拓撲最佳化與資源分配最佳化
1. 基本概念:在MoE大模型訓練中,需要將訓練資料按照資料型別或特徵分配給最合適的專家模型進行處理,此時常用到兩種資料路由方案,一種是All to All通訊方案,另一種是基於 Magetron 實現的All Reduce和Reduce Scatter通訊方案,其優缺點大致如下:
a)All to All通訊:在資料傳輸時,根據實際傳輸的資料量來開闢相應大小的視訊記憶體空間;這種方案的優勢是視訊記憶體開銷小,劣勢是由於是點對點通訊、通訊效率相對較低。
b)All Reduce和Reduce Scatter通訊:這種方案首先是將所有資料路由至每一張GPU,然後透過掩碼篩選出每個專家模型真正需要的資料,再進行求和、求最大值等規約操作,並將資料重新合理分配至每一張GPU;這種方案的優勢是通訊效率較高,劣勢是視訊記憶體開銷比較大。
2. 實現方案:在 DeepSeek-V3 的實際訓練中,選擇了All to All的通訊方案,為了解決All to All在通訊效率方面存在的劣勢,採用了眾多通訊最佳化手段,比較核心的有以下幾個方面。
a)限制路由範圍:限制每個訓練 token 最多隻能被排程到 4 臺GPU伺服器,減少跨節點間的 IB 流量,規避了節點過多時訓練 Token 隨意路由導致的通訊擁塞問題。
b)網路拓撲最佳化:DeepSeek-V3 的訓練叢集應該採用了多軌組網方案(其並未正式公佈,從其他渠道瞭解資訊猜測得到),確保伺服器收發資料時,可以在不同節點的同號卡之間實現最少跳數的互聯,所以在資料路由策略上,DeepSeek-V3 會透過IB網路將資料從源端伺服器傳輸至目標伺服器相同卡號的GPU上,然後基於 NVLink 轉發至託管目標專家的特定GPU,實現高效機內和機間通訊,最大化利用高速網際網路絡頻寬。
c)資源分配最佳化:當期望訓練流與通訊流同時工作並達到重疊狀態時(如二.2所述),就容易出現GPU SM資源(SM即流多處理器,H800有132個SM)的爭搶,DeepSeek-V3 透過使用定製化的 PTX(即網路上宣稱繞過CUDA的語言),對GPU的132個SM進行了改造,專門劃分出20個SM用於處理伺服器間通訊任務,並根據訓練流和通訊流的具體特點和需求,對指令執行進行最佳化,例如分配指令優先順序、調整指令執行順序等,減少 SM 資源分配和 L2 快取搶佔現象的發生。
d)動態資源調整:DeepSeek-V3 採用了自動調整的資源分配策略,能夠根據訓練流和通訊流在不同時刻的資源需求動態地分配 SM 和 L2 快取資源,系統能夠透過為每個專家引入的偏置項,根據每個專家的歷史利用率情況,動態地調整其接收新任務的機率,即無輔助損失負載均衡策略。
4.1 FP8 低精度訓練:混合訓練框架和精細量化策略
1. 混合精度訓練框架:在 DeepSeek-V3 的訓練中,對於佔據大量計算量的 GEMM(通用矩陣乘法)操作,採用 FP8 精度執行,FP8 資料型別具有較低的記憶體佔用和更快的計算速度,所以可以顯著提升計算效率、降低視訊記憶體開銷;同時為了確保訓練的穩定性,對於少數對精度要求比較高的關鍵操作,如嵌入模組(將輸入 Token 轉換為向量表示)、注意力操作等,仍保持高精度(BF16/FP32)計算。
2. 精細量化策略:FP8 雖然在訓練速度和視訊記憶體佔用方面優勢明顯,但是由於需要採取措施對訓練資料、模型引數、中間啟用值進行量化操作,容易在訓練過程中出現因量化誤差導致的模型發散等問題,影響訓練穩定性和模型效能,DeepSeek-V3 在訓練過程中採用了分塊量化、塊級量化、高精度累加三種精細量化策略解決這個問題。
a)分塊量化:資料劃分粒度相對較細,將資料劃分為多個小塊,然後對每個小塊分別進行量化操作,這種方式能更精細地適應資料的區域性特徵,減少量化誤差。
b)塊級量化:資料劃分粒度相對較粗,對更大的塊進行統一量化處理,這種方式更關注資料的整體特徵和分佈情況,透過對較大塊的資料採用相同的量化引數進行量化,可以簡化量化計算過程,降低計算複雜度。
c)高精度累加:在一些關鍵計算步驟中,雖然中間計算過程使用了 FP8 精度以提高計算效率,但在進行累加等操作時,會將 FP8 資料轉換為更高精度的資料型別(BF16/FP32)進行累加,然後再根據需要轉換回 FP8 精度進行後續計算,這種機制可以有效控制量化誤差的積累。
4.2 選擇重計算:間隔重計算和選擇性重計算最佳化
1. 基本概念:在訓練過程中,需要佔用大量的視訊記憶體來儲存模型引數、中間結果等資料,當模型引數規模較大或者訓練資料量較多時,可能會出現視訊記憶體不夠用的情況;所以業界會採用重計算最佳化方法,即在前向傳播時不儲存上述的中間結果資料,而是在反向傳播需要的時候重新計算它們,大大減少中間結果所佔用的視訊記憶體空間。
2. 實現方案:比較粗暴的實現方案是完全重計算,這種方案因為計算量較大,會大幅增加訓練全過程時間,所以業界一直在探索更為高效的選擇重計算方案,DeepSeek-V3 在訓練過程中主要應用了間隔重計算和選擇性重計算兩種最佳化手段。
a)間隔重計算:即“隔一層重計算一次” ,在反向傳播中對一半層的輸入輸出進行重計算,另一半層按照傳統方式儲存中間結果資料。
b)選擇性重計算:大模型每一層的計算,通常由類似 RMSkernel 的計算強度較弱的部分(包含平方、求和、開方等計算操作,用於穩定訓練過程、加速模型收斂)和計算強度較強的 GEMM 矩陣乘法部分組成,他們雖然都會產生中間結果,但是計算成本差異較大;通常 RMSkernel 的計算時間佔比小、但單位計算的視訊記憶體佔用大,而GEMM的計算時間佔比大、但單位計算的視訊記憶體佔用小;所以選擇性重計算方法重點是針對 RMSkernel 相關的部分運算元進行重計算,獲得最大的價效比。
4.3 EMA視訊記憶體最佳化:非同步處理與視訊記憶體解除安裝最佳化
1. 基本概念:EMA是指數移動平均(Exponential Moving Average),它對於模型訓練過程中每一步更新得到的引數,計算指數加權平均值,得到一組新的引數,用於監測訓練方向,避免噪聲對於模型引數更新的影響,以得到更加穩定、泛化能力更強的引數;由於EMA需要額外維護一組引數,所以會佔用一定的視訊記憶體空間。
2.實現方案:DeepSeek-V3 在訓練過程中採用了非同步處理和視訊記憶體解除安裝方法,優化了EMA的視訊記憶體佔用。
a)非同步處理:由於EMA的計算過程並不需要訓練過程中即時產生的資料,所以可以獨立於前向傳播和反向傳播而開展,DeepSeek採用非同步處理方式,讓EMA計算過程與訓練過程並行開展。
b)視訊記憶體解除安裝:基於上述非同步處理的基礎,可以將EMA計算從GPU視訊記憶體解除安裝至CPU,即在每一輪訓練結束後,將模型引數傳遞給CPU,在 CPU 上計算 EMA 引數,然後將更新後的 EMA 引數儲存在 CPU 記憶體中,減少GPU的視訊記憶體佔用。
4.4 頭尾引數共享:embedding 層和 lm_head 層共享引數的最佳化策略
1.基本概念:embedding層位於模型首端,核心作用是把離散的 Token 轉換為連續的向量表示,實現這一轉換依靠的是一個可學習的權重矩陣,其大小為 vocab_size * hidden_size(詞表大小 * 每個 Token 對應的嵌入向量的維度);lm_head 層位於模型的末端,將模型輸出的嵌入向量重新映射回 Token 的機率分佈,以便計算損失函式,其實現方式同樣是依賴一個大小為 vocab_size * hidden_size 的權重矩陣。
2.實現方案:頭尾引數共享,指的是讓 embedding 層和 lm_head 層使用同一個權重矩陣,這種最佳化方案由於減少了引數儲存量,與之相關的梯度、最佳化器狀態和引數備份等佔用的視訊記憶體也會相應減少,且共用的權重矩陣有助於模型學習到更穩定和通用的 Token 表示,從而提高模型的效能和泛化能力。
透過上述對 DeepSeek-V3 高效訓練關鍵技術的分析,我們能夠看出,DeepSeek-V3 之所以能夠利用5%的算力訓練出對標 GPT-4o 的先進模型,與其創新性的模型架構設計、高效的並行策略選擇以及對叢集通訊和視訊記憶體的極致最佳化密不可分,高效訓練方法的表象是需要更少規模的算力,但其本質是對演算法創新和極致叢集效能的更高要求,所以 DeepSeek-V3 的先進經驗對於 AI Infra 絕不是利空,反而隨著精細化的高效訓練方法被業界普遍採用,基於先進晶片選型、先進架構搭建的 AI Infra 的重要性會越發凸顯,持續學習。
DeepSeek 是熱門的推理模型,能在少量標註資料下顯著提升推理能力,尤其擅長數學、程式碼和自然語言等複雜任務。本方案涵蓋雲上呼叫滿血版 DeepSeek 的 API 及部署各尺寸模型的方式,無需編碼,最快 5 分鐘、最低 0 元即可實現。
點選閱讀原文檢視詳情。