• 教學 >
  • 使用 DDP 訓練「真實世界」模型
快捷方式

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

使用 DDP 訓練「真實世界」模型

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

作者:Suraj Subramanian

您將學到什麼
  • 編寫分散式訓練腳本的最佳實踐

  • 在雲端儲存/載入 artifacts 的更高靈活性

  • DDP 何時不適用

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

先決條件

觀看以下影片或在 youtube 上觀看。

在本影片中,我們將回顧在多節點 DDP 中訓練 GPT 模型的過程。 我們首先複製 minGPT repo 並重構 Trainer 以類似於我們在本系列中使用的結構。 觀看影片以了解這些變更的詳細資訊。

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

用於訓練的檔案

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

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

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

  • gpt2_train_cfg.yaml 包含資料、模型、最佳化器和訓練運行的組態。

  • main.py 是訓練任務的進入點。 它設定 DDP process group,讀取所有組態並運行訓練任務。

從雲端儲存和載入

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

使用混合精度

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

DDP 何時不夠用?

典型的訓練運行的記憶體佔用包括模型權重、 activations、梯度、輸入批次和最佳化器狀態。 由於 DDP 在每個 GPU 上複製模型,因此它僅在 GPU 具有足夠的容量來容納完整的記憶體佔用時才有效。 當模型變得越來越大時,更積極的技術可能很有用

  • activation checkpointing: activations 不是在正向傳遞期間儲存中間 activations,而是在反向傳遞期間重新計算 activations。 在這種方法中,我們運行更多的計算,但節省了記憶體佔用。

  • 完全分片資料平行 (Fully-Sharded Data Parallel, FSDP):在這裡,模型不會被複製,而是跨所有 GPU 進行「分片」,並且在正向和反向傳播中,計算與通訊會重疊。請閱讀我們的部落格,了解我們如何使用 FSDP 訓練一個具有 1 兆參數的模型。


為本教學課程評分

© Copyright 2024, PyTorch。

使用 Sphinx 構建,主題由 theme 提供,由 Read the Docs 提供。

文件

存取 PyTorch 的全面開發者文件

查看文件

教學

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

查看教學課程

資源

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

查看資源