PD分離推理的加速大招,百度智慧雲網絡基礎設施和通訊元件的最佳化實踐

為了適應 PD 分離式推理部署架構,百度智慧雲從物理網路層面的「4us 端到端低時延」HPN 叢集建設,到網路流量層面的裝置配置和管理,再到通訊元件和運算元層面的最佳化,顯著提升了上層推理服務的整體效能。百度智慧雲在大規模 PD 分離式推理基礎設施最佳化的實踐中,充分展現了網路基礎設施、通訊元件與上層業務特徵深度融合的重要性。
PD 分離式推理服務對網路的需求
傳統的推理服務均是集中式,大多是單機部署。即使是多機部署,機器規模也非常小,對網路的頻寬和時延需求都不大。當前大規模 PD 分離式推理系統來說,對網路通訊的需求則發生了變化:
  • 引入大規模的 EP 專家並行。EP 會從單機和雙機的小規模,變成更大規模,因此 EP 之間的「 Alltoall 通訊域」成倍增長。這對於網路基礎設施、Alltoall 運算元等的通訊效率都提出了更高的要求,它們會直接影響 OTPS、TPOT 等指標,從而影響最終的使用者體驗。
  • PD 分離式部署,Prefill 和 Decode 之間會有 KV Cache 流量的傳輸,KV Cache 通訊的時延直接影響推理服務整體的效能。
為了提升大規模 PD 分離式推理系統的效率,百度智慧雲針對性地優化了網路基礎設施和通訊元件:
  • 物理網路層面:為適配 Alltoall 流量專門建設了「4us 端到端低時延」 HPN 叢集,支援自適應路由功能徹底解決網路雜湊衝突,保證穩定的低時延。
  • 流量管理層面:最佳化 Alltoall 多打一 incast 流量導致的降速問題。對 HPN 網路中訓練、推理等不同型別流量進行佇列管理,實現訓推任務的互不干擾。透過自研高效能 KV Cache 傳輸庫實現 DCN 彈性 RDMA 滿頻寬傳輸。
  • 通訊元件層面:Alltoall 運算元最佳化,相比開源的方案,大幅提升 Prefill 和 Decode 的 Alltoall 通訊效能。針對 batch size 級別的動態冗餘專家編排,將專家均衡度控制在了 1.2 以下,確保叢集中所有 GPU 通訊時間大致相同。最佳化雙流,實現最大程度的計算和通訊 overlap,整體提升 20% 吞吐。
下面我們逐一介紹百度智慧雲在以上幾個層面的最佳化實踐。
解決方案和最佳實踐
建設適配 Alltoall 流量特徵的 HPN 網路設施
百度智慧雲在訓練場景下的 HPN 網路架構設計已經有著豐富的經驗,AIPod 使用多導軌網路架構,GPU 伺服器配有 8 張網絡卡,然後每張網絡卡分別連到一個匯聚組的不同 LEAF 上。在 LEAF 和 SPINE 層面,透過 Full Mesh 的方式進行互聯。
以下圖為例,考慮一個訓練場景下的 3 層架構 HPN 網路:

訓練和推理任務的流量特徵
  • 非 MoE 訓練任務的流量特徵
在傳統非 MoE 的訓練場景下,跨機通訊產生的流量大多數都是同號卡流量。例如在梯度同步時候產生的 AllReduce 或者 ReduceScatter 或者 AllGather,PP 之間的 SendRecv 等。同號卡通訊最佳情況可以只經過一跳,以上圖為例,每個 LEAF 交換機有 64 個下聯口,因此 64 臺伺服器規模同號卡通訊理論上可以做到一跳可達。
規模再大,就只能經過 SPINE 或者最差經過 SUPER SPINE 來進行通訊。為了減少流量上送 SPINE,百度百舸在任務排程的時候會自動進行伺服器的親和性排程。在建立任務的時候,儘量把同一通訊組下的 Rank 排布在同一 LEAF 交換機下的伺服器內,那麼理論上大部分流量都可以收斂在 LEAF 下。
  • MoE 推理流量特徵
對於推理服務來說,MoE EP 之間的 Alltoall 通訊流量模式與 AllReduce 等不同,會產生大量的跨導軌流量。雖然對於 Prefill 階段來說,可以透過軟體實現層面規避掉跨導軌的流量,但是 Decode 階段仍然無法避免跨導軌,這會導致多機之間的通訊不只是同號卡通訊,跨機流量大部分並不能一跳可達,會有大量的流量上到 SPINE 或者 SUPER SPINE,從而導致時延增加。
  • MoE 訓練流量特徵
對於 MoE 訓練的流量會更加複雜,綜合了訓練和推理的流量特徵,既存在傳統的梯度同步產生的 AllReduce 或者 ReduceScatter 或者 AllGather,PP 之間的 SendRecv,也存在 EP 之間的 Alltoall 流量。這些流量不但會出現跨導軌傳輸的問題,他們之間可能會存在 overlap 導致互相干擾。
面向 EP 的 HPN 架構最佳化
鑑於 Alltoall 通訊的特點,我們在設計 HPN 網路的時候,會考慮優先保證跨導軌流量至多 2 跳可達,讓 Alltoall 流量收斂到 SPINE 層,以這種方式儘量減少跨導軌的通訊時延。如下圖所示:

LEAF 層所有裝置全部有一根線接入同一臺 SPINE 交換機,這樣可以讓叢集內 Alltoall 跨導軌流量全部收斂到 SPINE 層,跨導軌通訊時延可以進一步從 5us+ 縮小為 4us。
這種經過最佳化後的 HPN 網路架構,能接入的卡數主要取決於交換機晶片支援的最大的下聯口有多少。雖然對於超大模型的訓練任務來說,這個叢集規模可能不夠,但是對於推理來說,通常不需要那麼大規模的機器,是可以滿足需求的。
自適應路由徹底消除 hash 衝突
同時,由於 Alltoall 通訊流量的特徵,LEAF 到 SPINE 之間的通訊流量會成為常態。當流量需要透過 SPINE 傳輸的時候,會由 hash 選擇 SPINE 出口的過程,這時候有可能會產生 hash 衝突,導致網路抖動。因此為了避免 hash 衝突,百度智慧雲基於自研交換機實現自適應路由。如下圖所示:圖片假設 A 和 C 進行 Alltoall 跨導軌通訊,A 發出的流量必然要經過 SPINE,那麼流量在到達 LEAF 的時候,會基於 packet 做 hash,並結合鏈路的負載情況動態選擇最優的出口,將報文傳送到多個 SPINE 上。

基於報文 hash 到不同的物理路徑,百度智慧雲實現了鏈路負載均衡,消除因 hash 衝突時延增加導致的效能抖動,實現穩定的低時延網路。
Alltoall 和 KV Cache 流量的管理和最佳化
避免 incast 造成降速,不同型別流量的分佇列管理
  • Alltoall 多打一,不合理的配置造成降速
在推理服務中,EP 間的 Alltoall 通訊流量特性與傳統訓練中的 AllReduce 完全不同,網路上多打一造成的 incast 流量非常常見。這種 incast 的嚴重程度會隨著規模的增大而增大。incast 流量的突發,可能會造成接收側網絡卡上聯的交換機埠向傳送側反壓 PFC,導致網路降速。
傳統 Alltoall 流量多打一的示意圖如下,假設機器 A 和機器 C 的 GPU0、GPU2、GPU4、GPU6 都需要給機器 B 的 GPU0 傳送資料,那麼在網路上就會出現 8 打 1 的情況。

傳統的 Alltoall 實現,例如 PyTorch 內部呼叫的 Alltoall,是使用 send recv 去實現的,如果使用 PXN 可以縮小網路上的發生多打一的規模,但是多打一依然存在,如下圖所示:

因此無論 Alltoall 的運算元實現方式如何,網路上的多打一都無法避免。此時如果網路側的擁塞控制演算法的配置不合理,對擁塞過於敏感,就會產生降速,進而對整體吞吐造成影響。
  • 推理訓練任務中非 Alltoall 流量的干擾
除此之外,如果叢集內還存在其他流量,例如訓練任務 DP(資料並行)之間的 AllReduce 或者 ReduceScatter 或者 AllGather,或者 PD(Prefill-Decode)之間的 KV Cache 傳輸,也會對 Alltoall 的流量造成影響,從而進一步降低推理引擎的整體吞吐。
因此無論是端側網絡卡的配置,或者是交換機的配置,都需要針對 Alltoall 這種多打一 incast 流量做針對性最佳化,同時儘量避免叢集內其他流量對 Alltoall 流量造成影響。
針對這種情況,我們給出的解決方案如下:
  • 在佇列管理層面,透過端側網絡卡將 EP 的流量做專門的優先順序配置,將 Alltoall 流量匯入到高優先順序佇列。其他訓練的流量,比如 AllReduce 等使用低優先順序佇列。
  • 在資源層面,在端側網絡卡和交換機的高優先順序佇列上,預留更多的 buffer,分配更高比例的頻寬,優先的保證高優先順序佇列的流量。
  • 在擁塞控制演算法配置層面,高優先順序佇列關閉 ECN 標記功能,讓 DCQCN 演算法對 Alltoall 流量微突發造成的擁塞不做出反應,從而解決 incast 問題造成的降速。
在經過端側網絡卡和網側交換機配合調整後,可以保障 Alltoall 通訊流量的通訊頻寬和傳輸時延,實現訓推任務的互不干擾,並有效的緩解 incast 流量帶來的非預期的降速而造成的效能抖動。
經過測試,在我們部署的推理服務中,Alltoall 過程的整體通訊時延有 5% 的降低。
DCN 支援彈性 RDMA 實現 KV Cache 滿頻寬傳輸
在 PD 分離式推理系統中,還存在 PD 之間 KV Cache 傳輸的流量。相比 Alltoall 雖然他的頻寬需求不算大,但為了避免二者的流量互相干擾,通常我們會讓 KV Cache 的傳輸流量單獨走 DCN 網路,使其與 Alltoall 的流量完全隔離開。

在 DCN 網路的設計上,為了保證 KV Cache 流量的傳輸頻寬,其網路架構收斂比採用 1:1。端側網絡卡支援彈性 RDMA,使用 RDMA 協議保證 KV Cache 的高效能傳輸。
在傳輸庫層面,百度智慧雲使用自研的高效能 KV Cache RDMA 傳輸庫,其介面設計與框架層深度定製,支援上層框架分層傳輸,也支援多層 KV Cache 的批次傳輸,便於在框架層做計算與傳輸的 overlap。
透過以上設計最佳化,KV Cache 傳輸在主網絡卡可以用滿頻寬,傳輸時間可以完全被計算 overlap 住,不成為推理系統的瓶頸。
提高推理服務元件的網路通訊效率
在有了高頻寬低時延的網路基礎設施的基礎上,如何用好網路基礎設施,是推理服務軟體層面需要重點考慮的事情。
在我們對 PD 分離推理服務的 profile 分析當中,發現了一些影響網路通訊效率的關鍵因素。
Alltoall 運算元的通訊效率
目前社群開源的 DeepEP 已經給出了推理系統中 dispatch 和 combine 過程的 Alltoall 高效能的運算元的實現,且效能表現優異。
對於 Prefill 來說,由於輸入的 batch size 較大,Alltoall 通訊運算元的同號卡傳輸階段為了平衡視訊記憶體資源和效能,採用分 chunk 傳輸的方式,傳送和接收會迴圈使用一小塊視訊記憶體,並對每次 RDMA 傳送以及機內 NVLink 傳輸的 token 數做了限制。
透過實際觀測網絡卡的傳輸頻寬,發現其並沒有被打滿。在此基礎上,我們對網路傳輸的視訊記憶體的大小,以及每一輪發送接收的最大 token 數等配置,針對不同的 GPU 晶片,做了一些精細化的調整,使之在效能上有進一步的提升。透過最佳化,DeepEP 的傳輸效能有大概 20% 的效能提升,網路頻寬已經基本被打滿。
對於 Decode 來說,DeepEP 的實現是多機之間的 EP 通訊,不區分機內和機間,一律採用網路傳送。這樣做的考慮是為了機內傳輸也不消耗 GPU 的 SM 資源,完成網路傳送後運算元即可退出。在網路傳輸的時間內做計算,完成後再呼叫 Alltoall 的接收運算元,以此來實現計算和通訊的 overlap。但這樣做的缺點是機內的 NVLink 的頻寬並沒有被高效的利用起來,網路傳輸的資料量會變大。
因此,百度智慧雲透過在 GPU 運算元內使用 CE 引擎做非同步複製,在不佔用 GPU SM 資源的情況下,也能實現機內 NVLink 頻寬的高效利用,同時不影響計算和通訊的 overlap。
動態冗餘專家編碼,保證 EP 負載均衡
EP 專家之間如果出現處理 token 不均衡的情況,將會導致 Alltoall 通訊運算元的不同 SM 之間,以及不同 GPU 的通訊運算元之間,出現負載不均的情況,導致的結果就是整體通訊時間會被拉長。
由於 EP 專家之間的負載均衡是推理服務引擎提升吞吐的非常重要的一環,經過百度智慧雲的大規模的線上實踐的經驗來看,靜態冗餘專家並不能很好的保證專家均衡。因此我們專門適配了針對 batch size 級別的動態冗餘專家,把專家均衡度(max token/avg token)基本控制在了 1.2 以下,不會出現明顯的「快慢卡」的情況
極致最佳化雙流效果,整體吞吐進一步提升
通訊和計算 overlap,隱藏通訊的開銷,一直都是推理服務,或者大模型訓練中,非常重要的課題。
在百度智慧雲的實踐中,我們在線上大規模的推理服務中開啟了雙流。為了儘量隱藏掉通訊的開銷,達到最好的 overlap 的效果,除了做 EP 之間的專家均衡以外,對計算運算元也做了針對性的最佳化,例如對計算運算元和通訊運算元 kernel launch 的順序做合理排布,對二者所需的 SM 資源做合理的分配,避免出現計算運算元佔滿 SM 導致通訊運算元 launch 不進去的情況,儘可能的消滅掉 GPU 間隙的資源浪費。透過這些最佳化,整體的吞吐可以提升 20% 以上。
總  結
百度智慧雲在大規模 PD 分離式推理基礎設施最佳化的實踐中,充分展現了網路基礎設施、通訊元件與上層業務特徵深度融合的重要性。這種融合不僅是技術層面的創新,更是對實際業務需求的深刻理解和響應。
今日好文推薦
谷歌AI核爆:升級全系模型,Gemini 2.5雙榜登頂!所有產品用AI重做,OpenAI如何接招?
微軟重磅開源 Copilot!64 歲 VS Code 創始人親口承認:眼紅 Cursor,但真正價值在後端,它“抄”不過去!
Jeff Dean:一年內 AI 將取代初級工程師,網友:“Altman只會畫餅,Jeff說的話才致命”
千份簡歷零 Offer,42歲PHP程式設計師靠開網約車維生:AI時代,中年危機正在上演?

相關文章