入門 || 什麼是 DDP || 單節點多 GPU 訓練 || 容錯性 || 多節點訓練 || minGPT 訓練
多節點訓練¶
創建於:2022 年 9 月 27 日 | 最後更新於:2025 年 1 月 23 日 | 最後驗證於:2024 年 11 月 5 日
請參照下方影片或在 YouTube 上觀看影片。
多節點訓練涉及將訓練作業部署到多臺機器上。有兩種方法可以實現:
在每臺機器上執行具有相同 rendezvous 引數的
torchrun命令,或者使用工作負載管理器(如 SLURM)將其部署在計算叢集上
在本影片中,我們將介紹從單節點多 GPU 遷移到多節點訓練所需的(最少)程式碼修改,並以上述兩種方式執行我們的訓練指令碼。
請注意,多節點訓練的瓶頸在於節點間通訊延遲。在單個節點上使用 4 個 GPU 執行訓練作業將比在 4 個節點上每個節點使用 1 個 GPU 執行要快。
本地 Rank 和全域性 Rank¶
在單節點設定中,我們跟蹤執行訓練程序的每個裝置的 gpu_id。torchrun 在環境變數 LOCAL_RANK 中跟蹤此值,該值唯一標識節點上的每個 GPU 程序。為了在所有節點上獲得唯一識別符號,torchrun 提供了另一個變數 RANK,它表示程序的全域性 Rank。
警告
請勿在訓練作業的關鍵邏輯中使用 RANK。當 torchrun 在故障或成員變更後重啟程序時,無法保證程序會保持相同的 LOCAL_RANK 和 RANKS。
異構擴充套件¶
Torchrun 支援異構擴充套件,即您的每個多節點機器可以參與訓練作業的 GPU 數量不同。在影片中,我在 2 臺機器上部署了程式碼,其中一臺有 4 個 GPU,另一臺只使用了 2 個 GPU。
故障排除¶
確保您的節點可以透過 TCP 相互通訊。
將環境變數
NCCL_DEBUG設定為INFO(使用export NCCL_DEBUG=INFO)以列印詳細日誌,這有助於診斷問題。有時您可能需要顯式設定分散式後端的網路介面(
export NCCL_SOCKET_IFNAME=eth0)。在此處閱讀更多相關資訊。
延伸閱讀¶
使用 DDP 訓練 GPT 模型(本系列下一篇教程)
容錯分散式訓練(本系列上一篇教程)