數據並行性
資料並行性透過在多個 GPU 上複製模型來更快地訓練一個模型,每個 GPU 處理資料批次的不同部分。
概述
It is the workhorse technique that lets teams scale to dozens or thousands of accelerators.
深入探討
在資料並行性中,每個 GPU 都會保存模型權重的相同副本,但處理不同的小批量訓練範例。每個設備獨立計算前向和後向傳遞,產生自己的一組梯度。在權重更新之前,使用全歸約通訊操作對所有 GPU 上的梯度進行平均,因此每個副本都保持同步,並且表現得就像在一個大型組合批次上進行訓練一樣。這有效地增加了吞吐量:8 個 GPU 每步可以處理大約 8 倍的資料。問題是每個 GPU 必須適應記憶體中的整個模型、其梯度和優化器狀態,因此當模型對於單一裝置來說太大時,普通資料並行性沒有幫助。
技術洞察
關鍵操作是 all-reduce,它將跨裝置的梯度求和並重新分配結果。 NCCL 和 Horovod 等函式庫使用的 Ring all-reduce,在邏輯環周圍傳遞梯度塊,因此總通訊獨立於 GPU 數量。 PyTorch 的 DistributedDataParallel 將此通訊與後向傳遞重疊,為早期層觸發梯度同步,而後面的層仍在計算,隱藏了大部分網路延遲。
戰略影響
成本與預算
多年來,架構決策決定著效能和營運成本。
更明確的決策
技術教育幫助團隊選擇正確的堆疊,而不僅僅是最新的堆疊。
品質管控
更好的工程選擇可以減少生產中的可靠性事故。
數據並行的未來
純資料並行性越來越多地與分片和模型並行性相結合,形成針對萬億參數模型的混合「nD 並行性」策略。期望更聰明的梯度壓縮、非同步和重疊通訊以及拓撲感知的全歸約,利用節點內的快速 NVLink 和跨節點的較慢的 InfiniBand。隨著叢集的成長,降低通訊與運算的比率仍然是保持數千個 GPU 繁忙的核心工程挑戰。
現實世界的實施
使用 PyTorch DistributedDataParallel 在一台伺服器的 8 個 GPU 上訓練 ResNet 影像分類器,每個 GPU 處理 256 個影像批次中的 32 個。
使用 Horovod 在數百個 GPU 上擴展 BERT 預訓練,使用環 all-reduce 來同步每個步驟的梯度。
在多節點叢集上微調推薦模型,其中每個節點處理不同的使用者互動分片。
使用 TensorFlow 的 MirroredStrategy 在單一工作站上的多個 GPU 上傳播視覺模型的訓練,只需最少的程式碼變更。
風險與防護欄
優化一項基準測試可以隱藏更廣泛的系統弱點。
基礎設施和維護成本常常被低估。
隨著系統變得更加複雜,安全性和可觀察性差距可能會擴大。
實施路線圖
在實施之前定義延遲、品質和成本目標。
在實際負載和資料條件下進行基準測試。
儀器監控錯誤、漂移和使用者影響。
在擴展之前準備回滾和事件回應路徑。
不斷探索
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 Data Parallelism 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 Data Parallelism?
資料並行性透過在多個 GPU 上複製模型來更快地訓練一個模型,每個 GPU 處理資料批次的不同部分。這是一種主力技術,可以讓團隊擴展到數十或數千個加速器。
在標準資料並行性中,每個 GPU 保存什麼?
每個 GPU 都保留模型的完整副本,並處理資料批次的不同部分,這就是它的「資料」並行性而不是模型並行性的原因。
哪個通訊操作使模型副本每一步保持同步?
每次向後傳遞後,梯度都會透過 all-reduce 跨裝置進行組合(通常先求和然後求平均值),因此每個副本都會套用相同的更新。
普通資料並行性的主要限制是什麼?
由於每個 GPU 都保存了所有內容的完整副本,因此當模型太大而無法在一台裝置上安裝時,資料並行性沒有任何幫助。
為什麼環全歸約對於大量 GPU 有吸引力?
環全歸約在邏輯環周圍傳遞梯度塊,因此無論有多少 GPU 參與,每個 GPU 發送的總頻寬都保持不變。
PyTorch DistributedDataParallel 如何隱藏通訊延遲?
DDP 開始同步較早層的梯度,而較晚的層仍在計算中,從而使網路通訊與計算重疊。