搾取大模型算力,百度想了一些招

頭圖由豆包生成,提示詞 :算力集群,GPU,光感芯片頭圖由豆包生成,提示詞 :算力集群,GPU,光感芯片

作者|李楠郵箱|linan@pingwest.com

以前最寶貴的資源是黃金,現在最寶貴的資源是算力。

9月13日淩晨,OpenAI官宣發佈o1-preview,傳說中的「草莓」既帶來令人驚異的推理能力,也引起對算力的進一步關注。此前頭部玩家已經把模型訓練規模捲向10萬卡級別,草莓的算力消耗可能還要大上好多倍。於是對有誌於從大模型時代金塊的弄潮兒來說,算力問題更加凸顯。

一方面,大家要想辦法堆高算力資源,另一方面,還需要把有限的算力資源儘可能高效地利用。前者需要巨額的金錢投入,後者則需要精細把控算力調用的各個環節。

同在9月13日,百度做了一場有關大模型訓練成本的技術分享,百度智能雲AI計算部負責人王雁鵬對大模型時代的算力浪費難題做了一番拆解,並給出了百度百舸怎麼把算力利用率提升的應對策略。大模型時代,算力成本是最大成本。即便1%的算力損耗,都會對應一大筆金錢上的損失。而據王雁鵬介紹,目前企業訓練大模型的算力有效利用率不足 50%,大量算力被浪費了。

這種情形自然可惜。要怎麼提升算力有效利用率,成為攔在大模型玩家面前的一道關卡。大家都要尋找自己的答案。

圖為百度智能雲AI計算部負責人王雁鵬圖為百度智能雲AI計算部負責人王雁鵬

把算力用起來,很難

大模型時代,「把算力用起來」本身就是一件很難的事。在這背後,是計算範式的變革和與之相伴的技術變遷。

王雁鵬介紹,在早先的CPU通用計算時代,因為CPU有非常複雜的結構,帶來了軟硬件的完全解耦,軟件和硬件可以分別迭代演進。比如升級CPU後,不需要把應用重新適配。CPU性能提升一倍,應用的性能相應也會提升一倍。

之後到了GPU數值加速計算的時代,GPU相當於設計了很多簡單粗暴的機械臂,個子小而力氣大,但要想全部都用起來很不容易。於是催生了加速庫生態,也就是針對不同的應用場景來寫加速的軟件庫。這時候,發揮算力的複雜度從硬件轉移到軟件。沒有軟件上很好的配合,算力就不會有好的發揮。

而在當下的AI大集群超算時代,規模本身束縛了算力的發揮。王雁鵬指出,大模型的算法其實沒有很多,難點在於,以前一個芯片已經搞掂東西,現在需要1萬張芯片、10萬張芯片去做,當單機技術延展到10萬卡的集群,就要有一個極致互連的集群架構。其中涉及高性能的網絡、更好的並行策略等技術方案,也需要有更好的容錯、恢復能力。

如何高效發揮大集群的算力,正是眼下業內最關注的事情。在王雁鵬看來,有效算力是能耗有效率、單卡算力有效率、並行擴展有效率、有效訓練時間、資源利用率等五個環節共同作用的結果,只有在五個維度都作出改善,才能把算力利用率有效提升。

若細分來看,前三項主要涉及硬件本身性能的發揮,後兩項則側重於有限資源的更充分利用。

邊降能耗,邊提性能

「算力供給比拚的終局是能源供給」。解決算力浪費,首先要改善能耗損失。

這裏涉及數據中心的能源效率,具體指標是 PUE(Power Usage Effectiveness)。其含義,可理解為整體電耗與花在芯片上的功耗的比值。PUE越低,意味著數據中心的能源效率就越高。目前業界平均水平大於 1.2,百度雲自建數據中心的平均 PUE 則小於 1.1。

這有賴於百度百舸的液冷方案。王雁鵬提到,現在單個GPU的功耗已經超過1000瓦,如果按照傳統機房的風冷方案設計,可能會有30%的電力浪費在散熱上,並且散熱會影響GPU的頻率,進而限制其性能發揮。液冷相較於風冷實現一舉三得,既減少電力損耗,還可以帶來10%的性能提升,同時因為散熱均勻、沒有風扇震動,可以把機器故障率降低 60%到70%。

單卡算力涉及的指標是 MFU(Model FLOPS Utilization),可理解為有效算法算力與標稱理論算力的比值。王雁鵬舉例,在大模型上,即便把單機做極致優化,MFU也只能達到70%,也就是發揮七成算力。這受限於前文所說的GPU設計理念,而解決方案,需要在軟件層面下功夫。就百度百舸來說,提升單卡算力利用的手段就是基於場景去做算子的加速庫。對比英偉達的原生庫,由此帶來了10%加速庫層面的提升。

第三個維度是提升並行擴展有效率,這涉及百度為萬卡場景設計的RDMA網絡,以及自動並行策略。

在萬卡場景,第一個瓶頸點就是網絡連接問題。以往備受推崇的IB網絡是為HPC(高性能計算)設計,對AI集群並不合適。前者以延遲為第一導向,但AI重視的是吞吐,需要大量數據同步傳輸。而RDMA網絡的優勢之一正是高吞吐和高效率。更進一步,百度通過自適應路由等優化,把RDMA網絡的帶寬有效率從60%提升到95%以上,借此帶動大模型性能提升5%到10%。

至於自動並行策略,王雁鵬稱其為百度AI大集群最重要的演進範式,其原理是通過自動分析計算任務和計算資源,實現任務在多個計算單元上的合理分配並行執行。這一定程度實現了大模型層面的軟硬件解耦。也就是說,在大模型的硬件升級後,模型不需要再做很多適配,就可以直接利用硬件升級帶來的好處。

有限硬件的充分利用

優化了單卡性能,提升了集群效能,之後的挑戰是,怎麼保證AI訓練的穩定運行。隨著算力規模的提升,故障時間也會變長。

舉例而來,如果在千卡規模,AI訓練能夠在99%的時間穩定運行,只有1%時間浪費。到了萬卡規模,有效時間比值就會降低到90%。到了十萬卡規模,有效時間可能就會變成0。為了更好地利用算力資源,就需要儘量減少無效訓練時間。

拆解來看,既要想辦法縮短故障定位的時間,也要要縮短任務恢復時間。關於前者,因為AI訓練是同步任務,如果只是某一張卡發生故障,用傳統方法很難定位到具體的故障卡。百度的經驗是,在通訊庫層面加強hang檢測、慢節點檢測,實現秒級定位。關於後者,百度通過縮減checkpoint時間等,也實現了更快的任務恢復。這些措施結合起來,百度百舸萬卡規模的AI訓練有效時間提升到了99%以上。

再往後看,算力資源有效利用還涉及一道難關,就是能否用同一集群來支撐多任務的處理。這又可以拆解成多方面的問題。比如,大量微調模型會導致冷熱不均,需求是否可以用離線推理來滿足,怎麼應付從單卡到萬卡的不同量級的任務,等等。

百度的應對措施主要有三項,首先,以彈性隊列為核心,去設計每一個任務的配合和分配策略。其次,在單機實現多推理混布。此外,為訓練任務設置彈性伸縮機制。這樣,百度百舸對內對外的資源利用率基本都做到了90%以上。

還是得談卡脖子

最後,國內大模型還要面對更普遍也更現實的一項挑戰,就是算力卡脖子。如果沒有足夠的芯片資源,那麼談論算力浪費也就失去了意義。

要拿英偉達的卡會面臨各種限制,國產卡有各種不同的規格和參數。在算力受限的情況下,大模型廠商要想辦法把有限的卡聚合起來,充分利用。

百度的解法是,在大模型套件中設置能夠抽像的層,以便把各種芯片用起來。然後在這個基礎上用跨芯通訊庫的設計,解決不同芯片的通信問題。再之後借助一種異構並行切分策略,讓芯片性能可以在複雜的互連條件下發揮出來。

最終的效果是,千卡的性能損失可以控制在3%左右,萬卡控制在5%左右。同時,當需要翻倍算力訓練模型的時候,可以把存量的上一代芯片和增量芯片集納到一起,進而大幅減少開支——「慳錢」,是百度種種探索的另一個重點。

總的來說,大模型的算力之爭很快就要升級。據王雁鵬介紹,今年大家的訓練基本都是萬卡規模,10萬卡的競爭馬上就要到來。百度為搾取算力性能所想的辦法,既是技術層面「少花錢多辦事」的探索,也呼應了當下國內算力受限的局面。

更大規模的算力之爭,需要早做準備。