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

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

在 Amazon SageMaker HyperPod 任務治理中使用拓撲感知排程

Amazon SageMaker HyperPod 任務治理中的拓撲感知排程會根據 Amazon EC2 執行個體的實體網路拓撲放置 Pod,以最佳化分散式機器學習工作負載的訓練效率。透過考慮AWS基礎設施的階層式結構,包括可用區域、網路區塊和實體機架,拓撲感知排程可確保將需要頻繁通訊的 Pod 排程在接近的位置,以將網路延遲降至最低。這種智慧型配置對於涉及密集 Pod 對 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

  • topology.k8s.aws/ultraserver-id

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

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

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

如果資源未共用相同的拓撲標籤,任務將被暫停。任務將在等待清單中。一旦 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 檔案中使用的新參數。

參數 Description
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 管理主控台和 Amazon SageMaker Studio 中。請遵循下列步驟,在您使用的介面中查看它們。

SageMaker Studio

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

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

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

AWS 管理主控台

  1. 開啟 Amazon SageMaker AI 主控台,網址為 https://console.aws.amazon.com/sagemaker/

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

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

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

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