簡介 || 什麼是 DDP || 單節點多 GPU 訓練 || 容錯 || 多節點訓練 || minGPT 訓練
使用 DDP 訓練「真實世界」模型¶
建立於:2022 年 9 月 27 日 | 最後更新:2025 年 1 月 23 日 | 最後驗證:2024 年 11 月 05 日
觀看以下影片或在 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,讀取所有組態並運行訓練任務。
從雲端儲存和載入¶
在上面的影片中,我們將訓練快照直接儲存到雲端。 這使我們能夠靈活地從任何可以存取雲端儲存桶的節點繼續訓練。
DDP 何時不夠用?¶
典型的訓練運行的記憶體佔用包括模型權重、 activations、梯度、輸入批次和最佳化器狀態。 由於 DDP 在每個 GPU 上複製模型,因此它僅在 GPU 具有足夠的容量來容納完整的記憶體佔用時才有效。 當模型變得越來越大時,更積極的技術可能很有用
activation checkpointing: activations 不是在正向傳遞期間儲存中間 activations,而是在反向傳遞期間重新計算 activations。 在這種方法中,我們運行更多的計算,但節省了記憶體佔用。
完全分片資料平行 (Fully-Sharded Data Parallel, FSDP):在這裡,模型不會被複製,而是跨所有 GPU 進行「分片」,並且在正向和反向傳播中,計算與通訊會重疊。請閱讀我們的部落格,了解我們如何使用 FSDP 訓練一個具有 1 兆參數的模型。
延伸閱讀¶
使用 DDP 的多節點訓練(本系列的先前教學課程)