本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
安裝訓練運算子
請參閱下列各節,了解如何安裝訓練運算子。
先決條件
在使用 HyperPod 訓練運算子之前,您必須先完成下列先決條件:
-
在 HyperPod 叢集上安裝最新的 AMI。如需詳細資訊,請參閱Amazon EKS 的 SageMaker HyperPod AMI 版本
安裝 HyperPod 訓練運算子需要您先安裝其他元件。請參閱以下章節,了解如何執行此操作。
步驟 1:設定 Amazon EKS Pod Identity Agent
-
請確定 HyperPod 叢集的 IAM 執行角色具有 eks-auth:AssumeRoleForPodIdentity 許可,或建立具有下列許可的新 IAM 角色,以搭配訓練運算子使用。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
-
將下列 IAM 政策連接至新建立的角色。請務必指定 HyperPod 叢集 ARN。
-
使用主控台設定 EKS Pod Identity Agent。如果您想要使用 AWS CLI,請使用下列命令。
aws eks create-addon \ --cluster-name
my-eks-cluster
\ --addon-name eks-pod-identity-agent \ --regionAWS 區域
-
然後在 EKS 叢集、IAM 角色和新的 IAM 角色之間建立 Pod 身分關聯。
aws eks create-pod-identity-association \ --cluster-name
my-eks-cluster
\ --role-arnARN of your role
\ --namespace aws-hyperpod \ --service-account hp-training-operator-controller-manager \ --regionAWS 區域
-
完成程序後,您可以使用 ListPodIdentityAssociations 操作來查看您建立的關聯。以下是其可能樣貌的範例回應。
aws eks list-pod-identity-associations --cluster-name my-eks-cluster { "associations": [{ "clusterName": "
my-eks-cluster
", "namespace": "aws-hyperpod", "serviceAccount": "hp-training-operator-controller-manager", "associationArn": "arn:aws:eks:us-east-2:123456789012:podidentityassociation/my-hyperpod-cluster/a-1a2b3c4d5e6f7g8h9", "associationId": "a-1a2b3c4d5e6f7g8h9
" }] }
步驟 2:安裝 HyperPod 訓練運算子
您現在可以透過 Amazon EKS 主控台或使用 CreateAddOn API 操作安裝 HyperPod 訓練運算子。如果您使用的是 主控台,請搜尋名為 Amazon SageMaker HyperPod 訓練運算子的附加元件。
以下是如何使用 API 和 CLI 安裝 運算子的範例。--addon-version
為選用參數。如果您不提供,則預設為最新版本。若要取得可能的版本,請使用 DescribeAddonVersions 操作。
注意
訓練運算子不支援 Amazon SageMaker HyperPod 任務控管。
aws eks create-addon \ --cluster-name my-eks-cluster \ --addon-name amazon-sagemaker-hyperpod-training-operator \ --resolve-conflicts OVERWRITE
訓練運算子隨附多個選項,其中包含可能適合您使用案例的預設值。建議您在變更訓練運算子之前,先嘗試使用預設值來嘗試訓練運算子。下表說明您可能想要設定每個參數的所有參數和範例。
參數 | 描述 | 預設 |
---|---|---|
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" |
步驟 3:安裝 HyperPod 彈性代理程式
HyperPod 彈性代理程式是 PyTorch ElasticAgent hyperpodrun
來建立任務啟動器的 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 ... # 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 Agent 的詳細資訊,請參閱其官方文件
引數 | 描述 | 預設值 |
---|---|---|
--shutdown-signal | 要傳送給工作者進行關機的訊號 (SIGTERM 或 SIGKILL) | "SIGKILL" |
--shutdown-timeout | SIGTERM 和 SIGKILL 訊號之間的逾時,以秒為單位 | 30 |
--server-host | 客服人員伺服器地址 | "0.0.0.0" |
--server-port | 客服人員伺服器連接埠 | 8080 |
--server-log-level | 客服人員伺服器日誌層級 | 「資訊」 |
--server-shutdown-timeout | 伺服器關閉逾時,以秒為單位 | 300 |
--pre-train-script | 預先訓練指令碼的路徑 | 無 |
--pre-train-args | 預先訓練指令碼的引數 | 無 |
--post-train-script | 訓練後指令碼的路徑 | 無 |
--post-train-args | 訓練後指令碼的引數 | 無 |
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