在 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-to-GPU資料傳輸:NVLink 和 NVLink 交換器等現代技術允許 GPUs 之間的高輸送量資料傳輸,而不需要其他運算資源。這非常有效率,但通常僅限於單一執行個體。

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

  • 執行個體之間的網路通訊:執行個體會透過網路切換鏈傳輸資料。最短路徑通常對應到最低延遲。

UltraServer 架構

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

相較於個別執行個體,此架構可提供顯著的效能提升。為了有效利用此架構,任務應提交至單一 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 網域之每個執行個體的識別符。若要進一步了解如何搭配 SageMaker HyperPod 使用 UltraServers,請參閱 在 Amazon SageMaker HyperPod 中使用 UltraServers

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

Slurm 網路拓撲外掛程式

Slurm 為網路拓撲感知提供內建外掛程式。SageMaker HyperPod 中的 UltraServer 架構支援 區塊外掛程式。 SageMaker

使用拓撲/區塊外掛程式

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

  • 區塊是節點的連續範圍

  • 區塊不能彼此重疊

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

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

  • 每個較高的區塊層級大小都是比前一個區塊層級高出兩個

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

組態

若要使用拓撲/區塊外掛程式設定拓撲感知排程,

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

    BlockName=us1 Nodes=ultraserver1-[0-17] BlockName=us2 Nodes=ultraserver2-[0-17] BlockSizes=18
  • 確保您的 slurm.conf包含:

    TopologyPlugin=topology/block

用量

提交任務時,您可以搭配 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

UltraServer 拓撲的最佳實務

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

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

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

  • 考慮任務大小和客群大小

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

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

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

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

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

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

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

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

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

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

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

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

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