捷徑

簡介 || 什麼是 DDP || 單節點多 GPU 訓練 || 容錯能力 || 多節點訓練 || minGPT 訓練

多節點訓練

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

作者: 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)。在此處閱讀更多關於此的資訊 這裡

延伸閱讀


為本教學評分

© Copyright 2024, PyTorch.

使用 Sphinx 建置,主題由 theme 提供,並由 Read the Docs 託管。

文件

存取 PyTorch 的完整開發者文件

檢視文件

教學課程

取得針對初學者和進階開發人員的深入教學課程

檢視教學課程

資源

尋找開發資源並取得您的問題解答

檢視資源