簡介 || DDP 是什麼 || 單節點多 GPU 訓練 || 容錯 || 多節點訓練 || minGPT 訓練
多節點訓練#
創建於:2022 年 9 月 27 日 | 最後更新:2025 年 1 月 23 日 | 最後驗證:2024 年 11 月 5 日
請跟隨下面的影片或在 youtube 上觀看。
多節點訓練涉及將訓練任務部署到多臺機器上。有兩種方法可以實現:
在每臺機器上執行帶有相同 rendezvous 引數的
torchrun命令,或者使用工作負載管理器(如 SLURM)將其部署在計算叢集上
在本影片中,我們將介紹從單節點多 GPU 遷移到多節點訓練所需(最少的)程式碼更改,並以上述兩種方式執行我們的訓練指令碼。
請注意,多節點訓練會受到節點間通訊延遲的限制。在單節點上執行 4 個 GPU 的訓練任務,會比在 4 個節點上每個節點執行 1 個 GPU 的訓練任務更快。
本地和全域性排名#
在單節點設定中,我們跟蹤了執行我們訓練過程的每個裝置的 gpu_id。 torchrun 在環境變數 LOCAL_RANK 中跟蹤此值,該值唯一標識了節點上的每個 GPU-程序。為了在所有節點之間獲得唯一識別符號,torchrun 提供了另一個變數 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 模型(本系列的下一個教程)
容錯分散式訓練(本系列的前一個教程)