本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 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- 。 |
kueue.x-k8s.io/priority-class | 可讓您指定 Pod 排程的優先順序。此規格為選用。 |
註釋 | 包含您連接至任務的拓撲註釋。可用的拓撲為 kueue.x-k8s.io/podset-required-topology 和 kueue.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
-
在 SageMaker Studio 中,導覽至您的叢集。
-
在任務檢視中,選擇名稱欄中的選項選單,然後選擇管理資料欄。
-
選取請求的拓撲和拓撲限制條件來新增資料欄,以查看 Kubernetes Pod 清單中的拓撲資訊。
AWS Management Console
-
在 https://https://console.aws.amazon.com/sagemaker/
開啟 Amazon SageMaker AI 主控台。 -
在 HyperPod 叢集下,選擇叢集管理。
-
選擇任務索引標籤,然後選擇齒輪圖示。
-
在執行個體屬性下,切換請求的拓撲和拓撲限制。
-
選擇確認以查看資料表中的拓撲資訊。