本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
安裝訓練運算子
請參閱下列各節,了解如何安裝訓練運算子。
先決條件
在使用 HyperPod 訓練運算子之前,您必須先完成下列先決條件:
-
在您的 HyperPod 叢集上安裝最新的 AMI。如需詳細資訊,請參閱適用於 Amazon EKS 的 SageMaker HyperPod AMI 版本。
-
使用主控台設定 EKS Pod 身分識別代理程式。如果您想要使用 AWS CLI,請使用下列命令:
aws eks create-addon \ --cluster-namemy-eks-cluster\ --addon-name eks-pod-identity-agent \ --regionAWS 區域 -
(選用) 如果您在私有 VPC 中執行 HyperPod 叢集節點,則必須為 Amazon SageMaker AI API (
com.amazonaws.) 和 Amazon EKS Auth 服務 (com.amazonaws.aws-region.sagemaker.apiaws-region.eks-auth) 設定 PrivateLinks VPC 端點。您還必須確保叢集節點執行的子網路位於安全群組中,允許流量透過 VPC 端點路由,以便與 SageMaker AI 和 Amazon EKS 通訊。如果未正確設定這些項目,附加元件安裝可能會失敗。若要進一步了解如何設定 VPC 端點,請參閱建立 VPC 端點。
安裝訓練運算子
您現在可以透過 SageMaker AI 主控台、Amazon EKS 主控台或使用 AWS CLI 安裝 HyperPod 訓練運算子。這些主控台方法提供簡化的體驗,協助您安裝運算子。 AWS CLI 提供程式設計方法,可讓您自訂更多安裝。
在兩個主控台體驗之間,SageMaker AI 提供一鍵式安裝、建立 IAM 執行角色、建立 Pod 身分識別關聯,以及安裝運算子。Amazon EKS 主控台安裝與其類似,但此方法不會自動建立 IAM 執行角色。在此過程中,您可以選擇使用主控台預先填入的資訊建立新的 IAM 執行角色。根據預設,這些建立的角色只能存取您要在其中安裝運算子的目前叢集。除非您編輯角色的許可以包含其他叢集,否則如果您移除並重新安裝運算子,則必須建立新的角色。
如果您已在 HyperPod 叢集上安裝訓練運算子,您可以將 EKS 附加元件更新為您想要的版本。如果您想要使用無檢查點訓練或彈性訓練,請考慮下列事項:
-
無檢查點訓練和彈性訓練都需要 EKS 附加元件在 1.2.0 版或更新版本。
-
Amazon SageMaker HyperPod 訓練運算子會維持任何 EKS 附加元件版本的回溯相容性,因此您可以從任何附加元件版本升級至 1.2.0 或更新版本。
-
如果您從 1.2.0 版或更新版本降級至較低版本,您必須先刪除現有的任務,再進行降級,並在降級完成後重新提交任務。
訓練運算子隨附多個選項,其中包含可能適合您使用案例的預設值。我們建議您在變更訓練運算子之前,先使用預設值來嘗試訓練運算子。下表描述所有參數,以及您可能想要設定每個參數時的範例。
| 參數 | 描述 | 預設 |
|---|---|---|
| hpTrainingControllerManager.manager.resources.requests.cpu | 要為控制器配置多少處理器 | 1 |
| hpTrainingControllerManager.manager.resources.requests.memory | 要配置給控制器多少記憶體 | 2Gi |
| hpTrainingControllerManager.manager.resources.limits.cpu | 控制器的 CPU 限制 | 2 |
| hpTrainingControllerManager.manager.resources.limits.memory | 控制器的記憶體限制 | 4Gi |
| hpTrainingControllerManager.nodeSelector | 控制器 Pod 的節點選擇器 | 預設行為是選取標籤為 sagemaker.amazonaws.com/compute-type: "HyperPod" 的節點 |
HyperPod 彈性代理程式
HyperPod 彈性代理程式是 PyTorch 的 ElasticAgenthyperpodrun 來建立任務啟動器的 docker 檔案。
RUN pip install hyperpod-elastic-agent ENTRYPOINT ["entrypoint.sh"] # entrypoint.sh ... hyperpodrun --nnodes=node_count--nproc-per-node=proc_count\ --rdzv-backend hyperpod \ # Optional --inprocess-restart \ # Optional (in-process fault recovery with checkpointless training) ... # Other torchrun args # pre-traing arg_group --pre-train-script pre.sh --pre-train-args "pre_1 pre_2 pre_3" \ # post-train arg_group --post-train-script post.sh --post-train-args "post_1 post_2 post_3" \training.py--script-args
您現在可以使用 kubectl 提交任務。
HyperPod 彈性代理程式引數
HyperPod 彈性代理程式支援所有原始引數,並新增一些額外的引數。以下是 HyperPod 彈性代理程式中可用的所有引數。如需 PyTorch Elastic 代理程式的詳細資訊,請參閱其官方文件
| 引數 | Description | 預設值 |
|---|---|---|
| --shutdown-signal | 要傳送給工作者進行關機的訊號 (SIGTERM 或 SIGKILL) | "SIGKILL" |
| --shutdown-timeout | 關閉訊號和 SIGKILL 訊號之間的逾時,以秒為單位 | 15 |
| --server-host | 代理程式伺服器位址 | "0.0.0.0" |
| --server-port | 代理程式伺服器連接埠 | 8080 |
| --server-log-level | 代理程式伺服器日誌層級 | "info" |
| --server-shutdown-timeout | 伺服器關機逾時,以秒為單位 | 300 |
| --pre-train-script | 預先訓練指令碼的路徑 | 無 |
| --pre-train-args | 預先訓練指令碼的引數 | 無 |
| --post-train-script | 訓練後指令碼的路徑 | 無 |
| --post-train-args | 訓練後指令碼的引數 | 無 |
| --inprocess-restart | 指定是否使用 inprocess_restart 功能的旗標 | FALSE |
| --inprocess-timeout | 代理程式在觸發程序層級重新啟動之前等待工作者到達同步障礙的時間,以秒為單位。 | 無 |
任務治理 (選用)
訓練運算子已與 HyperPod 任務治理整合,此任務治理是強大的管理系統,旨在簡化資源配置,並確保 Amazon EKS 叢集可跨團隊和專案有效利用運算資源。若要設定 HyperPod 任務治理,請參閱 SageMaker HyperPod 任務治理的設定。
注意
安裝 HyperPod 任務治理附加元件時,您必須使用版本 v1.3.0-eksbuild.1 或更新版本。
提交任務時,請確定您包含 hyperpod-ns- 和 team-name-localqueue 的佇列名稱和優先順序類別標籤。例如,如果您使用的是 Kueue,您的標籤會變成以下內容:priority-class-name-priority
-
kueue.x-k8s.io/queue-name: hyperpod-ns-
team-name-localqueue -
kueue.x-k8s.io/priority-class:
priority-class-name-priority
以下為組態檔案具體形式的範例:
apiVersion: sagemaker.amazonaws.com/v1 kind: HyperPodPytorchJob metadata: name: hp-task-governance-sample namespace: hyperpod-ns-team-namelabels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue kueue.x-k8s.io/priority-class:priority-class-priority spec: nprocPerNode: "1" runPolicy: cleanPodPolicy: "None" replicaSpecs: - name: pods replicas: 4 spares: 2 template: spec: containers: - name: ptjob image: XXXX imagePullPolicy: Always ports: - containerPort: 8080 resources: requests: cpu: "2"
然後使用下列 kubectl 命令來套用 YAML 檔案。
kubectl apply -f task-governance-job.yaml
Kueue (選用)
雖然您可以直接執行任務,但您的組織也可以將訓練運算子與 Kueue 整合,以配置資源和排程任務。請遵循下列步驟,將 Kueue 安裝到您的 HyperPod 叢集。
-
遵循官方 Kueue 文件
中的安裝指南。當您到達設定 controller_manager_config.yaml的步驟時,請新增下列組態:externalFrameworks: - "HyperPodPytorchJob.v1.sagemaker.amazonaws.com" -
遵循官方安裝指南中的其餘步驟。完成安裝 Kueue 後,您可以使用
kubectl apply -f sample-queues.yaml命令建立一些範例佇列。使用下列 YAML 檔案。apiVersion: kueue.x-k8s.io/v1beta1 kind: ClusterQueue metadata: name: cluster-queue spec: namespaceSelector: {} preemption: withinClusterQueue: LowerPriority resourceGroups: - coveredResources: - cpu - nvidia.com/gpu - pods flavors: - name: default-flavor resources: - name: cpu nominalQuota: 16 - name: nvidia.com/gpu nominalQuota: 16 - name: pods nominalQuota: 16 --- apiVersion: kueue.x-k8s.io/v1beta1 kind: LocalQueue metadata: name: user-queue namespace: default spec: clusterQueue: cluster-queue --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ResourceFlavor metadata: name: default-flavor --- apiVersion: kueue.x-k8s.io/v1beta1 description: High priority kind: WorkloadPriorityClass metadata: name: high-priority-class value: 1000 --- apiVersion: kueue.x-k8s.io/v1beta1 description: Low Priority kind: WorkloadPriorityClass metadata: name: low-priority-class value: 500