評價此頁

PyTorch 分散式概述#

創建於: 2020年7月28日 | 最後更新: 2025年7月20日 | 最後驗證: 2024年11月05日

作者: Will Constable, Wei Feng

注意

editgithub 上檢視和編輯此教程。

這是 torch.distributed 包的概述頁面。本頁面的目標是將文件分類到不同的主題中,並簡要描述每個主題。如果您是第一次使用 PyTorch 構建分散式訓練應用程式,建議使用本文件來導航到最能滿足您用例的技術。

簡介#

PyTorch 分散式庫包含一系列並行模組、一個通訊層以及用於啟動和除錯大型訓練作業的基礎設施。

並行 API#

這些並行模組提供高階功能,並與現有模型結合使用

分片原語#

DTensorDeviceMesh 是用於在 N 維程序組上構建分片或複製張量的並行原語。

  • DTensor 表示一個分片和/或複製的張量,並自動通訊以根據操作需要重分片張量。

  • DeviceMesh 將加速器裝置通訊器抽象成一個多維陣列,該陣列管理底層 ProcessGroup 例項,用於多維並行中的集體通訊。請嘗試我們的 Device Mesh 示例 以瞭解更多資訊。

通訊 API#

PyTorch 分散式通訊層 (C10D) 提供了集體通訊 API(例如,all_reduce

all_gather)以及 P2P 通訊 API(例如,sendisend),這些 API 在所有並行實現中都有使用。 使用 PyTorch 編寫分散式應用程式 展示了使用 c10d 通訊 API 的示例。

啟動器#

torchrun 是一個廣泛使用的啟動指令碼,它在本地和遠端機器上生成程序來執行分散式 PyTorch 程式。

應用並行化以擴充套件您的模型#

資料並行是一種廣泛採用的單程式多資料訓練正規化,其中模型在每個程序上覆制,每個模型副本為不同的輸入資料樣本計算區域性梯度,在每次最佳化器步驟之前,梯度會在資料並行通訊器組內進行平均。

當模型無法放入 GPU 時,需要模型並行技術(或分片資料並行),並且可以將它們組合起來形成多維 (N-D) 並行技術。

在決定為模型選擇哪種並行技術時,請遵循以下通用指南

  1. 如果您的模型適合單個 GPU,但您想使用多個 GPU 輕鬆擴充套件訓練,請使用 DistributedDataParallel (DDP)

  2. 當您的模型無法放入單個 GPU 時,請使用 FullyShardedDataParallel (FSDP2)

  3. 如果您在使用 FSDP2 時達到擴充套件限制,請使用 張量並行 (TP) 和/或 流水線並行 (PP)

注意

資料並行訓練也適用於 自動混合精度 (AMP)

PyTorch 分散式開發者#

如果您想為 PyTorch 分散式做出貢獻,請參閱我們的 開發者指南