

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

# 在 Amazon SageMaker HyperPod 中使用拓撲感知排程
<a name="sagemaker-hyperpod-topology"></a>

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

拓撲感知排程會在 Slurm 和 Amazon EKS 上使用這兩個叢集。如需有關拓撲如何使用 Slurm 的一般資訊，請參閱 [Slurm 文件中的拓撲指南](https://slurm.schedmd.com/topology.html)。

在 Amazon SageMaker HyperPod 中，資料傳輸負荷通常來自三個主要來源：
+ **GPU 對 GPU 資料傳輸**：NVLink 和 NVLink 交換器等現代技術允許 GPU 之間進行高輸送量資料傳輸，而無需涉及其他運算資源。這極其有效率，但通常僅限於單一執行個體。
+ **GPU 對 CPU資料傳輸**：非統一記憶體存取 (NUMA) 系統在單一主機板上具有多個系統匯流排。在一般 EC2 執行個體架構中，例如 p5.48xlarge，有兩個不同的系統匯流排，每個都有一個 CPU 和 4 個 GPU。為了獲得最佳效能，將資料載入 GPU 或從 GPU 讀取資料的程序，應該在與 GPU 連線至相同系統匯流排的 CPU 上執行。
+ **執行個體之間的網路通訊**：執行個體透過一連串網路交換器傳輸資料。最短路徑通常對應至最低延遲。

## UltraServer 架構
<a name="sagemaker-hyperpod-topology-ultraserver-architecture"></a>

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

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

## EKS 拓撲標籤
<a name="sagemaker-hyperpod-topology-eks-scheduling"></a>

根據 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 網域之每個執行個體的識別碼。若要進一步了解如何使用 UltraServers 搭配 SageMaker HyperPod，請參閱[在 Amazon SageMaker HyperPod 中使用 UltraServer](sagemaker-hyperpod-ultraserver.md)。

您可以使用這些標籤，在 HyperPod 任務治理中使用拓撲感知排程來套用拓撲標籤和註釋，以最佳化工作負載的訓練效率。如需詳細資訊，請參閱[在 Amazon SageMaker HyperPod 任務治理中使用拓撲感知排程](sagemaker-hyperpod-eks-operate-console-ui-governance-tasks-scheduling.md)。

## Slurm 網路拓撲外掛程式
<a name="sagemaker-hyperpod-topology-slurm-plugins"></a>

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

### 使用拓撲/區塊外掛程式
<a name="w2aac13c35c39c15b5"></a>

NVIDIA 開發了拓撲/區塊外掛程式，可在具有下列特性的節點區塊間提供階層排程：
+ 區塊是節點的連續範圍
+ 區塊不能彼此重疊
+ 在使用下一個區塊之前，區塊中的所有節點都會配置給任務
+ 規劃區塊大小是設定的最小區塊大小
+ 每個較高的區塊層級大小都是前一個區塊層級的二次冪

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

#### Configuration
<a name="w2aac13c35c39c15b5b9"></a>

若要使用拓撲/區塊外掛程式設定拓撲感知排程，
+ SageMaker HyperPod 會自動設定拓撲/區塊外掛程式。如果您想要設定外掛程式，請在 Slurm 組態目錄中的 topology.conf 檔案中指定下列項目：

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

  ```
  TopologyPlugin=topology/block
  ```

#### Usage
<a name="w2aac13c35c39c15b5c11"></a>

提交任務時，您可以使用下列其他引數搭配 `sbatch` 和 `srun` 命令：
+ `--segment=N`：指定要組成一個群組的節點數量。區段的大小必須小於或等於規劃區塊大小。
+ `--exclusive=topo`：請求不要在相同的區塊上放置其他任務。這對於基準化和效能敏感的應用程式非常有用。

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

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

```
sbatch -N18
```

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

```
sbatch -N36
```

**在一個區塊上配置 18 個節點 \$1 在另一個區塊上配置 6 個節點**

```
sbatch -N24
```

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

```
sbatch -N24 —segment=12
```

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

```
sbatch -N12 —exclusive=topo
```

## UltraServer 拓撲的最佳實務
<a name="sagemaker-hyperpod-topology-best-practices"></a>

為了在 SageMaker HyperPod 中使用 UltraServer 架構獲得最佳效能：
+ **設定適當的區塊大小**：設定 `BlockSizes=18` (或如果一個節點是備用節點，則為 17) 以符合 UltraServer 架構。
+ **使用區段以獲得更好的可用性**：使用 `--segment=16`、`--segment=8` 或 `--segment=9` 搭配 `srun` 和 `sbatch` 命令來改善任務排程彈性。
+ **考慮任務大小和區段大小**：
  + 如果 `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 拓撲感知排程中的限制
<a name="sagemaker-hyperpod-topology-limitations"></a>

`topology/block` 外掛程式對異質叢集 (具有不同執行個體類型的叢集) 有限制：
+ 只有區塊中列出的節點可由 Slurm 排程
+ 每個區塊必須至少具有 `BlockSizes[0]` 個節點

對於異質叢集，請考慮以下替代方案：
+ 請勿將使用區塊外掛程式搭配異質叢集。反之，請在不同的分割區中隔離 UltraServer 節點。
+ 僅在相同的 VPC 中使用 UltraServer 建立個別叢集，並使用 Slurm 的多叢集設定。