快捷方式

入門 || 什麼是 DDP || 單節點多 GPU 訓練 || 容錯性 || 多節點訓練 || minGPT 訓練

多節點訓練

創建於:2022 年 9 月 27 日 | 最後更新於:2025 年 1 月 23 日 | 最後驗證於:2024 年 11 月 5 日

作者:Suraj Subramanian

您將學到什麼
  • 使用 torchrun 啟動多節點訓練作業

  • 從單節點遷移到多節點訓練時的程式碼修改(以及需要注意的事項)。

GitHub 上檢視本教程使用的程式碼

前提條件
  • 熟悉多 GPU 訓練torchrun

  • 2 臺或更多可透過 TCP 訪問的 GPU 機器(本教程使用 AWS p3.2xlarge 例項)

  • 所有機器上安裝了帶 CUDA 的 PyTorch

請參照下方影片或在 YouTube 上觀看影片。

多節點訓練涉及將訓練作業部署到多臺機器上。有兩種方法可以實現:

  • 在每臺機器上執行具有相同 rendezvous 引數的 torchrun 命令,或者

  • 使用工作負載管理器(如 SLURM)將其部署在計算叢集上

在本影片中,我們將介紹從單節點多 GPU 遷移到多節點訓練所需的(最少)程式碼修改,並以上述兩種方式執行我們的訓練指令碼。

請注意,多節點訓練的瓶頸在於節點間通訊延遲。在單個節點上使用 4 個 GPU 執行訓練作業將比在 4 個節點上每個節點使用 1 個 GPU 執行要快。

本地 Rank 和全域性 Rank

在單節點設定中,我們跟蹤執行訓練程序的每個裝置的 gpu_idtorchrun 在環境變數 LOCAL_RANK 中跟蹤此值,該值唯一標識節點上的每個 GPU 程序。為了在所有節點上獲得唯一識別符號,torchrun 提供了另一個變數 RANK,它表示程序的全域性 Rank。

警告

請勿在訓練作業的關鍵邏輯中使用 RANK。當 torchrun 在故障或成員變更後重啟程序時,無法保證程序會保持相同的 LOCAL_RANKRANKS

異構擴充套件

Torchrun 支援異構擴充套件,即您的每個多節點機器可以參與訓練作業的 GPU 數量不同。在影片中,我在 2 臺機器上部署了程式碼,其中一臺有 4 個 GPU,另一臺只使用了 2 個 GPU。

故障排除

  • 確保您的節點可以透過 TCP 相互通訊。

  • 將環境變數 NCCL_DEBUG 設定為 INFO(使用 export NCCL_DEBUG=INFO)以列印詳細日誌,這有助於診斷問題。

  • 有時您可能需要顯式設定分散式後端的網路介面(export NCCL_SOCKET_IFNAME=eth0)。在此處閱讀更多相關資訊。

延伸閱讀


評價本教程

© 版權所有 2024, PyTorch。

使用 Sphinx 構建,主題由 Read the Docs 提供。

文件

查閱 PyTorch 的全面開發者文件

檢視文件

教程

獲取適合初學者和高階開發者的深入教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源