本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
SageMaker AI 分散式資料平行處理 (SMDDP) 程式庫是一個集體通訊程式庫,可改善分散式資料平行訓練的運算效能。SMDDP 程式庫透過提供下列項目來解決金鑰集體通訊操作的通訊開銷。
-
程式庫提供
AllReduce
最佳化 AWS。AllReduce
是一種金鑰操作,用於在分散式資料訓練期間,在每次訓練反覆運算結束時同步跨 GPUs 的漸層。 -
程式庫提供針對
AllGather
最佳化 AWS。AllGather
是碎片資料平行訓練中使用的另一個金鑰操作,這是一種記憶體效率的資料平行處理技術,由 SageMaker AI 模型平行處理 (SMP) 程式庫、DeepSpeed 零冗餘最佳化工具 (ZeRO) 和 PyTorch 全碎片資料平行處理 (FSDP) 等常用程式庫提供。 -
程式庫會透過充分利用 AWS 網路基礎設施和 Amazon EC2 執行個體拓撲來執行最佳化node-to-node通訊。
SMDDP 程式庫可以透過近線性擴展效率,在擴展訓練叢集時提供效能提升,來提高訓練速度。
注意
SageMaker AI 分散式訓練程式庫可透過 SageMaker Training 平台中 PyTorch 和 Hugging Face 的 AWS 深度學習容器取得。若要使用這些程式庫,您必須透過適用於 Python 的 SDK (Boto3) 或 AWS Command Line Interface使用 SageMaker Python SDK 或 SageMaker API。整個文件中,指示和範例著重於如何將分散式訓練程式庫與SageMaker Python SDK 搭配使用。
針對 AWS 運算資源和網路基礎設施最佳化的 SMDDP 集體通訊操作
SMDDP 程式庫提供針對 AWS 運算資源AllReduce
和網路基礎設施最佳化的 和 AllGather
集體操作實作。
SMDDP AllReduce
集體操作
SMDDP 程式庫可透過向後傳遞實現AllReduce
操作的最佳重疊,大幅改善 GPU 使用率。它透過最佳化 CPUs 和 GPUs 之間的核心操作,達到近線擴展效率和更快的訓練速度。程式庫AllReduce
在 GPU 運算漸層時平行執行,而不會佔用額外的 GPU 週期,讓程式庫能夠更快地完成訓練。
-
利用 CPUs:程式庫使用 CPUs 進行
AllReduce
漸層,從 GPUs 卸載此任務。 -
改善 GPU 使用率:叢集的 GPU 專注於運算漸層,改善整個訓練的使用率。
以下是 SMDDP AllReduce
操作的高階工作流程。
-
程式庫指派 GPU 排名 (工作者)。
-
在每次反覆運算時,程式庫會將每個全域批次除以工作者總數 (世界大小),並將小批次 (批次碎片) 指派給工作者。
-
全域批次的大小為
(number of nodes in a cluster) * (number of GPUs per node) * (per batch shard)
。 -
批次碎片 (小批次) 是每個 GPU (工作者) 每次反覆運算的已指派資料集子集。
-
-
程式庫會在每個工作者上啟動訓練指令碼。
-
程式庫在每次迭代結束時,會管理來自工作者的模型權重和漸層的副本。
-
程式庫會同步處理工作者中的模型權重和漸層,以彙總單一訓練的模型。
下列架構圖顯示程式庫如何為 3 個節點的叢集設定資料平行處理的範例。

SMDDP AllGather
集體操作
AllGather
是一種集體操作,其中每個工作者都從輸入緩衝區開始,然後將所有其他工作者的輸入緩衝區串連或收集到輸出緩衝區。
注意
SMDDP AllGather
集體操作可在適用於 PyTorch v2.0.1 和更新版本的 smdistributed-dataparallel>=2.0.1
和 AWS 深度學習容器 (DLC) 中使用。
AllGather
大量用於分散式訓練技術,例如碎片資料平行處理,其中每個個別工作者都擁有一部分的模型或碎片層。工作者會在向前和向後傳遞AllGather
之前呼叫 ,以重建碎片圖層。向前和向後傳遞會在所有參數都收集完畢後繼續。在向後通過期間,每個工作者也會呼叫 ReduceScatter
來收集 (減少) 漸層,並將它們分解 (分散) 為漸層碎片,以更新對應的碎片層。如需這些集合操作在碎片資料平行處理中角色的詳細資訊,請參閱 DeepSpeed 文件中的 SMP 程式庫在碎片資料平行處理上的實作、ZeRO
由於 AllGather 等集體操作在每次反覆運算時都會呼叫,因此它們是 GPU 通訊開銷的主要貢獻者。這些集體操作的更快速運算會直接轉換為較短的訓練時間,而不會對收斂造成副作用。為了達成此目的,SMDDP 程式庫提供針對 P4d 執行個體AllGather
最佳化的功能。
SMDDP AllGather
使用下列技術來改善 P4d 執行個體的運算效能。
-
它透過具有網格拓撲的 Elastic Fabric Adapter (EFA)
網路,在執行個體 (節點間) 之間傳輸資料。EFA 是 AWS 低延遲和高輸送量的網路解決方案。節點間網路通訊的網格拓撲,更符合 EFA 和 AWS 網路基礎設施的特性。與涉及多個封包跳轉的 NCCL 環形或樹狀拓撲相比,SMDDP 可避免從多個跳轉累積延遲,因為它只需要一個跳轉。SMDDP 實作網路速率控制演算法,在網格拓撲中平衡工作負載與每個通訊對等,並實現更高的全球網路輸送量。 -
它採用以 NVIDIA GPUDirect RDMA 技術 (GDRCopy) 為基礎的低延遲 GPU 記憶體複製程式庫
,來協調本機 NVLink 和 EFA 網路流量。GDRCopy 是由 NVIDIA 提供的低延遲 GPU 記憶體複製程式庫,可在 CPU 程序與 GPU CUDA 核心之間提供低延遲通訊。使用此技術,SMDDP 程式庫能夠管道節點內和節點間資料移動。 -
它減少了 GPU 串流多處理器的使用,以增加執行模型核心的運算能力。P4d 和 P4de 執行個體配備 NVIDIA A100 GPUs,每個 GPU 都有 108 個串流多處理器。雖然 NCCL 最多需要 24 個串流多處理器來執行集體操作,但 SMDDP 會使用少於 9 個串流多處理器。模型運算核心會取得儲存的串流多處理器,以加快運算速度。