SageMaker 分散式資料平行程式庫簡介 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

SageMaker 分散式資料平行程式庫簡介

SageMaker 分散式資料 parallel 處理 (SMDDP) 程式庫是一個集體通訊程式庫,可改善分散式資料平行訓練的運算效能。SMDDP 程式庫提供下列功能,解決主要集體通訊作業的通訊額外負荷。

  1. 該庫提供了AllReduce優化的 AWS. AllReduce是一項關鍵作業,用於在分散式資料訓練期間,在每次訓練反覆運算結束時,跨 GPU 同步漸層。

  2. 該庫提供了AllGather優化的 AWS. AllGather是 PyTorch 分割資料 parallel 訓練中使用的另一個關鍵作業,這是常用程式庫 (SMP) 程式庫、 DeepSpeed 零冗餘最佳化工具 (ZERO) 和完全分割資料平行處理原則 (FSDP) 等熱門程 SageMaker 式庫所提供的記憶體效率資料平行處理技術。

  3. 程式庫 node-to-node 透過充分利用 AWS 網路基礎設施和 Amazon EC2 執行個體拓撲來執行最佳化通訊。

SMDDP 程式庫可在您擴展訓練叢集時提供效能改善,以近乎線性的擴充效率來提高訓練速度。

注意

SageMaker 分散式訓練資料庫可透過訓練平台內的「Hugging Face 部」 PyTorch 和「擁抱臉部」 AWS SageMaker 深度學習容器取得。若要使用這些程式庫,您必須使用 SageMaker Python SDK 或 SageMaker API 透過 SDK for Python (Boto3) 或. AWS Command Line Interface在整份文件中,指示和範例著重於如何搭配 SageMaker Python SDK 使用分散式訓練程式庫。

針對 AWS 計算資源和網路基礎架構最佳化的 SMDDP 集體通訊作業

SMDDP 程式庫提供針對 AWS 運算資源AllReduce和網路基礎結構最佳化的AllGather集體作業實作和集體作業。

SMDDP AllReduce 集體運作

SMDDP 程式庫可透過向後傳遞達到最佳的AllReduce作業重疊,大幅提升 GPU 使用率。它透過最佳化 CPU 和 GPU 之間的核心作業,達到近乎線性的擴充效率和更快的訓練速度。該庫AllReduce在 GPU 計算漸變時 parallel 執行,而不會佔用額外的 GPU 週期,這使得該庫實現更快的培訓。

  • 利用 CPU:該庫使用 CPU 進行AllReduce漸變,從 GPU 卸載此任務。

  • 改善 GPU 使用率:叢集的 GPU 專注於運算漸層,改善整個訓練的使用率。

以下是 SMDDP AllReduce 作業的高階工作流程。

  1. 程式庫指派 GPU 排名 (工作者)。

  2. 在每次反覆運算時,程式庫會將每個全域批次除以工作者總數 (世界大小),並將小批次 (批次碎片) 指派給工作者。

    • 全域批次的大小為 (number of nodes in a cluster) * (number of GPUs per node) * (per batch shard)

    • 批次碎片 (小批次) 是每個 GPU (工作者) 每次反覆運算的已指派資料集子集。

  3. 程式庫會在每個工作者上啟動訓練指令碼。

  4. 程式庫在每次迭代結束時,會管理來自工作者的模型權重和漸層的副本。

  5. 程式庫會同步處理工作者中的模型權重和漸層,以彙總單一訓練的模型。

下列架構圖顯示程式庫如何為 3 個節點的叢集設定資料平行處理的範例。

SMDDP AllReduce 和數據並行性架構圖

SMDDP AllGather 集體運作

AllGather是一項集體作業,其中每個 Worker 都以輸入緩衝區開始,然後將所有其他 Worker 的輸入緩衝區連接或收集到輸出緩衝區。

注意

SMDDP AllGather 集體操作可在 PyTorch v2.0.1 smdistributed-dataparallel>=2.0.1 及更高版本的 AWS Deep Learning Containers (DLC) 中使用。

AllGather大量用於分佈式培訓技術,例如分片數據並行性,其中每個工作人員擁有模型的一小部分或分片層。Worker 在向AllGather前和向後通過之前調用以重建分片圖層。在所有參數聚集之後,向前和向後路徑會繼續前進。在向後傳遞期間,每個 Worker 還會調ReduceScatter用收集(減少)漸變並將其分散(分散)到漸變碎片中,以更新相應的分片圖層。有關這些集體操作在分片數據並行性中的作用的更多詳細信息,請參閱 SMP 庫關於分片數據並行性的實現, DeepSpeed文檔中的 ZERO 以及有關完全分片數據並行性的博客。PyTorch

因為每次迭代都會調用這樣 AllGather 的集體操作,因此它們是 GPU 通信開銷的主要貢獻者。更快地計算這些集體操作直接轉化為更短的訓練時間,對收斂沒有副作用。為了實現這一目標,SMDDP 程式庫提供了AllGather針對 P 4d 執行個體最佳化的功能。

SMDDP AllGather 使用下列技術來改善 P4d 執行個體的運算效能。

  1. 它透過具有網狀拓撲的彈性網狀架構介面卡 (EFA) 網路,在執行個體 (節點間) 之間傳輸資料。EFA 是 AWS 低延遲和高輸送量的網路解決方案。節點間網路通訊的網狀拓撲更適合 EFA 和網 AWS 路基礎架構的特性。與涉及多個封包躍點的 NCCL 環形或樹狀結構拓撲相比,SMDDP 可避免從多個躍點累積延遲,因為它只需要一個躍點。SMDDP 實作網路速率控制演算法,可平衡網狀拓撲中每個通訊對等的工作負載,並達到更高的全球網路輸送量。

  2. 它採用基於 NVIDIA GPUDirect RDMA 技術(GDRCOPY)的低延遲 GPU 內存複製庫,以協調本地 NVLink 和 EFA 網絡流量。由 NVIDIA 提供的低延遲 GPU 記憶體複製程式庫,可在 CPU 處理程序與 GPU CUDA 核心之間提供低延遲的通訊。透過這項技術,SMDDP 程式庫能夠管線節點內部和節點間的資料移動。

  3. 它減少了 GPU 串流多處理器的使用量,以提高執行模型核心的運算能力。P4d 和 P4de 執行個體都配備了 NVIDIA A100 GPU,每個執行個體都有 108 個串流多處理器。雖然 NCCL 最多需要 24 個串流多處理器來執行集體作業,但 SMDDP 使用的串流多處理器少於 9 個。模型計算內核選擇保存的流多處理器以加快計算速度。