評價此頁

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

使用 DDP 訓練“真實世界”模型#

建立日期:2022 年 9 月 27 日 | 最後更新日期:2025 年 7 月 9 日 | 最後驗證日期:2024 年 11 月 5 日

作者: Suraj Subramanian

您將學到什麼
  • 編寫分散式訓練指令碼時的最佳實踐

  • 在雲端儲存/載入工件時增加了靈活性

  • 何時不適合使用 DDP

GitHub 上檢視此教程中使用的程式碼

先決條件
  • PyTorch 已在所有機器上 安裝 了 CUDA

  • 熟悉 多 GPU 訓練torchrun

  • [可選] 熟悉 多節點訓練

  • 2 個或更多 TCP 可達的 GPU 機器用於多節點訓練(本教程使用 AWS p3.2xlarge 例項)

請跟隨下面的影片或在 youtube 上觀看。

在本影片中,我們將回顧在多節點 DDP 中訓練 GPT 模型的過程。我們首先克隆 minGPT 倉庫,並重構 Trainer 以匹配本系列中使用的結構。觀看影片以瞭解這些更改的詳細資訊。

我們使用 hydra 來集中管理我們訓練執行的所有配置。在程式碼重構完成後,我們首先在一個具有 4 個 GPU 的單節點上執行它,然後在 slurm 叢集上執行。

用於訓練的檔案#

  • trainer.py 包含 Trainer 類,該類使用提供的資料集在模型上執行分散式訓練迭代。

  • model.py 定義了模型架構。

  • char_dataset.py 包含一個字元級資料集的 Dataset 類。

  • gpt2_train_cfg.yaml 包含資料、模型、最佳化器和訓練執行的配置。

  • main.py 是訓練作業的入口點。它設定 DDP 程序組,讀取所有配置並執行訓練作業。

從雲端儲存和載入#

在上面的影片中,我們直接將訓練快照儲存到雲端。這使我們能夠靈活地從任何有權訪問雲端儲存桶的節點繼續訓練。

使用混合精度#

為了加快速度,您可以使用 混合精度 來訓練模型。在混合精度中,訓練過程的一部分以降低的精度進行,而另一些對精度下降更敏感的步驟則保持在 FP32 精度。

何時 DDP 不夠用?#

典型的訓練執行的記憶體佔用包括模型權重、啟用、梯度、輸入批次和最佳化器狀態。由於 DDP 會在每個 GPU 上覆制模型,因此只有當 GPU 具有足夠的容量來容納全部佔用空間時它才起作用。當模型變得更大時,更激進的技術可能有用。

  • 啟用檢查點:在正向傳播期間不儲存中間啟用,而是在反向傳播期間重新計算啟用。在此方法中,我們進行更多的計算,但節省了記憶體佔用。

  • 完全分片資料並行 (FSDP):在這裡,模型不會被複制,而是被“分片”到所有 GPU 上,並且計算在正向和反向傳播中與通訊重疊。閱讀我們的 部落格 以瞭解我們如何使用 FSDP 訓練一個 1 萬億引數的模型。

進一步閱讀#