View a markdown version of this page

在 Amazon SageMaker HyperPod 中使用拓撲感知排程 - Amazon SageMaker AI

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

在 Amazon SageMaker HyperPod 中使用拓撲感知排程

資料傳輸效率是高效能運算 (HPC) 和機器學習工作負載的關鍵因素。搭配 Amazon SageMaker HyperPod 使用 UltraServers 時,SageMaker HyperPod 會自動將拓撲標籤套用至您的資源。拓撲感知排程可協助配置資源,透過同時考慮執行個體拓撲 (執行個體內資源的連線方式) 和網路拓撲 (執行個體彼此的連線方式),以將資料傳輸負荷降至最低。如需執行個體拓撲的詳細資訊,請參閱 Amazon EC2 執行個體拓撲

拓撲感知排程會在 Slurm 和 Amazon EKS 上使用這兩個叢集。如需有關拓撲如何使用 Slurm 的一般資訊,請參閱 Slurm 文件中的拓撲指南

在 Amazon SageMaker HyperPod 中,資料傳輸負荷通常來自三個主要來源:

  • GPU 對 GPU 資料傳輸:NVLink 和 NVLink 交換器等現代技術允許 GPU 之間進行高輸送量資料傳輸,而無需涉及其他運算資源。這極其有效率,但通常僅限於單一執行個體。

  • GPU 對 CPU資料傳輸:非統一記憶體存取 (NUMA) 系統在單一主機板上具有多個系統匯流排。在一般 EC2 執行個體架構中,例如 p5.48xlarge,有兩個不同的系統匯流排,每個都有一個 CPU 和 4 個 GPU。為了獲得最佳效能,將資料載入 GPU 或從 GPU 讀取資料的程序,應該在與 GPU 連線至相同系統匯流排的 CPU 上執行。

  • 執行個體之間的網路通訊:執行個體透過一連串網路交換器傳輸資料。最短路徑通常對應至最低延遲。

UltraServer 架構

SageMaker HyperPod 支援具有 p6e-gb200.36xlarge 執行個體的 UltraServer 架構。一個 UltraServer 包含最多 18 個 p6e-gb200.36xlarge 執行個體,每個執行個體都有 4 個 GPU。所有節點的所有 GPU 都透過 NVLink 交換器互連,無需使用網路介面即可在任兩個 GPU 之間傳輸資料。

相較於個別執行個體,此架構可提供顯著的效能提升。為了有效利用此架構,任務應該從單一 UltraServer 提交至運算節點。

EKS 拓撲標籤

根據 EC2 執行個體拓撲,HyperPod 會自動以下列標籤標記您的節點:

  • topology.kubernetes.io/region - AWS 區域 節點所在的 。

  • topology.kubernetes.io/zone - 節點所在的可用區域。

  • topology.k8s.aws/network-node-layer - NetworkNodes 描述執行個體的網路節點集。在每個網路節點集中,網路節點會依由上至下的階層順序列出。連線至執行個體的網路節點是清單中的最後一個網路節點。最多有四個網路節點層,每個節點都會加上標籤。可用層為 topology.k8s.aws/network-node-layer-1topology.k8s.aws/network-node-layer-2topology.k8s.aws/network-node-layer-3

  • topology.k8s.aws/ultraserver-id - 用來標記屬於 Ultraserver 中相同 NVLink 網域之每個執行個體的識別碼。若要進一步了解如何使用 UltraServers 搭配 SageMaker HyperPod,請參閱在 Amazon SageMaker HyperPod 中使用 UltraServer

您可以使用這些標籤,在 HyperPod 任務治理中使用拓撲感知排程來套用拓撲標籤和註釋,以最佳化工作負載的訓練效率。如需詳細資訊,請參閱在 Amazon SageMaker HyperPod 任務治理中使用拓撲感知排程

Slurm 網路拓撲外掛程式

Slurm 為網路拓撲感知提供內建外掛程式。SageMaker HyperPod 會根據叢集中的執行個體類型,自動選取和設定適當的拓撲外掛程式。

自動拓撲選擇

當您建立 HyperPod Slurm 叢集時,系統會檢查所有執行個體群組及其相關聯的執行個體類型、識別每個執行個體類型的 GPU 通訊特性,並使用適當的拓撲外掛程式設定 Slurm。此程序會自動執行,不需要任何組態。

HyperPod 透過動態產生的topology.conf檔案管理拓撲。隨著叢集隨著擴展操作或節點替換而演進,HyperPod 會持續協調拓撲組態,以反映目前的叢集狀態。如需詳細資訊,請參閱動態拓撲更新

使用拓撲/樹狀目錄外掛程式

topology/tree 外掛程式模型具有多個頻寬層的階層式通訊結構。樹狀拓撲可讓 Slurm 以最小化跨層通訊和最大化地區性的方式放置任務。

樹狀拓撲用於具有階層互連的執行個體類型,其中分散式訓練工作負載受益於地區感知配置。這包括執行個體類型,例如 ml.p5.48xlargeml.p5e.48xlargeml.p5en.48xlarge

當您的叢集使用這些執行個體類型時,SageMaker HyperPod 會自動設定topology/tree外掛程式。產生的 會將節點topology.conf映射至反映硬體通訊層的切換階層。

確保您的 slurm.conf 包含:

TopologyPlugin=topology/tree

Configuration

SageMaker HyperPod 會根據 Amazon EC2 提供的資訊自動設定topology/tree外掛程式。如需 Amazon EC2 拓撲的詳細資訊,請參閱 Amazon EC2 執行個體拓撲

使用topology/tree外掛程式時,Slurm topology.conf看起來如下所示:

SwitchName=nn-6fe9d8a965d34d181 Switches=nn-0b53107754517bf0e SwitchName=nn-0b53107754517bf0e Switches=nn-424c855d4ad825aa4,nn-95acd7c656329fc30 SwitchName=nn-424c855d4ad825aa4 Nodes=ip-10-1-111-198 SwitchName=nn-95acd7c656329fc30 Nodes=ip-10-1-53-231

Usage

設定topology/tree外掛程式時,Slurm 會嘗試配置彼此靠近的機器。您可以將--switch命令列參數傳遞至 sbatch或 ,強制 Slurm 在單一交換器上配置機器srun

sbatch --switch=1 ....

使用拓撲/區塊外掛程式

NVIDIA 開發了一個topology/block外掛程式,可在具有下列特性的節點區塊間提供階層排程:

  • 區塊是節點的連續範圍

  • 區塊不能彼此重疊

  • 在使用下一個區塊之前,區塊中的所有節點都會配置給任務

  • 規劃區塊大小是設定的最小區塊大小

  • 每個較高的區塊層級大小都是前一個區塊層級的二次冪

此外掛程式會根據定義的網路拓撲來配置節點。

封鎖拓撲模型統一、高頻寬的通訊網域,其中所有 GPUs 都參與具有接近均勻延遲的單一高速網域。區塊拓撲會將所有節點視為單一整合通訊單元的一部分。SageMaker HyperPod 中的 UltraServer 架構支援區塊外掛程式。

區塊拓撲用於 ml.p6e-gb200.NVL72和 等執行個體類型ml.p6e-gb300.NVL72

Configuration

SageMaker HyperPod 會自動設定topology/block外掛程式。如果您想要手動設定外掛程式,請在 Slurm 組態目錄中的 topology.conf 檔案中指定下列項目:

BlockName=us1 Nodes=ultraserver1-[0-17] BlockName=us2 Nodes=ultraserver2-[0-17] BlockSizes=18

確保您的 slurm.conf 包含:

TopologyPlugin=topology/block

Usage

提交任務時,您可以使用下列其他引數搭配 sbatchsrun 命令:

  • --segment=N:指定要組成一個群組的節點數量。區段的大小必須小於或等於規劃區塊大小。

  • --exclusive=topo:請求不要在相同的區塊上放置其他任務。這對於基準化和效能敏感的應用程式非常有用。

以下是您在思考配置區塊時可能考慮的範例案例。

在空系統上配置整個節點區塊

sbatch -N18

在空系統上配置兩個節點區塊

sbatch -N36

在一個區塊上配置 18 個節點 + 在另一個區塊上配置 6 個節點

sbatch -N24

在一個區塊上配置 12 個節點,在另一個區塊上配置 12 個節點

sbatch -N24 --segment=12

使用 -- exclusive=topo,任務必須放置在沒有其他任務的區塊上

sbatch -N12 --exclusive=topo

混合執行個體類型的叢集拓撲選擇

HyperPod 目前使用 Slurm 24.11,每個叢集僅支援單一拓撲組態。這表示不支援每個分割區拓撲選擇,多個拓撲模型無法在單一叢集中共存,而且所有節點都必須符合單一拓撲定義。

當您的叢集包含多個執行個體類型時,HyperPod 會選取所有執行個體類型的相容拓撲。下表顯示 HyperPod 如何解決混合執行個體類型之叢集拓撲的範例。

執行個體群組 執行個體類型 偏好的拓撲

IG-1

ml.p5.48xlarge

樹狀結構

IG-2

ml.p6e-gb300.NVL72

區塊

在此範例中,區塊拓撲最適合 ml.p6e-gb300.NVL72,但樹狀拓撲與 ml.p5.48xlarge 和 ml.p6e-gb300.NVL72 相容。HyperPod 會選取樹狀拓撲做為整個叢集的拓撲,以確保所有節點都能正確參與排程,而且不會排除或錯誤陳述任何執行個體類型。

重要

對於拓撲感知排程對效能至關重要的工作負載,我們建議為每個執行個體類型建立單獨的叢集,而不是將不同的執行個體類型合併在單一叢集中。這可確保每個叢集為其硬體使用最佳拓撲,提供最佳的工作負載效能。例如,不要將 ml.p5.48xlarge 和 ml.p6e-gb300.NVL72 執行個體合併為單一叢集,其中樹狀拓撲已選取為相容的入侵,請為每個執行個體類型建立專用叢集,讓每個執行個體都使用其理想的拓撲模型。

停用或變更拓撲外掛程式

建立 Slurm 叢集時,HyperPod 會自動選取最佳拓撲外掛程式。若要手動變更拓撲外掛程式,請在控制器節點上更新 slurm.conf 中的TopologyPlugin值。

範例:

# Set this value to disable topology plugin TopologyPlugin=topology/flat

動態拓撲更新

拓撲感知排程會在叢集變更時持續維持拓撲正確性。拓撲會自動重新計算,並在發生下列任何事件時重新產生topology.conf檔案:

  • 向上擴展:新節點會新增至叢集。

  • 縮減規模:節點會從叢集中移除。

  • 節點取代:取代故障或運作狀態不佳的節點,或使用 BatchReplaceClusterNodes API 手動取代節點。

拓撲更新時,新的節點會併入正確的拓撲結構、移除的節點會被剔除,而且 Slurm 組態也會更新,而不需要手動介入。這可確保拓撲一律反映實際的叢集狀態。

注意

進階使用者可以登入 Slurm 控制器節點並手動修改 slurm.conf和 來覆寫拓撲行為topology.conf。不過,HyperPod 可能會在後續叢集更新期間覆寫手動變更,包括擴展操作、節點取代和其他叢集生命週期事件。如果您手動修改這些檔案,請在任何叢集更新後驗證您的變更。

UltraServer 拓撲的最佳實務

為了在 SageMaker HyperPod 中使用 UltraServer 架構獲得最佳效能:

  • 設定適當的區塊大小:設定 BlockSizes=18 (或如果一個節點是備用節點,則為 17) 以符合 UltraServer 架構。

  • 使用區段以獲得更好的可用性:使用 --segment=16--segment=8--segment=9 搭配 srunsbatch 命令來改善任務排程彈性。

  • 考慮任務大小和區段大小

    • 如果 BlockSizes=18,具有最多 18 個執行個體的任務一律會在單一 UltraServer 上執行。

    • 如果 BlockSizes=16,具有少於 16 個執行個體的任務一律會在單一 UltraServer 上執行,而具有 18 個執行個體的任務可能會在一或兩個 UltraServer 上執行。

思考分段時,請考慮下列事項

  • 使用 --segment=1,每個執行個體都可以在個別的 UltraServer 上執行。

  • 使用 -N 18 --segment 9 時,一個 UltraServer 將放置 9 個節點,而另外 9 個節點可以放置到相同或另一個 UltraServer。

  • 使用 -N 24 --segment 8,任務可以在 2 或 3 個 UltraServer 上執行,其中每 8 個節點都會放在同一部伺服器上。

SageMaker HyperPod 拓撲感知排程中的限制

topology/block 外掛程式對異質叢集 (具有不同執行個體類型的叢集) 有限制:

  • 只有區塊中列出的節點可由 Slurm 排程

  • 每個區塊必須至少具有 BlockSizes[0] 個節點

對於異質叢集,請考慮以下替代方案:

  • 請勿將使用區塊外掛程式搭配異質叢集。反之,請在不同的分割區中隔離 UltraServer 節點。

  • 僅在相同的 VPC 中使用 UltraServer 建立個別叢集,並使用 Slurm 的多叢集設定。