DeepSeek開源優(yōu)化并行策略,提升訓(xùn)練和通信效率
今早10點(diǎn),DeepSeek開啟了第四天技術(shù)分享,開源了三個(gè)優(yōu)化并行策略。
分別是DualPipe,一種用于 V3/R1 訓(xùn)練中計(jì)算與通信重疊的雙向流水線并行算法;EPLB,針對(duì) V3/R1 的專家并行負(fù)載平衡器;用于分析 V3/R1中的計(jì)算-通信重疊。
開源地址:https://github.com/deepseek-ai/DualPipe
??https://github.com/deepseek-ai/eplb??
??https://github.com/deepseek-ai/profile-data??
DualPipe是一種創(chuàng)新的雙向流水線并行算法,曾首次在V3版本中使用過。與傳統(tǒng)的1F1B和ZB1P方法相比,DualPipe大幅減少了流水線氣泡,同時(shí)僅增加了1倍的激活內(nèi)存峰值。
DualPipe核心思想是在一個(gè)正向和反向傳播的塊對(duì)中重疊計(jì)算和通信。每個(gè)塊被細(xì)分為四個(gè)部分:注意力機(jī)制、全網(wǎng)通信的分發(fā)(dispatch)、多層感知機(jī)(MLP)以及全網(wǎng)通信的合并(combine)。對(duì)于反向傳播塊,注意力機(jī)制和MLP進(jìn)一步被拆分為輸入的反向傳播和權(quán)重的反向傳播兩部分。
還有一個(gè)流水線通信組件,通過重新排列這些組件,并手動(dòng)調(diào)整GPU流處理器(SM)在通信與計(jì)算之間的分配比例,DualPipe能夠在執(zhí)行過程中完全隱藏全網(wǎng)通信和流水線通信。
這種重疊策略不僅適用于計(jì)算密集型的場景,即使在通信負(fù)擔(dān)較輕的情況下,DualPipe依然展現(xiàn)出顯著的效率優(yōu)勢(shì)。
此外,DualPipe采用了雙向流水線調(diào)度策略,從流水線的兩端同時(shí)喂入微批次(micro-batch),并通過計(jì)算與通信的重疊,確保了在模型進(jìn)一步擴(kuò)展時(shí),只要保持恒定的計(jì)算與通信比例,就可以在跨節(jié)點(diǎn)的情況下使用細(xì)粒度的專家,同時(shí)實(shí)現(xiàn)近乎零的全網(wǎng)通信開銷。
為了進(jìn)一步優(yōu)化DualPipe的性能,研究者們還開發(fā)了高效的跨節(jié)點(diǎn)全網(wǎng)通信內(nèi)核,以充分利用InfiniBand(IB)和NVLink的帶寬。通過限制每個(gè)token最多只能發(fā)送到4個(gè)節(jié)點(diǎn),減少了IB的流量,并確保token在到達(dá)目標(biāo)節(jié)點(diǎn)后能夠通過NVLink快速轉(zhuǎn)發(fā)到特定的GPU上,從而實(shí)現(xiàn)了IB和NVLink通信的完全重疊。
在內(nèi)存優(yōu)化方面,DualPipe通過重新計(jì)算RMSNorm和MLA上投影操作來減少內(nèi)存占用,避免了持續(xù)存儲(chǔ)這些操作的輸出激活值。同時(shí),將模型參數(shù)的指數(shù)移動(dòng)平均(EMA)存儲(chǔ)在CPU內(nèi)存中,并在每次訓(xùn)練步驟后異步更新,從而在不增加額外內(nèi)存或時(shí)間開銷的情況下保持EMA參數(shù)。
在傳統(tǒng)的MoE模型中,專家負(fù)載的不平衡會(huì)導(dǎo)致計(jì)算資源的浪費(fèi),尤其是在專家并行(EP)的場景下,這種不平衡會(huì)進(jìn)一步加劇通信開銷。而EPLB通過動(dòng)態(tài)調(diào)整每個(gè)專家的負(fù)載,確保在訓(xùn)練過程中專家之間的負(fù)載保持平衡。
EPLB為每個(gè)專家引入了一個(gè)偏置項(xiàng)(bias term),這個(gè)偏置項(xiàng)被添加到專家的親和力分?jǐn)?shù)(affinity score)中,用于決定每個(gè)token的路由(routing)。在訓(xùn)練過程中,EPLB模塊會(huì)監(jiān)控整個(gè)批次的專家負(fù)載,并根據(jù)負(fù)載情況動(dòng)態(tài)調(diào)整偏置項(xiàng)。如果某個(gè)專家的負(fù)載過高,偏置項(xiàng)會(huì)減少,反之則增加。這種動(dòng)態(tài)調(diào)整機(jī)制使得模型能夠在訓(xùn)練過程中保持專家負(fù)載的平衡,同時(shí)避免了因強(qiáng)制負(fù)載均衡而導(dǎo)致的性能下降。
此外,EPLB模塊還引入了一個(gè)互補(bǔ)的序列級(jí)負(fù)載均衡損失,以防止在單個(gè)序列中出現(xiàn)極端的負(fù)載不平衡。這個(gè)損失函數(shù)的權(quán)重被設(shè)置為一個(gè)非常小的值,以確保它不會(huì)對(duì)模型的整體性能產(chǎn)生顯著影響。
通過這種無輔助損失的負(fù)載均衡策略,可幫助模型在訓(xùn)練過程中能夠有效地利用計(jì)算資源,同時(shí)保持模型性能的穩(wěn)定。
本文轉(zhuǎn)自 AIGC開放社區(qū) ,作者:AIGC開放社區(qū)
原文鏈接:??https://mp.weixin.qq.com/s/wgGljTRULzhIGHu0735oFQ??
