評價此頁

簡介 || 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 的訓練任務更快。

本地和全域性排名#

在單節點設定中,我們跟蹤了執行我們訓練過程的每個裝置的 gpu_idtorchrun 在環境變數 LOCAL_RANK 中跟蹤此值,該值唯一標識了節點上的每個 GPU-程序。為了在所有節點之間獲得唯一識別符號,torchrun 提供了另一個變數 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)。在此 閱讀更多相關資訊。

進一步閱讀#