PyTorch 分散式概觀¶
建立於:2020 年 7 月 28 日 | 上次更新:2024 年 10 月 08 日 | 上次驗證:2024 年 11 月 05 日
作者: Will Constable
注意
在 github 中檢視及編輯此教學。
這是 torch.distributed
套件的概觀頁面。此頁面的目標是將文件分類到不同的主題,並簡要描述每個主題。如果您是第一次使用 PyTorch 建立分散式訓練應用程式,建議您使用此文件來導航到最適合您用例的技術。
簡介¶
PyTorch 分散式函式庫包含平行模組集合、通訊層,以及用於啟動和除錯大型訓練作業的基礎架構。
分片基本元件¶
DTensor
和 DeviceMesh
是用於建構平行性的基本元件,以 N 維處理程序組上分片或複製的張量表示。
DTensor 代表已分片和/或複製的張量,並自動通訊以根據操作的需要重新分片張量。
DeviceMesh 將加速器裝置通訊器抽象化為多維陣列,該陣列管理多維平行中集體通訊的底層
ProcessGroup
實例。 試用我們的 Device Mesh Recipe 以了解更多資訊。
通訊 API¶
- PyTorch 分散式通訊層 (C10D) 提供集體通訊 API (例如,all_reduce
和 all_gather) 和 P2P 通訊 API (例如,send 和 isend),這些 API 在所有平行實作中都在幕後使用。 使用 PyTorch 撰寫分散式應用程式 顯示了使用 c10d 通訊 API 的範例。
應用平行來擴展您的模型¶
資料平行是一種廣泛採用的單程式多資料訓練範例,其中模型在每個進程上複製,每個模型副本為一組不同的輸入資料樣本計算本機梯度,梯度在每個最佳化器步驟之前在資料平行通訊器組中平均。
當模型不適合 GPU 時,需要模型平行技術 (或分片資料平行),並且可以組合在一起以形成多維 (N-D) 平行技術。
在決定為您的模型選擇哪些平行技術時,請使用這些常見準則
如果您的模型適合單個 GPU,但您希望使用多個 GPU 輕鬆擴展訓練,請使用 DistributedDataParallel (DDP)。
當您的模型無法在一個 GPU 上容納時,請使用 FullyShardedDataParallel (FSDP)。
另請參閱:FSDP 入門
如果您使用 FSDP 達到擴展限制,請使用 Tensor Parallel (TP) 和/或 Pipeline Parallel (PP)。
注意
資料平行訓練也適用於 Automatic Mixed Precision (AMP)。