全球首個(gè),最接近原版DeepSeek開源復(fù)現(xiàn)來(lái)了!R1四個(gè)月狂飆26倍
DeepSeek的含金量還在上升。
就在最近,Hugging Face聯(lián)創(chuàng)、首席科學(xué)家Thomas Wolf表示——
DeepSeek的出現(xiàn),是開源AI領(lǐng)域的ChatGPT時(shí)刻!
用他的話說(shuō),「正如ChatGPT讓全世界認(rèn)識(shí)到AI的存在,DeepSeek則讓全世界意識(shí)到,原來(lái)還有著這樣一個(gè)充滿活力的開源社區(qū)?!?/span>
DeepSeek-R1的性能已經(jīng)媲美甚至超越美國(guó)最頂尖的閉源AI模型,對(duì)于全球AI圈來(lái)說(shuō),這件事的意義都極其深遠(yuǎn)。
與此同時(shí),來(lái)自SGLang、英偉達(dá)等機(jī)構(gòu)的數(shù)十人聯(lián)合團(tuán)隊(duì),也在DeepSeek上整了個(gè)大活。
在短短4個(gè)月內(nèi),他們利用最新的SGLang推理優(yōu)化,直接讓DeepSeek-R1在H100上的性能提升了26倍!
這是怎么做到的?
團(tuán)隊(duì)發(fā)布了長(zhǎng)篇博文,詳細(xì)展示了這一過(guò)程。
文章地址:https://lmsys.org/blog/2025-05-05-large-scale-ep/
在96塊H100 GPU上優(yōu)化部署DeepSeek
要知道,DeepSeek模型因?yàn)辇嫶蟮膮?shù),以及多頭潛注意力(MLA)和專家混合機(jī)制(MoE)等獨(dú)特架構(gòu),如果想要大規(guī)模部署,就必須使用更先進(jìn)的系統(tǒng)。
為此,團(tuán)隊(duì)先是對(duì)SGLang進(jìn)行了全面升級(jí),完整支持了PD分離、大規(guī)模EP、DeepEP、DeepGEMM及EPLB等功能。
然后憑借這些新特性,成功地在12個(gè)節(jié)點(diǎn)共96塊GPU的集群上,復(fù)現(xiàn)了DeepSeek的推理系統(tǒng)。
最終,在處理2000個(gè)token的輸入序列時(shí),實(shí)現(xiàn)了每個(gè)節(jié)點(diǎn)每秒52.3k輸入token和22.3k輸出token的吞吐量。
方案運(yùn)行在Atlas Cloud的12個(gè)節(jié)點(diǎn)上,每個(gè)節(jié)點(diǎn)均配備8塊H100 GPU
團(tuán)隊(duì)表示,這應(yīng)該是首個(gè)吞吐量接近DeepSeek官方數(shù)據(jù)的開源實(shí)現(xiàn)。
在本地環(huán)境下部署此方案,成本可降至0.20美元/1M輸出token,約為DeepSeek Chat API官方定價(jià)的五分之一。
相較于使用相同資源的原始張量并行策略,此優(yōu)化方案可將輸出吞吐量提升高達(dá)5倍。
接下來(lái),團(tuán)隊(duì)深入探討了他們的并行設(shè)計(jì)、優(yōu)化方法以及最終成果。
并行設(shè)計(jì)
高效的并行化設(shè)計(jì),對(duì)于控制DeepSeek架構(gòu)的計(jì)算復(fù)雜度和內(nèi)存需求至關(guān)重要。
針對(duì)以下關(guān)鍵組件,團(tuán)隊(duì)都給出了優(yōu)化方案:注意力層、稠密前饋網(wǎng)絡(luò)(FFN)、稀疏FFN以及語(yǔ)言模型(LM)的頭部。
每個(gè)組件都采用了專門設(shè)計(jì)的并行化策略,以提升可擴(kuò)展性、內(nèi)存效率和整體性能。
注意力層
DeepSeek采用了多頭潛注意力機(jī)制(MLA),從而能夠有效地對(duì)輸入序列中的復(fù)雜依賴關(guān)系進(jìn)行建模。
為了優(yōu)化這一機(jī)制,團(tuán)隊(duì)實(shí)現(xiàn)了DP attention,這是一種數(shù)據(jù)并行策略,目的是消除跨設(shè)備的KV緩存冗余,從而顯著降低內(nèi)存開銷。
在SGLang v0.4版本中引入的該方法,現(xiàn)已擴(kuò)展至支持混合數(shù)據(jù)并行和張量并行,為高效處理小批量數(shù)據(jù)提供了更大的靈活性。
稠密FFN
即便DeepSeek-V3僅使用了三個(gè)稠密FFN層,其計(jì)算過(guò)程仍然可能顯著增加峰值內(nèi)存占用,若不加以謹(jǐn)慎管理,極易導(dǎo)致系統(tǒng)崩潰。
為了解決這個(gè)問(wèn)題,團(tuán)隊(duì)選擇采用數(shù)據(jù)并行(DP)策略,而非張量并行(TP),主要是考慮到DP的以下優(yōu)勢(shì)。
· 更強(qiáng)的可擴(kuò)展性
當(dāng)中間層維度為18,432時(shí),較高的TP度(例如TP32)會(huì)導(dǎo)致數(shù)據(jù)被低效地分割成小單元片段(例如576個(gè)單元),而這些單元無(wú)法被128整除。
128,就是現(xiàn)代GPU(如H100)常見的對(duì)齊邊界。
這種未對(duì)齊的情況,會(huì)嚴(yán)重阻礙計(jì)算效率和內(nèi)存利用率。
相比之下,DP能夠避免數(shù)據(jù)碎片化,從而提供更具可擴(kuò)展性的解決方案,確??缭O(shè)備的工作負(fù)載均衡分配。
· 優(yōu)化的內(nèi)存效率
傳統(tǒng)觀念認(rèn)為,TP可以隨著worker size的增加而降低內(nèi)存使用量,但這種優(yōu)勢(shì)在DP attention的應(yīng)用場(chǎng)景下會(huì)逐漸減弱。
在純TP設(shè)置中,單層Transformer模型的內(nèi)存需求與DP size的關(guān)系如下:
其中,是每個(gè)設(shè)備(DP rank)上隱藏狀態(tài)的大小,
是模型參數(shù)的數(shù)量,k是一個(gè)系數(shù),表示來(lái)自CUDA Graph復(fù)制的額外內(nèi)存開銷。
通過(guò)假設(shè)DP=TP,當(dāng)時(shí),此內(nèi)存的使用函數(shù)達(dá)到最小值。
DeepSeek-V3使用18,432的中間大小。在prefill階段,CUDA Graph通常被禁用,因此k=0。
但是,每個(gè)設(shè)備的token大小很容易超過(guò)2,048,導(dǎo)致最佳TP大小為3或更小。
在解碼階段,一個(gè)實(shí)際的配置可能使用每個(gè)設(shè)備128個(gè)token,并設(shè)置k=3。在這種情況下,內(nèi)存最佳的TP大小為6。
在這兩個(gè)階段,較低的TP度可以最大限度地減少每個(gè)設(shè)備的內(nèi)存使用量。
因此,與僅依賴TP相比,DP可以提供更節(jié)省內(nèi)存的擴(kuò)展方法。
· 最小化的通信開銷
在純TP模式下,每個(gè)FFN層都需要執(zhí)行兩次all-reduce操作,從而導(dǎo)致巨大的通信開銷。
通過(guò)采用DP策略,團(tuán)隊(duì)將該過(guò)程優(yōu)化為:在先前的attention層之后執(zhí)行一次reduce-scatter操作,并在下一個(gè)attention層之前執(zhí)行一次all-gather操作,從而將通信成本降低50%。
更進(jìn)一步,如果attention計(jì)算也采用純DP模式,那么設(shè)備間的通信將被完全消除,進(jìn)而顯著提升整體效率。
DP稠密FFN與DP attention的集成方案如下圖左側(cè)所示。用戶可以通過(guò)設(shè)置--moe-dense-tp-size=1來(lái)啟用。
稀疏FFN
在DeepSeek-V3的MoE架構(gòu)中,稀疏FFN需要處理大量的專家權(quán)重,進(jìn)而造成顯著的內(nèi)存瓶頸。
為了緩解這一問(wèn)題,團(tuán)隊(duì)采用了專家并行(EP)策略,將專家權(quán)重分散到多個(gè)設(shè)備上。
這種方法能夠有效地?cái)U(kuò)展內(nèi)存容量,不過(guò),它在維持高性能的同時(shí),也帶來(lái)了一些新的挑戰(zhàn),比如不規(guī)則的全互聯(lián)通信以及工作負(fù)載不均衡等。
團(tuán)隊(duì)利用DeepEP框架實(shí)現(xiàn)的EP方案
LM頭
LM頭(LM Head)負(fù)責(zé)計(jì)算大型詞匯表上的輸出概率,這是一項(xiàng)資源稠密型的操作,傳統(tǒng)方案是采用詞匯表并行技術(shù),從TP組中聚合token logits。
為了進(jìn)一步提升可擴(kuò)展性和效率,團(tuán)隊(duì)采用了數(shù)據(jù)并行(DP)策略,與處理稠密FFN的方法保持一致。
這種做法不僅可以降低內(nèi)存開銷,還能簡(jiǎn)化跨設(shè)備的通信過(guò)程,從而提供了更加精簡(jiǎn)的解決方案。
預(yù)填充和解碼分離
LLM的推理過(guò)程主要包含兩個(gè)不同的階段:預(yù)填充(prefill)和解碼(decode)。
預(yù)填充階段屬于計(jì)算密集型,需要處理完整的輸入序列;而解碼階段則屬于內(nèi)存密集型,主要負(fù)責(zé)管理用于生成token的KV緩存。
傳統(tǒng)方案通常在一個(gè)統(tǒng)一的引擎中處理這兩個(gè)階段,然而,這種預(yù)填充和解碼batch的混合調(diào)度方式會(huì)引入效率問(wèn)題。
為了解決這些挑戰(zhàn),團(tuán)隊(duì)在SGLang中引入了預(yù)填充和解碼(PD)分離技術(shù)。
如下圖所示,SGLang會(huì)通過(guò)預(yù)填充服務(wù)器和解碼服務(wù)器的協(xié)同工作,實(shí)現(xiàn)兩個(gè)階段的交錯(cuò)執(zhí)行。
接收到輸入請(qǐng)求后,系統(tǒng)的工作流程如下:
- 預(yù)填充服務(wù)器和解碼服務(wù)器通過(guò)握手配對(duì),各自作為本地發(fā)送者和接收者。
- 解碼服務(wù)器預(yù)先分配KV緩存,并通知預(yù)填充服務(wù)器啟動(dòng)模型前向傳遞,計(jì)算KV緩存。
- 完成計(jì)算后,數(shù)據(jù)將被傳輸至解碼服務(wù)器,由該服務(wù)器負(fù)責(zé)進(jìn)行迭代式的token生成。
這種分離機(jī)制確保了每個(gè)階段都能在最佳狀態(tài)下運(yùn)行,從而最大限度地利用GPU資源。
并且,為了進(jìn)一步提升性能,團(tuán)隊(duì)的實(shí)現(xiàn)方案還包含以下特性。
- 非阻塞傳輸:數(shù)據(jù)發(fā)送和接收操作在后臺(tái)線程中執(zhí)行,從而保證調(diào)度器的事件循環(huán)不會(huì)被中斷。
- 基于RDMA的傳輸:遠(yuǎn)程直接內(nèi)存訪問(wèn)(RDMA)技術(shù)利用隊(duì)列對(duì)(Queue Pairs)進(jìn)行連接管理,并利用分散-聚集元素(Scatter-Gather Elements, SGE)實(shí)現(xiàn)非連續(xù)內(nèi)存塊的高效傳輸。
- 靈活的API集成:SGLang提供了高度可定制的API,能夠與Mooncake和NIXL等高性能RDMA庫(kù)無(wú)縫集成,從而簡(jiǎn)化了數(shù)據(jù)傳輸流程。
大規(guī)模專家并行性
基于DeepEP的專家并行
由DeepSeek團(tuán)隊(duì)開發(fā)的DeepEP提供了一系列優(yōu)化過(guò)的通信內(nèi)核,可以有效降低延遲并提升吞吐量,高效地將token路由到多個(gè)GPU上。
DeepEP有兩種專門設(shè)計(jì)的調(diào)度模式,以滿足不同的工作負(fù)載需求。
- 標(biāo)準(zhǔn)調(diào)度模式(Normal Dispatch):主要針對(duì)處理較長(zhǎng)的輸入序列進(jìn)行優(yōu)化,例如預(yù)填充階段,其首要目標(biāo)是最大化計(jì)算吞吐量。 但會(huì)生成與CUDA Graph不兼容的符號(hào)形狀,從而降低其在解碼階段的效率,因?yàn)樵诮獯a階段,內(nèi)核啟動(dòng)開銷會(huì)成為一個(gè)顯著的瓶頸。
- 低延遲調(diào)度模式(Low-Latency Dispatch):專門為解碼階段生成輸出token而設(shè)計(jì),其核心目標(biāo)是最小化延遲,從而確保實(shí)時(shí)性能。盡管它支持CUDA Graph,但需要預(yù)先分配固定大小的內(nèi)存。如果實(shí)際內(nèi)存需求超過(guò)了預(yù)分配的容量,則會(huì)觸發(fā)運(yùn)行時(shí)錯(cuò)誤。
在SGLang中,DeepEP的集成提供了一種自動(dòng)模式,能夠根據(jù)當(dāng)前的工作負(fù)載,動(dòng)態(tài)地在上述兩種調(diào)度模式之間進(jìn)行選擇。
與此同時(shí),通過(guò)利用PD分離技術(shù),使得在DP attention機(jī)制下,預(yù)填充階段能夠采用標(biāo)準(zhǔn)調(diào)度模式(Normal Dispatch),而解碼階段則能夠采用低延遲調(diào)度模式(Low-Latency Dispatch)。
這種集成方式能夠根據(jù)每個(gè)階段的具體需求來(lái)調(diào)整調(diào)度模式,從而優(yōu)化資源利用率,并提升整體性能。
DeepGEMM集成
由DeepSeek團(tuán)隊(duì)開發(fā)的DeepGEMM,則被用于優(yōu)化MoE模型中的計(jì)算過(guò)程。
DeepGEMM提供了兩個(gè)經(jīng)過(guò)專門設(shè)計(jì)的函數(shù),用于處理與MoE相關(guān)的矩陣乘法運(yùn)算(分組GEMM),每個(gè)函數(shù)都針對(duì)推理過(guò)程的不同階段進(jìn)行了定制。
- 分組GEMM(連續(xù)布局): 這種內(nèi)核專門為動(dòng)態(tài)輸入形狀而設(shè)計(jì),使其成為MoE推理預(yù)填充階段的理想選擇。 它可以處理來(lái)自不同專家的輸入數(shù)據(jù),這些數(shù)據(jù)以連續(xù)的方式連接在一起,從而靈活地處理各種輸入尺寸的變化。
- 分組GEMM(掩碼布局): 這種內(nèi)核假定輸入形狀是固定的,并使用掩碼張量來(lái)僅計(jì)算輸入的有效部分。 由于它與CUDA Graph兼容(可優(yōu)化內(nèi)核啟動(dòng)過(guò)程),因此特別適合于需要顯著降低開銷的解碼階段。
DeepGEMM與DeepEP的調(diào)度模式可以實(shí)現(xiàn)無(wú)縫集成:
- 對(duì)于與預(yù)填充階段的標(biāo)準(zhǔn)調(diào)度模式配合使用的連續(xù)布局內(nèi)核,需要執(zhí)行一個(gè)額外的步驟。團(tuán)隊(duì)參考了LightLLM項(xiàng)目,并實(shí)現(xiàn)了一個(gè)自定義的Triton內(nèi)核來(lái)實(shí)現(xiàn)高效的置換。確保了從標(biāo)準(zhǔn)調(diào)度模式輸出的數(shù)據(jù)能夠被正確地重新排列,從而實(shí)現(xiàn)與連續(xù)GEMM內(nèi)核的平滑集成。
- 掩碼布局內(nèi)核與DeepEP的低延遲調(diào)度模式能夠?qū)崿F(xiàn)無(wú)縫對(duì)接,因?yàn)閮烧叨坚槍?duì)解碼階段進(jìn)行了專門優(yōu)化,并且都支持CUDA Graph。
SGLang集成了DeepGEMM,用于在張量并行模式下進(jìn)行MoE計(jì)算。通過(guò)在SGLang中設(shè)置環(huán)境變量SGL_ENABLE_JIT_DEEPGEMM為1,即可激活該內(nèi)核,從而為非MoE操作提供更高的計(jì)算效率。
雙batch重疊
在多節(jié)點(diǎn)環(huán)境下,有限的通信帶寬可能會(huì)顯著增加整體延遲。
為了應(yīng)對(duì)這一挑戰(zhàn),團(tuán)隊(duì)遵循DeepSeek的系統(tǒng)設(shè)計(jì)理念,實(shí)現(xiàn)了雙batch重疊(TBO)技術(shù)。
TBO將單個(gè)batch拆分為兩個(gè)micro-batch,從而允許計(jì)算和通信過(guò)程相互重疊,同時(shí),通過(guò)將有效batch大小減半,也降低了峰值內(nèi)存的使用量。
為了創(chuàng)建更易于維護(hù)和重用的代碼庫(kù),團(tuán)隊(duì)采用了一個(gè)由操作和yield點(diǎn)構(gòu)成的抽象層。
這種方法可以讓用戶像處理單個(gè)micro-batch一樣編寫代碼,同時(shí)通過(guò)策略性地插入yield點(diǎn)來(lái)暫停執(zhí)行,從而允許其他micro-batch繼續(xù)進(jìn)行。
如此一來(lái),不僅消除了代碼重復(fù),減少了對(duì)變量后綴的需求,并且還能有效地管理某些執(zhí)行在層末尾完成而其他執(zhí)行尚未完成的情況。
此外,抽象層還能輕松地適應(yīng)不同的重疊區(qū)域選擇,或者未來(lái)的增強(qiáng)功能,例如三batch重疊,而只需要進(jìn)行極少的代碼修改。
operations = [ self._forward_attn, YieldOperation(), # Pause execution for other micro-batches self._forward_dispatch, self._forward_mlp, YieldOperation(), # Another pause point self._forward_combine,]# Process a single micro-batch without duplicating codedef _forward_attn(self, state): state.hidden_states = self.self_attn(state.hidden_states, ...)
operations = [
self._forward_attn,
YieldOperation(),
# Pause execution for other micro-batches
self._forward_dispatch,
self._forward_mlp,
YieldOperation(),
# Another pause point
self._forward_combine,
]
# Process a single micro-batch without duplicating code
def _forward_attn(self, state):
state.hidden_states = self.self_attn(state.hidden_states, ...)
團(tuán)隊(duì)優(yōu)化了預(yù)填充階段的啟動(dòng)順序,以避免通過(guò)DeepEP中的調(diào)度操作阻塞CPU,即使用的是其異步模式。
具體來(lái)說(shuō):
- 在GPU從其他rank接收到元數(shù)據(jù),從而能夠正確分配大小合適的張量之前,調(diào)度操作會(huì)阻塞CPU。
- 不正確的實(shí)施方式會(huì)導(dǎo)致在此期間計(jì)算流處于空閑狀態(tài),因?yàn)闆](méi)有計(jì)算任務(wù)被提交給GPU。
為了實(shí)現(xiàn)優(yōu)化,團(tuán)隊(duì)優(yōu)先將計(jì)算任務(wù)提交給GPU,然后再啟動(dòng)可能導(dǎo)致CPU阻塞的通信操作。這樣可以確保GPU在通信期間保持活躍狀態(tài)。
如下圖所示,通過(guò)采用正確的啟動(dòng)順序,TBO可以避免由CPU阻塞操作引起的性能瓶頸。
專家并行負(fù)載均衡器
為了解決由專家并行(EP)引起的各個(gè)GPU工作負(fù)載分布不均勻的問(wèn)題,DeepSeek開發(fā)了專家并行負(fù)載均衡器(Expert Parallelism Load Balancer, EPLB)。
EPLB以專家分布的統(tǒng)計(jì)信息作為輸入,計(jì)算出專家的最佳排列方式,從而最大限度地減少不平衡現(xiàn)象。
用戶可以分配冗余專家(例如,增加32個(gè)專家),這些冗余專家與原有的256個(gè)專家組合在一起,形成一個(gè)包含288個(gè)專家的資源池。
借助這個(gè)資源池,EPLB能夠策略性地放置或復(fù)制專家——例如,多次復(fù)制最常用的專家,或者將使用頻率適中的專家與在單個(gè)GPU上很少使用的專家組合在一起。
除了平衡工作負(fù)載之外,EPLB還在并行設(shè)計(jì)方面提供了更大的靈活性。如果使用最初的256個(gè)專家,并行規(guī)模只能被限制為2的冪次方。而EPLB通過(guò)使用288個(gè)專家,能夠?qū)崿F(xiàn)更多樣化的配置,例如將并行規(guī)模設(shè)置為12或72。
在下圖中,團(tuán)隊(duì)展示了系統(tǒng)規(guī)模和EPLB算法對(duì)不平衡問(wèn)題的影響。
他們將GPU的平衡度,定義為GPU中MoE層的平均計(jì)算時(shí)間與最大計(jì)算時(shí)間之比,并使用GPU處理的token數(shù)量來(lái)估計(jì)其計(jì)算時(shí)間。
從圖中可以看出,當(dāng)系統(tǒng)隨著節(jié)點(diǎn)數(shù)量的增加而擴(kuò)展時(shí),GPU的利用率會(huì)降低,而啟用EPLB則可以顯著提高了GPU的利用率。
EPLB在實(shí)際服務(wù)中的應(yīng)用
為了使EPLB能夠有效發(fā)揮作用,輸入數(shù)據(jù)的分布必須與實(shí)際服務(wù)的工作負(fù)載高度吻合。通過(guò)以下兩種策略,可以增強(qiáng)這種吻合度:
- 增加batch大小:更大的batch可以減少專家使用過(guò)程中的隨機(jī)波動(dòng),從而提高負(fù)載均衡的效果。這一目標(biāo)可以通過(guò)擴(kuò)展集群規(guī)?;蛘卟捎枚鄑oken預(yù)測(cè)(MTP)等技術(shù)來(lái)實(shí)現(xiàn)。
- 定期進(jìn)行重新平衡:定期更新專家的排列方式可以利用時(shí)間局部性原理,但這需要高效地重新加載專家模型。因此,需要盡可能降低專家模型重新加載操作的成本。
即使采用了EPLB,一定程度的不平衡現(xiàn)象仍然難以避免,未來(lái)仍需進(jìn)一步優(yōu)化。
重新平衡的具體實(shí)施方案
SGLang通過(guò)三個(gè)階段的重新平衡操作,來(lái)確保既高效又不會(huì)造成中斷,進(jìn)而在權(quán)重更新期間維持系統(tǒng)的性能。
- 系統(tǒng)加載階段:可以選擇從磁盤預(yù)加載權(quán)重?cái)?shù)據(jù)到主內(nèi)存中,以加快重新平衡的速度;也可以選擇將權(quán)重?cái)?shù)據(jù)保存在磁盤上,并使用內(nèi)存映射(memory mapping, mmap)技術(shù),從而減少內(nèi)存的占用量。
- 重新平衡準(zhǔn)備階段:所需的權(quán)重?cái)?shù)據(jù)會(huì)在后臺(tái)異步傳輸?shù)皆O(shè)備內(nèi)存中,利用空閑的DMA硬件引擎,從而避免中斷正在進(jìn)行的GPU操作。
- 重新平衡執(zhí)行階段:通過(guò)設(shè)備到設(shè)備的數(shù)據(jù)復(fù)制來(lái)更新權(quán)重?cái)?shù)據(jù)。還可以通過(guò)物理內(nèi)存重綁定等技術(shù)來(lái)進(jìn)一步優(yōu)化這一步驟。
評(píng)估
為了突出使用的先進(jìn)優(yōu)化技術(shù)帶來(lái)的吞吐量提升,團(tuán)隊(duì)使用DeepSeek-V3模型,在一個(gè)包含12個(gè)節(jié)點(diǎn)的集群上,對(duì) SGLang 的不同配置進(jìn)行了端到端性能評(píng)估。
他們比較了以下四種不同的配置:
- SGLang(采用TP16x6)
- SGLang(采用PD分離)
- SGLang(采用PD分離和模擬MTP)
- DeepSeek的結(jié)果
為了適應(yīng)不同的工作負(fù)載需求,團(tuán)隊(duì)分別獨(dú)立地評(píng)估了預(yù)填充階段和解碼階段的性能。
評(píng)估結(jié)果總結(jié)如下:
· 預(yù)填充階段:在4個(gè)節(jié)點(diǎn)的配置下,對(duì)于prompt長(zhǎng)度分別為1K、2K和4K的情況,系統(tǒng)所實(shí)現(xiàn)的單節(jié)點(diǎn)吞吐量分別為每秒57,674、54,543和50,302個(gè)token。
如下圖所示,與TP16基線相比,這種配置實(shí)現(xiàn)了高達(dá)3.3倍的性能提升。
在假設(shè)工作負(fù)載完全平衡的前提下,此系統(tǒng)的吞吐量與DeepSeek官方數(shù)據(jù)之間的差距在5.6%以內(nèi)。
· 解碼階段:在9個(gè)節(jié)點(diǎn)的配置下進(jìn)行評(píng)估,對(duì)于2K的輸入,系統(tǒng)實(shí)現(xiàn)的單節(jié)點(diǎn)吞吐量為22,282個(gè)token/秒,這意味著與TP16基線相比,性能提升了5.2倍。
在模擬MTP條件下,對(duì)于4K的輸入,系統(tǒng)仍然能夠保持每節(jié)點(diǎn)17,373個(gè)token/秒的高吞吐量,僅比DeepSeek官方性能分析數(shù)據(jù)低6.6%。
接著,團(tuán)隊(duì)將SGLang的性能與DeepSeek的推理系統(tǒng)進(jìn)行對(duì)比,力求使實(shí)驗(yàn)設(shè)置盡可能貼近DeepSeek的生產(chǎn)環(huán)境。
對(duì)于預(yù)填充階段,團(tuán)隊(duì)測(cè)試了一個(gè)場(chǎng)景,在該場(chǎng)景中,每個(gè)設(shè)備處理16,384個(gè)token,輸入長(zhǎng)度為4,096。
考慮到DeepSeek的專家分布存在不確定性,他們?cè)u(píng)估了兩種情況:一種是采用默認(rèn)的專家分布,另一種是模擬理想狀態(tài)下的EPLB,并將后者的結(jié)果作為性能上限。
評(píng)估結(jié)果如下所示:
DeepSeek的性能分析數(shù)據(jù)顯示,其所報(bào)告的吞吐量大約是其生產(chǎn)環(huán)境的兩倍。
在默認(rèn)的專家不平衡情況下,SGLang的性能比DeepSeek的性能分析數(shù)據(jù)慢20%;而在模擬的理想EPLB情況下,這個(gè)差距縮小到了6%。
對(duì)于解碼階段,結(jié)果如下所示:
在使用DeepSeek一半數(shù)量的節(jié)點(diǎn)的情況下,搭載模擬MTP的SGLang僅比DeepSeek的性能分析數(shù)據(jù)略慢。
在更高的batch大小設(shè)置下(256個(gè)序列,2,000個(gè)輸入長(zhǎng)度),SGLang實(shí)現(xiàn)了每節(jié)點(diǎn)每秒22,282個(gè)token的處理速度,充分展現(xiàn)了其強(qiáng)大的可擴(kuò)展性。
下圖詳細(xì)分析了預(yù)填充階段各個(gè)內(nèi)核的執(zhí)行時(shí)間。
如下圖所示,SGLang的解碼內(nèi)核分析結(jié)果與DeepSeek的結(jié)果非常接近:
可以看出,SGLang的解碼性能在很大程度上與DeepSeek的性能相一致。
因此,下一步的工作重點(diǎn),就是預(yù)填充階段的優(yōu)化了。
局限性與未來(lái)工作
總的來(lái)說(shuō),項(xiàng)目在吞吐量上有著顯著的提升,但仍然存在一些局限性以及需要增強(qiáng)的領(lǐng)域:
- 延遲優(yōu)化:目前因?yàn)閷W⒂谔嵘掏铝?,?dǎo)致首token時(shí)間(TTFT)達(dá)到2-5秒,token間延遲(ITL)大約100毫秒。之后還需要進(jìn)一步優(yōu)化,來(lái)滿足實(shí)時(shí)使用場(chǎng)景的需求。
- 序列長(zhǎng)度約束:由于使用了96個(gè)GPU,因此序列長(zhǎng)度被限制在較短的范圍內(nèi)。 擴(kuò)展GPU資源將支持更長(zhǎng)的序列,這對(duì)于特定應(yīng)用至關(guān)重要。
- 多token預(yù)測(cè)(MTP)集成:SGLang支持MTP,但缺乏與DP注意力的完全集成,降低了混合并行配置的效率。
- 專家并行負(fù)載均衡(EPLB)分布:本次實(shí)驗(yàn)使用了專家并行負(fù)載均衡器(EPLB)的同分布數(shù)據(jù),這可能無(wú)法反映真實(shí)場(chǎng)景中的數(shù)據(jù)變動(dòng)。之后還需要研究出現(xiàn)分布偏移時(shí)的性能表現(xiàn)。
- 靈活的張量并行(TP)規(guī)模:對(duì)于DeepSeek-V3而言,稠密FFN的內(nèi)存最優(yōu)TP規(guī)模較小,但大于1。目前SGLang僅支持純TP或DP,導(dǎo)致內(nèi)存利用率不高。之后還需要支持更靈活的TP選項(xiàng)。
- Blackwell支持:目前的實(shí)現(xiàn)僅支持NVIDIA Hopper架構(gòu)。團(tuán)隊(duì)正在努力將兼容性擴(kuò)展到下一代Blackwell架構(gòu)。