百度集合通訊庫BCCL萬卡叢集快速定位故障

陶然陶然發表於2024-03-07

  1 集合通訊對分散式訓練至關重要

  在分散式訓練中,每一塊 GPU 只負責處理部分模型或者資料。叢集中不同 GPU 之間透過集合通訊的方式,完成梯度同步和引數更新等操作,使得所有 GPU 能夠作為一個整體加速模型訓練。

  如果有一塊 GPU 在集合通訊中出了狀況,將會導致其他 GPU 處於等待狀態,直到這塊 GPU 完成資料同步,叢集中所有 GPU 才會開始後續工作。

  所以,集合通訊效能直接影響了分散式任務的速度,決定了叢集中所有 GPU 能否形成合力加速模型訓練。

  為了最大提升集合通訊的效能,在基礎設施層面,叢集通常採用基於 RDMA 的高效能物理網路,在任務執行時使用集合通訊庫進行加速。

  2 大模型對系統的運維能力和穩定性提出新要求

  我們知道,大模型的訓練任務時長以周或月為週期,叢集規模在千卡甚至萬卡以上規模。這導致在整個任務過程中會發生各種故障,導致資源利用率不高或者任務中斷。這使得大模型的訓練任務,不能只看重叢集規模和效能,更需要關注系統的運維能力和穩定性。

  如果系統的運維能力和穩定性不夠好,將會降低叢集的「有效訓練時長」,延長專案時間產生昂貴的時間成本。比如完成整個訓練任務花了 30 天,結果有 10 天是在排除各類故障,這是不可接受的。

  在分散式訓練任務中,作為系統核心元件之一的集合通訊庫,同樣需要面向大模型場景,在系統的運維能力和穩定性上進行最佳化。

  3 百度集合通訊庫 BCCL 概述

  百度集合通訊庫 BCCL(Baidu Collective Communication Library)是百度智慧雲推出的一款面向大模型訓練場景最佳化的集合通訊庫,是百度百舸 3.0 中的重要元件。

  BCCL 基於開源的 NCCL 進行了功能擴充套件和能力增強,針對大模型訓練場景在可觀測性、故障診斷、穩定性等方面進行最佳化,進一步提升集合通訊庫的可運維能力。同時,BCCL 針對百度智慧雲的特定 GPU 晶片進行了集合通訊效能最佳化,進一步提升資源利用率。相比 NCCL,BCCL 的關鍵特性如下:

  可觀測性:新增集合通訊頻寬實時統計能力;

  故障診斷:新增集合通訊 hang 時的故障診斷能力;

  穩定性:增強網路穩定性和故障容錯能力;

  效能最佳化:提升大模型訓練主流 GPU 晶片的集合通訊效能。

  接下來,我們將介紹 BCCL 在以上 4 個方面的能力。

  4 可觀測性:集合通訊頻寬實時統計

  4.1 背景

  在訓練過程中,有時候會出現任務正常執行,但是叢集的端到端效能下降的情況。出現這類問題,可能是叢集中任一元件導致的。這時候就需要運維工程師對叢集進行全面的檢查。

  4.2 問題

  其中,儲存系統、RDMA 網路、GPU 卡等通常都配有實時可觀測性平臺,可以在不中斷任務執行的情況下判斷是否存在異常。相比之下,針對集合通訊效能的判斷,則缺乏實時和直接的手段。目前,若懷疑集合通訊存在效能問題,只能使用如下 2 種手段:

  使用 RDMA 流量監控平臺進行故障排查。這種方法僅能間接推測出跨機集合通訊效能是否有異常。

  停止訓練任務釋放 GPU 資源,使用 nccl-test 進行二分查詢,最終鎖定出現故障的裝置。

  雖然第 2 種方法可以完成集合通訊異常的診斷,但是測試場景比較有限,只能判斷是否有常規的硬體異常問題。同時整個過程中會導致訓練中斷,產生昂貴的時間成本。

  4.3 特性和效果

  BCCL 的實時集合通訊頻寬統計功能,可以在訓練過程中對集合通訊效能進行實時觀測,準確地展示集合通訊在不同階段的效能表現,為故障診斷排除、訓練效能調優等提供資料支撐。即使在複雜通訊模式下,BCCL 透過精確的打點技術依然能提供準確的頻寬統計的能力。

  在集合通訊效能異常的故障排除方面,可以進一步根據不同通訊組的效能縮小故障範圍。在混合並行模式下,可以透過多個效能異常的通訊組的交集進一步確認故障節點。

  在訓練效能最佳化方面,可以評估該頻寬是否打滿硬體上限,是否有其他的最佳化策略,為模型調優提供更多的監控資料支撐。

  5 故障診斷:集合通訊故障診斷

  5.1 背景

  裝置故障導致的訓練任務異常停止,也是大模型訓練任務時常發生的狀況。故障發生後,一般都會有報錯日誌或者巡檢異常告警,比如可以發現某個 GPU 存在異常。在訓練任務異常時,我們只需要匹配異常時間點是否有相關異常事件或告警,即可確認故障 root cause。

  除此之外,還存在著一類不告警的「靜默故障」。當發生故障時,整個訓練任務 hang 住,無法繼續訓練,但是程序不會異常退出,也無法確認是哪個 GPU 或哪個故障節點導致訓練任務 hang。然而,此類問題的排查難點在於,該類故障不會立刻發生,訓練任務可以正常啟動並正常訓練,但是在訓練超過一定時間後(可能是幾個小時或者數天)突然 hang 住。排查時很難穩定復現該故障,導致排查難度進一步提高。

  5.2 問題

  由於集合通訊的同步性,當某個 GPU 出現故障時,其他 GPU 仍會認為自己處於正常地等待狀態。因此,當通訊過程中斷時,沒有 GPU 會輸出異常日誌,使得我們很難迅速定位到具體的故障 GPU。當上層應用程式在某一多 GPU 的集合通訊操作中 hang 時,應用程式也只能感知到某個集合通訊組(故障 comm)出現了問題,卻無法精確地判斷是哪個 GPU 導致了此次集合通訊的異常。

  運維工程師通常使用 nccl-test 來嘗試復現和定位問題,但是由於壓測時間短、測試場景簡單,很難復現集合通訊 hang。

  在百度集團內部排查此類問題時,首先停止線上的訓練任務,然後進行長時間的壓測,比如對於現有訓練任務模型進行切分,對叢集機器進行分批次壓測,不斷縮小故障範圍,從而確認故障機。排查代價通常需要 2 天甚至更多。這類故障排查的時間,將帶來巨大的叢集停機成本。

  5.3 特性和效果

  為了應對這一挑戰,在訓練任務正常執行時,BCCL 實時記錄集合通訊內部的通訊狀態。當任務 hang 時,BCCL 會輸出各個 rank 的集合通訊狀態。運維工程師可以根據這些資料特徵來進一步縮小故障 GPU 的範圍。透過這種方法,BCCL 透過一種近乎無損的方式實現了故障機的快速定位,大幅度提高了問題排查的效率。

  6 穩定性:網路穩定性和容錯增強

  6.1 背景

  在模型訓練過程中,單個網路埠偶發性的 updown 會導致當前程序異常,進而引起整個訓練任務退出。然而,單埠的偶發性 updown 在物理網路是不可避免的。

  6.2 特性和效果

  BCCL 針對此類偶發性的異常場景,進行了故障容錯以避免任務退出,提升訓練任務的穩定性。

  控制面容錯能力提升:在訓練任務啟動時,通常會由於偶發性的網路故障或其他故障導致訓練任務啟動失敗。BCCL 針對常見的偶發性異常故障增加相應的重試機制,確保訓練任務正常啟動。

  資料面容錯能力提升:在訓練任務正常執行時,偶發性的網路抖動可能導致 RDMA 重傳超次,從而導致整個訓練任務異常。BCCL 最佳化了 RDMA 重傳超次機制,提升訓練任務的健壯性。

  7 效能最佳化:集合通訊效能最佳化

  針對大模型訓練場景的主流 GPU 晶片,集合通訊效能還存在繼續提升的空間,進一步對任務進行加速。

  BCCL 針對百度智慧雲提供的主流的 GPU 晶片進行了深度最佳化。以雙機 H800 測試環境為例,BCCL 相比 NCCL 頻寬利用率可提升 10%。  

  

  

  8 總結

  2023 年 12 月 20 日,百度百舸·AI 異構計算平臺 3.0 釋出,它是專為大模型最佳化的智慧基礎設施。

  藉助 BCCL 在運維能力和穩定性進行的最佳化,使得百度百舸平臺的有效訓練時長達到 98%,頻寬的有效利用率可以達到 95%。

來自 “ 百度Geek說 ”, 原文作者:LSK & YZ;原文連結:https://server.it168.com/a2024/0307/6841/000006841658.shtml,如有侵權,請聯絡管理員刪除。

相關文章