在 Amazon SageMaker HyperPod 任務控管中使用拓撲感知排程 - Amazon SageMaker AI

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

在 Amazon SageMaker HyperPod 任務控管中使用拓撲感知排程

Amazon SageMaker HyperPod 任務控管中的拓撲感知排程會根據 Amazon EC2 執行個體的實體網路拓撲放置 Pod,以最佳化分散式機器學習工作負載的訓練效率。透過考慮 AWS 基礎設施的階層結構,包括可用區域、網路區塊和實體機架,拓撲感知排程可確保將需要頻繁通訊的 Pod 排程在接近於 的位置,以將網路延遲降至最低。這種智慧型配置特別適用於涉及密集pod-to-pod 通訊的大型機器學習訓練任務,從而減少訓練時間,並提高叢集的資源使用率。

注意

若要使用拓撲感知排程,請確定您的 HyperPod 任務控管版本為 v1.2.2-eksbuild.1 或更高版本。

拓撲感知排程支援下列執行個體類型:

  • ml.p3dn.24xlarge

  • ml.p4d.24xlarge

  • mlp4d.24xlarge

  • ml.p5.48xlarge

  • ml.p5e.48xlarge

  • ml.p5en.48xlarge

  • ml.p6e-gb200.36xlarge

  • ml.trn1.2xlarge

  • ml.trn1.32xlarge

  • ml.trn1n.32xlarge

  • ml.trn2.48xlarge

  • ml.trn2u.48xlarge

拓撲感知排程會與您現有的 HyperPod 工作流程整合,同時透過 kubectl YAML 檔案和 HyperPod CLI 提供靈活的拓撲偏好設定。HyperPod 任務控管會自動使用拓撲標籤設定叢集節點,並使用 HyperPod 任務控管政策和資源借用機制,確保拓撲感知排程不會中斷您目前的操作程序。透過對偏好和必要拓撲規格的內建支援,您可以微調工作負載置放,以符合您的特定效能需求,同時在無法滿足拓撲限制時,保持回到標準排程的彈性。

透過在 HyperPod 中利用拓撲感知標籤,您可以透過考慮實體網路基礎設施的智慧型 Pod 置放來增強其機器學習工作負載。HyperPod 任務控管會根據階層式資料中心拓撲自動最佳化 Pod 排程,這會直接轉譯為減少網路延遲並改善分散式 ML 任務的訓練效能。這種拓撲感知對於大規模機器學習工作負載特別重要,因為它透過策略將相關的 Pod 放在網路階層中更接近的位置,將通訊開銷降至最低。結果是 Pod 之間的最佳化通訊網路延遲、更有效率的資源使用率,以及運算密集型 AI/ML 應用程式的整體效能,全都達成,而不需要手動管理複雜的網路拓撲組態。

以下是 HyperPod 任務控管可在其中排程 Pod 之可用拓撲網路層的標籤:

  • topology.k8s.aws/network-node-layer-1

  • topology.k8s.aws/network-node-layer-2

  • topology.k8s.aws/network-node-layer-3

若要使用拓撲感知排程,請在 YAML 檔案中包含下列標籤:

  • kueue.x-k8s.io/podset-required-topology - 表示此任務必須具有所需的 Pod,且節點中的所有 Pod 必須排程在相同的拓撲層中。

  • kueue.x-k8s.io/podset-preferred-topology - 表示此任務必須具有 Pod,但最好在相同的拓撲層中排程 Pod,但並非必要。HyperPod 任務控管會先嘗試在一個 layer 內排程 Pod,然後再嘗試下一個拓撲 layer。

如果資源未共用相同的拓撲標籤,任務將被暫停。任務將在等待清單中。一旦 Kueue 看到有足夠的資源,就會認可並執行任務。

下列範例示範如何在 YAML 檔案中使用標籤:

apiVersion: batch/v1 kind: Job metadata: name: test-tas-job namespace: hyperpod-ns-team-name labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue kueue.x-k8s.io/priority-class: PRIORITY_CLASS-priority spec: parallelism: 10 completions: 10 suspend: true template: metadata: labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue annotations: kueue.x-k8s.io/podset-required-topology: "topology.k8s.aws/network-node-layer-3" or kueue.x-k8s.io/podset-preferred-topology: "topology.k8s.aws/network-node-layer-3" spec: nodeSelector: topology.k8s.aws/network-node-layer-3: TOPOLOGY_LABEL_VALUE containers: - name: dummy-job image: gcr.io/k8s-staging-perf-tests/sleep:v0.1.0 args: ["3600s"] resources: requests: cpu: "100" restartPolicy: Never

下表說明您可以在 kubectl YAML 檔案中使用的新參數。

參數 描述
kueue.x-k8s.io/queue-name 用來執行任務的佇列名稱。此 queue-name 的格式必須為 hyperpod-ns-team-name-localqueue
kueue.x-k8s.io/priority-class 可讓您指定 Pod 排程的優先順序。此規格為選用。
註釋 包含您連接至任務的拓撲註釋。可用的拓撲為 kueue.x-k8s.io/podset-required-topologykueue.x-k8s.io/podset-preferred-topology。您可以使用註釋或 nodeSelector,但不能同時使用兩者。
nodeSelector 指定代表 Amazon EC2 執行個體置放層的網路層。使用此欄位或 註釋,但不能同時使用兩者。在 YAML 檔案中,您也可以使用 nodeSelector 參數來選擇 Pod 的確切層。若要取得標籤的值,請使用 DescribeInstanceTopology API 操作。

您也可以使用 HyperPod CLI 來執行任務,並使用拓撲感知排程。如需 HyperPod CLI 的詳細資訊,請參閱 SageMaker HyperPod CLI 命令

hyp create hyp-pytorch-job \ --version 1.1 \ --job-name sample-pytorch-job \ --image 123456789012.dkr.ecr.us-west-2.amazonaws.com/ptjob:latest \ --pull-policy "Always" \ --tasks-per-node 1 \ --max-retry 1 \ --priority high-priority \ --namespace hyperpod-ns-team-name \ --queue-name hyperpod-ns-team-name-localqueue \ --preferred-topology-label topology.k8s.aws/network-node-layer-1

以下是範例組態檔案,您可以用來執行具有拓撲標籤的 PytorchJob。如果您想要執行 MPI 和 Tensorflow 任務, 檔案在很大程度上類似。如果您想要改為執行這些任務,請記得相應地變更組態檔案,例如使用正確的映像而非 PyTorchJob。如果您正在執行 PyTorchJob,您可以將不同的拓撲指派給主節點和工作者節點。PyTorchJob 一律有一個主節點,因此我們建議您改用拓撲來支援工作者 Pod。

apiVersion: kubeflow.org/v1 kind: PyTorchJob metadata: annotations: {} labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue name: tas-test-pytorch-job namespace: hyperpod-ns-team-name spec: pytorchReplicaSpecs: Master: replicas: 1 restartPolicy: OnFailure template: metadata: labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue spec: containers: - command: - python3 - /opt/pytorch-mnist/mnist.py - --epochs=1 image: docker.io/kubeflowkatib/pytorch-mnist:v1beta1-45c5727 imagePullPolicy: Always name: pytorch Worker: replicas: 10 restartPolicy: OnFailure template: metadata: # annotations: # kueue.x-k8s.io/podset-required-topology: "topology.k8s.aws/network-node-layer-3" labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue spec: containers: - command: - python3 - /opt/pytorch-mnist/mnist.py - --epochs=1 image: docker.io/kubeflowkatib/pytorch-mnist:v1beta1-45c5727 imagePullPolicy: Always name: pytorch resources: limits: cpu: 1 requests: memory: 200Mi cpu: 1 #nodeSelector: # topology.k8s.aws/network-node-layer-3: xxxxxxxxxxx

若要查看叢集的拓撲,請使用 DescribeInstanceTopology API 操作。根據預設,拓撲會隱藏在 AWS Management Console 和 Amazon SageMaker Studio 中。請依照下列步驟,在您正在使用的界面中查看它們。

SageMaker Studio

  1. 在 SageMaker Studio 中,導覽至您的叢集。

  2. 在任務檢視中,選擇名稱欄中的選項選單,然後選擇管理資料欄

  3. 選取請求的拓撲拓撲限制條件來新增資料欄,以查看 Kubernetes Pod 清單中的拓撲資訊。

AWS Management Console

  1. 在 https://https://console.aws.amazon.com/sagemaker/ 開啟 Amazon SageMaker AI 主控台。

  2. HyperPod 叢集下,選擇叢集管理

  3. 選擇任務索引標籤,然後選擇齒輪圖示。

  4. 在執行個體屬性下,切換請求的拓撲拓撲限制。

  5. 選擇確認以查看資料表中的拓撲資訊。