技術指南

完全分片數據並行

完全分片資料並行 (FSDP) 是一種分散式訓練技術,可將模型的參數、梯度和最佳化器狀態分割到多個 GPU 上,因此每個裝置僅保留一個切片。

閱讀時間約2分鐘最後更新

概述

It makes training huge models possible on hardware that could never fit the whole model in one GPU's memory.

深入探討

傳統的資料並行性在每個 GPU 上保留模型的完整副本,這會浪費記憶體並限制模型大小。 FSDP 由 Meta 的 PyTorch 普及,並受到 Microsoft 的 ZeRO 的啟發,而是跨設備分片三件事:參數、梯度和優化器狀態。在前向傳遞過程中,每個 GPU 透過全收集臨時收集其正在計算的層的全部權重,運行計算,然後立即釋放收集的副本。向後傳遞的工作原理類似,然後是減少分散,將梯度切片分配回其所屬的 GPU。由於每個裝置僅永久儲存模型的一小部分,因此記憶體使用量與 GPU 數量大致呈線性下降,使團隊可以訓練具有數百或數千億參數的模型。

技術洞察

FSDP 用額外的通訊來節省記憶體。每層的權重根據需要在使用前進行全聚集重建,並在使用後立即丟棄,而梯度則透過減少分散進行組合和分割。透過在目前層運行時預先取下一層的參數,通訊可以與計算重疊,從而隱藏大部分網路延遲。調整分片粒度(包裝策略)可以平衡記憶體佔用與通訊開銷。

戰略影響

成本與預算

多年來,架構決策決定著效能和營運成本。

更明確的決策

技術教育幫助團隊選擇正確的堆疊,而不僅僅是最新的堆疊。

品質管控

更好的工程選擇可以減少生產中的可靠性事故。

完全分片數據並行的未來

FSDP 正在成為開放大型模型訓練的預設設置,PyTorch 中的 FSDP2 提高了可用性和每個參數分片。預計與萬億參數模型的張量和管道並行性更緊密的集成,對混合精度和 fp8 的更好支持,以及為您選擇分片邊界的更智能的自動包裝。隨著 NVLink 和 InfiniBand 等 GPU 間互連變得越來越快,分片的通訊成本不斷縮小,使其在更大的規模上變得實用。

現實世界的實施

在 8 個單獨無法承受全部權重的 GPU 上微調 700 億參數的 Llama 模型。

透過在數百個加速器上分片優化器狀態(Adam 主導記憶體),在人工智慧實驗室預先訓練大型語言模型。

研究人員使用 PyTorch 的 FSDP 包裝器在大學集群上訓練視覺變壓器,而無需購買旗艦 80GB GPU。

將 FSDP 與混合精度 bfloat16 結合,可將記憶體大致減半並加快多模式模型的訓練吞吐量。

風險與防護欄

優化一項基準測試可以隱藏更廣泛的系統弱點。

基礎設施和維護成本常常被低估。

隨著系統變得更加複雜,安全性和可觀察性差距可能會擴大。

實施路線圖

1

在實施之前定義延遲、品質和成本目標。

2

在實際負載和資料條件下進行基準測試。

3

儀器監控錯誤、漂移和使用者影響。

4

在擴展之前準備回滾和事件回應路徑。

不斷探索

Free newsletter

Get the daily AI briefing

Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.

One email each weekday. Unsubscribe in one click. We never sell or share your address.

Test yourself

Take the Fully Sharded Data Parallel quiz

Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.

開始測驗

Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation

下一步指南

數據並行性

常見問題

What is Fully Sharded Data Parallel?

完全分片資料並行 (FSDP) 是一種分散式訓練技術,可將模型的參數、梯度和最佳化器狀態分割到多個 GPU 上,因此每個裝置僅保留一個切片。它使得在硬體上訓練大型模型成為可能,而單一 GPU 的記憶體永遠無法容納整個模型。

FSDP 可以跨 GPU 分片,而標準資料並行性則不能?

FSDP 跨裝置對模型的參數、梯度和最佳化器狀態進行分片,而標準資料並行性則在每個 GPU 上複製完整模型。

FSDP 在計算之前使用哪種集體操作來重建層的完整權重?

在層運行之前,FSDP 會執行一次全收集,以暫時收集所有分片中的完整參數,然後釋放它們。

為什麼 FSDP 在一層計算後立即釋放收集到的全部權重?

永久僅保留一個分片並暫時收集完整權重可以使記憶體使用率保持在較低水平並大致與模型的一小部分成比例。

FSDP 主要受到哪種早期記憶體最佳化方法的啟發?

FSDP 的參數、梯度和優化器狀態的分片密切遵循 DeepSpeed 庫中 Microsoft 的 ZeRO 中引入的想法。

FSDP 如何隱藏大部分網路延遲以防止收集權重?

FSDP 在目前層仍在計算時預先取下一層的參數,將全收集通訊與有用的工作重疊。