本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
模型平行處理概念
模型平行處理是一種分散式訓練方法,其中深度學習 (DL) 模型會分割為多個 GPUs 和執行個體。SageMaker 模型平行程式庫 v2 (SMP v2) 與原生 PyTorch APIs 和功能相容。這可讓您方便地將 PyTorch 完整著色資料平行 (FSDP) 訓練指令碼調整為 SageMaker 訓練平台,並利用 SMP v2 提供的效能改善。本簡介頁面提供模型平行處理的高階概觀,以及說明訓練深度學習 (DL) 模型時,如何協助克服通常非常大的規模所引發的問題。它也提供 SageMaker 模型平行程式庫提供的範例,以協助管理模型平行策略和記憶體耗用。
什麼是模型平行處理?
增加深度學習模型 (圖層和參數) 的大小可以為複雜的任務 (例如電腦視覺和自然語言處理) 提供更佳的準確性。不過,單一 GPU 記憶體可容納的最大模型大小有限制。訓練 DL 模型時,GPU 記憶體限制可能是瓶頸,狀況如下:
-
它們會限制您可以訓練的模型大小,因為模型的記憶體佔用空間會依參數數量成比例擴展。
-
它們會在訓練期間限制每個 GPU 批次大小,進而降低 GPU 使用率和訓練效率。
為了克服在單一 GPU 上訓練模型的相關限制,SageMaker AI 提供模型平行程式庫,以協助在多個運算節點上有效率地分發和訓練 DL 模型。此外,透過 程式庫,您可以使用 EFA 支援的裝置來實現最佳化的分散式訓練,以低延遲、高輸送量和作業系統旁路增強節點間通訊的效能。
使用模型平行處理之前估計記憶體需求
在您使用 SageMaker 模型平行程式庫之前,請考慮下列事項,以了解訓練大型 DL 模型的記憶體需求。
對於使用 float16
(FP16) 或 bfloat16
(BF16) 和 Adam 最佳化工具等自動混合精度的訓練任務,每個參數所需的 GPU 記憶體約為 20 個位元組,我們可以依下列方式細分:
-
FP16 或 BF16 參數 ~ 2 個位元組
-
FP16 或 BF16 梯度 ~ 2 位元組
-
基於 Adam 最佳化工具的 FP32 最佳化工具狀態約 8 位元組
-
參數的 FP32 副本約 4 位元組 (
optimizer apply
(OA) 操作需要) -
漸層的 FP32 副本約 4 位元組 (OA 操作需要)
即使對於具有 100 億個參數的相對較小 DL 模型,它也需要至少 200GB 的記憶體,這比單一 GPU 上可用的典型 GPU 記憶體 (例如,具有 40GB/80GB 記憶體的 NVIDIA A100) 大得多。除了模型和最佳化工具狀態的記憶體需求之外,還有其他記憶體取用者,例如在向前傳遞中產生的啟用。所需的記憶體可能大於 200GB。
針對分散式訓練,我們建議您使用分別具有 NVIDIA A100 和 H100 Tensor 核心 GPUs 的 Amazon EC2 P4 和 P5 執行個體。如需 CPU 核心、RAM、已連接的儲存磁碟區和網路頻寬等規格的詳細資訊,請參閱 Amazon EC2 執行個體類型
即使使用加速運算執行個體,具有大約 100 億個參數的模型,例如 Megatron-LM 和 T5,甚至具有數百億個參數的較大模型,例如 GPT-3,也無法在每個 GPU 裝置中符合模型複本。
程式庫如何採用模型平行處理和記憶體儲存技術
該程式庫包含各種類型的模型平行處理功能和記憶體節省功能,例如最佳化工具狀態碎片、啟動檢查點、啟動卸載。所有這些技術都可以結合起來,以有效率地訓練包含數千億個參數的大型模型。
碎片資料平行處理
碎片資料平行處理是一種節省記憶體的分散式訓練技術,可將模型狀態 (模型參數、漸層和最佳化工具狀態) 分割到資料平行群組中的 GPU。
SMP v2 會透過 FSDP 實作碎片資料平行處理,並延伸到實作部落格文章討論的巨型模型訓練近線擴展中討論的 AWS
您可以將碎片資料平行處理作為獨立策略套用至模型。此外,如果您使用的是配備 NVIDIA A100 Tensor 核心 GPUs ml.p4d.24xlarge
和 的高效能 GPU 執行個體ml.p4de.24xlarge
,則可以利用 SageMaker 資料平行處理 (SMDDP) 程式庫所提供的AllGather
操作,來提高訓練速度。
若要深入了解碎片資料平行處理,並了解如何設定碎片資料平行處理,或結合其他技術使用碎片資料平行處理,例如張量平行處理和混合精確度訓練,請參閱 混合碎片資料平行處理。
專家平行處理
SMP v2 與 NVIDIA Megatron
MoE 模型是一種由多個專家組成的轉換器模型類型,每個專家都由神經網路組成,通常是前饋網路 (FFN)。稱為路由器的閘道網路會決定要將哪些權杖傳送到哪個專家。這些專家專門處理輸入資料的特定層面,使模型能夠更快地訓練、降低運算成本,同時實現與其對等密集模型相同的效能品質。專家平行處理是一種平行處理技術,可處理跨 GPU 裝置分割 MoE 模型的專家。
若要了解如何使用 SMP v2 訓練 MoE 模型,請參閱 專家平行處理。
張量平行處理
Tensor 平行處理會將個別層或 分割nn.Modules
為跨裝置平行執行。下圖顯示 SMP 程式庫如何將模型分割為四層以實現雙向張量平行處理的最簡單範例 ("tensor_parallel_degree": 2
)。在下圖中,模型平行群組、張量平行群組和資料平行群組的註釋DP_GROUP
分別為 MP_GROUP
、 TP_GROUP
和 。每個模型複本的層會均分並分散為兩個 GPU。程式庫會管理張量分散式模型複本之間的通訊。

若要深入了解 PyTorch 的張量平行處理和其他記憶體節省功能,以及了解如何設定核心功能的組合,請參閱 張量平行處理。
啟用檢查點和卸載
為了節省 GPU 記憶體,程式庫支援啟動檢查點,以避免在轉送傳遞期間將內部啟動儲存在使用者指定的模組之 GPU 記憶體中。程式庫會在向後傳遞期間重新運算這些啟動項目。此外,透過啟用卸載,它會將儲存的啟用卸載至 CPU 記憶體,並在向後傳遞期間將其擷取回 GPU,以進一步減少啟用記憶體佔用。如需如何使用這些功能的詳細資訊,請參閱 啟用檢查點和 啟用卸載。
為您的模型選擇正確的技術
如需選擇正確技術和組態的詳細資訊,請參閱SageMaker 分散式模型平行處理最佳實務。