百度集合通訊庫BCCL萬卡叢集快速定位故障
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,如有侵權,請聯絡管理員刪除。
相關文章
- WebSphere 叢集建立及故障排除Web
- 快速搭建Jenkins叢集Jenkins
- 快速建立POLARDB for PostgreSQL資料庫叢集教程SQL資料庫
- 快速安裝 kafka 叢集Kafka
- AI主戰場,萬卡是標配:國產GPU萬卡萬P叢集來了!AIGPU
- 【Redis】Redis Cluster-叢集故障轉移Redis
- redis cluster 叢集故障恢復操作思路Redis
- Oracle 12c叢集啟動故障Oracle
- 使用 Ansible 快速部署 HBase 叢集
- 用 Docker 快速搭建 Kafka 叢集DockerKafka
- linux shell快速搭建NSQ叢集Linux
- 管理 ES 叢集:叢集與外部間的安全通訊
- 管理 ES 叢集:叢集內部間的安全通訊
- Zookeeper叢集 + Kafka叢集Kafka
- kubernets叢集節點NotReady故障 分析報告
- 伺服器叢集的故障轉移方案伺服器
- mongodb叢集節點故障的切換方法MongoDB
- ansible快速部署cassandra3叢集
- 快速實現 Tomcat 叢集 Session 共享TomcatSession
- 搭建zookeeper叢集(偽叢集)
- 【資料庫】Redis叢集篇資料庫Redis
- Karmada跨叢集優雅故障遷移特性解析
- SQL Server 2008的故障轉移叢集概述UBSQLServer
- Oracle RAC日常運維-NetworkManager導致叢集故障Oracle運維
- 記一次Kafka叢集的故障恢復Kafka
- zookeeper叢集及kafka叢集搭建Kafka
- 【故障公告】Kubernetes 叢集節點當機造成部落格站點故障
- 高可用Flink on YARN叢集快速配置Yarn
- 教你在Kubernetes中快速部署ES叢集
- Redis系列:搭建Redis叢集(叢集模式)Redis模式
- linux下搭建ZooKeeper叢集(偽叢集)Linux
- redis偽叢集配置Cluster叢集模式Redis模式
- 用 Docker swarm 快速部署分散式圖資料庫 Nebula Graph 叢集DockerSwarm分散式資料庫
- 通過memberlist庫實現gossip管理叢集以及叢集資料互動Go
- 基於istio實現單叢集地域故障轉移
- 如何應對Akka叢集出現腦裂故障?- Andrzej
- docker搭建redis叢集和Sentinel,實現故障轉移DockerRedis
- Moebius資料庫多活叢集資料庫