簡介 || 什麼是 DDP || 單節點多 GPU 訓練 || 容錯能力 || 多節點訓練 || minGPT 訓練
多節點訓練¶
建立於: 2022 年 9 月 27 日 | 最後更新: 2025 年 1 月 23 日 | 最後驗證: 2024 年 11 月 05 日
觀看下面的影片或在 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 模型 (本系列的下一個教學)
容錯分散式訓練 (本系列的前一篇教學)