訓練深度神經網絡,尤其是那些擁有數十億參數的網絡,通常需要大量的資源。其中一個持續存在的問題是計算和通信階段之間的不匹配。在傳統的設定中,前向和反向傳遞是依序執行的,這導致在數據交換或同步的過程中,GPU(圖形處理單元)會閒置。這些閒置的時間,或稱為管道氣泡,不僅延長了訓練時間,還增加了內存需求。此外,微批次的管理可能會導致不必要的參數重複,進一步增加可用資源的壓力。因此,找到更好地對齊這些階段的方法對提高效率和降低訓練成本至關重要。
DeepSeek AI 發布了 DualPipe,這是一種雙向管道並行算法,用於 V3/R1 訓練中的計算與通信重疊。DualPipe 不再遵循嚴格的順序,而是協調前向和反向傳遞在重疊的雙向流中進行。這種調度策略旨在協調計算和通信階段,讓一組微批次在進行前向處理的同時,另一組則同時進行反向計算。
根據 DeepSeek-V3 技術報告,這種雙向設計有助於減少傳統的管道氣泡,同時優化內存使用。該系統在前向和反向方向上採用對稱的微批次安排,使得 GPU 之間的數據流更加一致。這種對齊意味著硬體的使用更加穩定,可能導致更順暢和更高效的訓練週期。
技術見解與好處
DualPipe 通過將訓練過程劃分為一系列同時進行的較小微批次來實現其效率。該算法的關鍵創新在於其雙向調度機制。與傳統方法(如簡單的前向一個、反向一個(1F1B)序列或錯開變體如 ZB1P)不同,DualPipe 通過允許重疊操作來最小化閒置時間。
GitHub 文檔詳細說明了比較方法:
- 1F1B:依序執行前向和反向傳遞。
- ZB1P:引入一定程度的錯開以減少閒置時間。
- DualPipe:使用雙向調度方法,文檔中標示為“PP/2-1 (&+-3)”,表示該方法需要更少的管道階段,同時仍然容納額外的激活階段。
這種微妙的方法不僅減少了閒置時間,還提供了更平衡的內存使用。DualPipe 在 PyTorch 2.0 及以上版本中實施,與當前的深度學習框架兼容,並設計為能夠順利融入現有的訓練管道。
觀察與比較數據
該資料庫提供了一個清晰的例子,展示了 DualPipe 如何為一個擁有八個管道並行等級和二十個微批次的系統調度操作。在這種安排中,反向方向的微批次與前向方向的微批次相互映射,有效減少了傳統管道中通常觀察到的延遲。調度圖中突出顯示的重疊單元格與共享邊界,作為通信和計算階段交織的視覺表示。
此外,該資料庫提供了內存使用的比較分析。與 1F1B 和 ZB1P 等方法需要特定的管道配置不同,DualPipe 的方法(配置標示為“2× PP+1”)似乎更明智地使用資源。這種高效的硬體使用在大型訓練環境中特別有益,因為即使是小的改進也能帶來顯著的時間和成本節省。
結論
DualPipe 提供了一個深思熟慮且設計良好的解決方案,解決了深度學習訓練中的一個長期挑戰。通過重疊前向和反向傳遞,並仔細協調通信與計算,該算法減少了閒置時間並優化了資源利用。這種方法不僅有潛力縮短訓練時間,還能降低部署大型模型的整體成本。
查看 GitHub 資料庫。所有的研究功勞都歸於這個項目的研究人員。此外,歡迎在 Twitter 上關注我們,並別忘了加入我們的 80k+ ML SubReddit。
🚨 推薦閱讀 – LG AI Research 發布 NEXUS:一個先進的系統,整合代理 AI 系統和數據合規標準,以解決 AI 數據集中的法律問題。
本文由 AI 台灣 運用 AI 技術編撰,內容僅供參考,請自行核實相關資訊。
歡迎加入我們的 AI TAIWAN 台灣人工智慧中心 FB 社團,
隨時掌握最新 AI 動態與實用資訊!