大規模訓練
完全分片資料平行(FSDP)
FSDP 是 PyTorch 對 ZeRO 第三階段構想的原生實作,做成一個一等的模組包裹器。你把模型分成若干單元——通常是每個 transformer 區塊——FSDP 便把該單元裡每一個參數、梯度與優化器狀態張量平均切分到各資料平行工作者上。靜止時,一個工作者只持有每份權重的 1/N 片,因此即使模型很大,常駐佔用也很小。
執行採即時方式。在某單元前向之前,FSDP 發出 all-gather,讓每個工作者暫時具現出完整權重、跑完該層、再釋放蒐集到的副本。反向時重複 all-gather 以在本地重算梯度,接著做一次 reduce-scatter,使每個工作者只留下自己所擁有的那片已平均梯度。由於下一單元的蒐集可在當前單元計算時預取,大部分通訊都能藏在數學運算之後。混合精度、激活檢查點與 CPU 卸載都能與此包裹組合。
FSDP 的實務藝術在於選擇包裹的粒度。包得太粗,暫態 all-gather 出來的權重會撐爆你原想省下的記憶體預算;包得太細,又要為一堆微小的集合通訊付出啟動與同步開銷。FSDP2 以逐參數分片(DTensor)改良此點,讓它與張量平行的組合更乾淨、記憶體更可預測。
FSDP 與 ZeRO-3 是同一套演算法的兩個生態系版本;差別在工程面——包裹 API、預取啟發法,以及它們與張量平行融合的乾淨程度。
又稱
另見