專為大模型訓練優化,百度集合通信庫 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%。

大家可以訪問?安裝BCCL庫 - 百舸異構計算平臺AIHC | 百度智能云文檔???????,了解更多 BCCL 的相關信息。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714826.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714826.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714826.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++調用PyTorch模型教程

在人工智能的世界中,PyTorch已經成為了研究人員和工程師們廣泛使用的深度學習框架之一。它以其靈活性和動態計算圖而聞名,非常適合快速原型設計和實驗。然而,當我們想要將訓練好的模型部署到生產環境中時,我們可能會傾向于使用C這…

老衛帶你學---leetcode刷題(172. 階乘后的零)

172. 階乘后的零 問題 給定一個整數 n ,返回 n! 結果中尾隨零的數量。 提示 n! n * (n - 1) * (n - 2) * … * 3 * 2 * 1 示例 1: 輸入:n 3 輸出:0 解釋:3! 6 ,不含尾隨 0 示例 2: 輸入…

Java Web之網頁開發基礎復習

tomcat之網頁開發基礎復習 **聲明** :HTML標準規范 </!doctype> <html> : 根標簽 <head>: 頭部標簽 內含<title><meta><link><style> <body>: 主體 <body></body> html標簽 單標簽: <標簽名 \> 雙標…

Python線性代數數字圖像和小波分析之二

要點 數學方程&#xff1a;數字信號和傅里葉分析&#xff0c;離散時間濾波器&#xff0c;小波分析Python代碼實現及應用變換過程&#xff1a; 讀取音頻和處理音頻波&#xff0c;使用Karplus-強算法制作吉他音頻離散傅里葉計算功能和繪制圖示結果計算波形傅里葉系數正向和反向&…

1_SQL

文章目錄 前端復習SQL數據庫的分類關系型數據庫非關系型數據庫&#xff08;NoSQL&#xff09; 數據庫的構成軟件架構MySQL內部數據組織方式 SQL語言登錄數據庫數據庫操作查看庫創建庫刪除庫修改庫 數據庫中表的操作選擇數據庫創建表刪除表查看表修改表 數據庫中數據的操作添加數…

性別和年齡的視頻實時監測項目

注意&#xff1a;本文引用自專業人工智能社區Venus AI 更多AI知識請參考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 性別和年齡檢測 Python 項目 首先介紹性別和年齡檢測的高級Python項目中使用的專業術語 什么是計算機視覺&#xff1f; 計算機視覺是使計算機能…

基于Camunda實現bpmn 2.0各種類型的任務

基于Camunda實現bpmn中各種類型任務 ? Camunda Modeler -為流程設置器&#xff08;建模工具&#xff09;&#xff0c;用來構建我們的流程模型。Camunda Modeler流程繪圖工具&#xff0c;支持三種協議類型流程文件分別為&#xff1a;BPMN、DMN、Form。 ? Camunda Modeler下載…

笨辦法:基于后端Matplotlib生成圖片, 前端繪制報表

很久很久以前, 做過一個項目, 因為前端基礎差, echarts搗鼓不來, 然后就折騰出來一套比較奇葩的技術方案, 就是前端需要什么圖表, 后端先繪制好, 然后前端需要什么圖表, 再從后端拉取后端之前響應的圖片路徑, 再去做渲染。 其實基于后端使用 Matplotlib 繪制圖表,前端…

DangZero:通過直接頁表訪問的高效UAF檢測(摘要及介紹及背景翻譯)

先通過翻譯過一遍文章&#xff0c;然后再對每個章節進行總結 摘要 Use-after-free vulnerabilities remain difficult to detect and mitigate, making them a popular source of exploitation. Existing solutions in- cur impractical performance/memory overhead, requir…

powershell界面中,dir命令的效果

常用參數 -path D:\111\111_2。讀取指定路徑。 -Name。只輸出文件名 -Include *.txt。指定后綴的文件 -Recurse。搜索目錄及其子目錄。 -Force。顯示具有 h 模式的隱藏文件。 >1dir.txt。將結果入指定文件 各參數使用效果 dir PS D:\111\111_2> dir 目錄: D:\111…

初中孩子最近不愿意上學怎么辦?有什么好方法可以解決?

這個年齡段屬于叛逆期&#xff0c;這個時候孩子出現厭學問題很正常&#xff0c;家長應該多些耐心和時間&#xff0c;不要一味地責罵&#xff0c;會更加排斥和反感&#xff0c;叛逆的。可以跟孩子好好談談聊聊&#xff0c;學會傾聽他的心聲&#xff0c;愿意聽你說話在教育和引導…

配置MySQL與登錄模塊

使用技術 MySQL&#xff0c;Mybatis-plus&#xff0c;spring-security&#xff0c;jwt驗證&#xff0c;vue 1. 配置Mysql 1.1 下載 MySQL :: Download MySQL Installer 1.2 安裝 其他頁面全選默認即可 1.3 配置環境變量 將C:\Program Files\MySQL\MySQL Server 8.0\bin…

10個常見的Java面試問題及其答案

問題&#xff1a; Java的主要特性是什么&#xff1f; 答案&#xff1a; Java的主要特性包括面向對象、平臺無關、自動內存管理、安全性、多線程支持、豐富的API和強大的社區支持。 問題&#xff1a; 什么是Java的垃圾回收機制&#xff1f; 答案&#xff1a; Java的垃圾回收機…

【Spring Boot 源碼學習】BootstrapRegistry 初始化器實現

《Spring Boot 源碼學習系列》 BootstrapRegistry 初始化器實現 一、引言二、往期內容三、主要內容3.1 BootstrapRegistry3.2 BootstrapRegistryInitializer3.3 BootstrapRegistry 初始化器實現3.3.1 定義 DemoBootstrapper3.3.2 添加 DemoBootstrapper 四、總結 一、引言 前面…

Avalonia學習(二十八)-OpenGL

Avalonia已經繼承了opengl&#xff0c;詳細的大家可以自己查閱。Avalonia里面啟用opengl繼承OpenGlControlBase類就可以了。有三個方法。分別是初始化、繪制、釋放。 這里把官方源碼的例子扒出來給大家看一下。源碼在我以前發布的單組件里面。地址在前面的界面總結博文里面。 …

圖數據庫 之 Neo4j - 應用場景4 - 反洗錢(9)

原理 Neo4j圖數據庫可以用于構建和分析數據之間的關系。它使用節點和關系來表示數據,并提供實時查詢能力。通過使用Neo4j,可以將大量的交易數據導入圖數據庫,并通過查詢和分析圖結構來發現洗錢行為中的模式和關聯。 案例分析 假設有一家轉賬服務公司,有以下交易數據,每個…

YOLOv9有效改進|使用空間和通道重建卷積SCConv改進RepNCSPELAN4

專欄介紹&#xff1a;YOLOv9改進系列 | 包含深度學習最新創新&#xff0c;主力高效漲點&#xff01;&#xff01;&#xff01; 一、改進點介紹 SCConv是一種即插即用的空間和通道重建卷積。 RepNCSPELAN4是YOLOv9中的特征提取模塊&#xff0c;類似YOLOv5和v8中的C2f與C3模塊。 …

突破編程_C++_設計模式(建造者模式)

1 建造者模式的概念 建造者模式&#xff08;Builder Pattern&#xff09;是一種創建型設計模式&#xff0c;也被稱為生成器模式。它的核心思想是將一個復雜對象的構建與它的表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示。 在建造者模式中&#xff0c;通常包括以…

MySQL進階:MySQL事務、并發事務問題及隔離級別

&#x1f468;?&#x1f393;作者簡介&#xff1a;一位大四、研0學生&#xff0c;正在努力準備大四暑假的實習、 &#x1f30c;上期文章&#xff1a;MySQL進階&#xff1a;視圖&&存儲過程&&存儲函數&&觸發器 &#x1f4da;訂閱專欄&#xff1a;MySQL進…

Docker Machine windows系統下 安裝

如果你是 Windows 平臺&#xff0c;可以使用 Git BASH&#xff0c;并輸入以下命令&#xff1a; basehttps://github.com/docker/machine/releases/download/v0.16.0 &&mkdir -p "$HOME/bin" &&curl -L $base/docker-machine-Windows-x86_64.exe >…