本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 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-1
、topology.k8s.aws/network-node-layer-2
、topology.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
用量
提交任務時,您可以搭配 sbatch
和 srun
命令使用下列其他引數:
--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
搭配srun
和sbatch
命令來改善任務排程彈性。 -
考慮任務大小和客群大小:
如果
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 的多叢集設定。