同時在多個 GPU 或機器上訓練模型。資料平行化給每個 GPU 一份模型副本並分割訓練資料。模型平行化在模型太大而無法放入一個 GPU 時將模型本身分割到多個 GPU 上。FSDP(完全分片資料平行化)和 DeepSpeed 等現代方法結合了兩者,實現了數千億參數模型的訓練。
沒有前沿模型能放在單一 GPU 上。訓練 GPT-4 或 Claude 需要數千個 GPU 共同工作數月。分散式訓練是使這成為可能的工程 — 它與架構或資料同等關鍵。你的分散式訓練效率直接決定了在給定預算下你能訓練多大的模型。
資料平行化(DP):每個 GPU 擁有完整的模型副本,處理不同的小批次,梯度在 GPU 之間取平均。對於能放在一個 GPU 上的模型來說簡單且高效。張量平行化(TP):將單個層分割到多個 GPU 上,每個 GPU 計算矩陣乘法的一部分。當單一層的權重無法放在一個 GPU 上時需要。管線平行化(PP):不同的層在不同的 GPU 上運行,微批次通過管線流動。
完全分片資料平行化(FSDP,來自 PyTorch)和 DeepSpeed ZeRO(來自 Microsoft)將模型參數、梯度和最佳化器狀態分片到多個 GPU 上。每個 GPU 只儲存模型的一部分,參數在計算時按需匯集,然後釋放。這使得訓練遠超單一 GPU 記憶體的模型成為可能。DeepSpeed ZeRO 有三個階段:階段 1 分片最佳化器狀態,階段 2 增加梯度,階段 3 增加參數。
分散式訓練的根本挑戰是通訊:GPU 必須同步梯度(在資料平行化中)或交換啟動值(在模型/管線平行化中)。此通訊通過 NVLink(節點內,900 GB/s)或 InfiniBand(節點間,400 Gb/s)進行。當 GPU 花更多時間等待通訊而非計算時,訓練效率下降。最佳配置通過將緊耦合操作(如張量平行化)保持在節點內,將鬆耦合操作(如資料平行化)放在節點間,來最小化跨節點通訊。