安裝訓練運算子 - Amazon SageMaker AI

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

安裝訓練運算子

請參閱下列各節,了解如何安裝訓練運算子。

先決條件

在使用 HyperPod 訓練運算子之前,您必須先完成下列先決條件:

安裝 HyperPod 訓練運算子需要您先安裝其他元件。請參閱以下章節,了解如何執行此操作。

步驟 1:設定 Amazon EKS Pod Identity Agent

  1. 請確定 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" ] } ] }
  2. 將下列 IAM 政策連接至新建立的角色。請務必指定 HyperPod 叢集 ARN。

    JSON
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:DescribeClusterNode" ], "Resource": "arn:aws:sagemaker:us-east-1:111122223333:cluster/cluster_name" } ] }
  3. 使用主控台設定 EKS Pod Identity Agent。如果您想要使用 AWS CLI,請使用下列命令。

    aws eks create-addon \ --cluster-name my-eks-cluster \ --addon-name eks-pod-identity-agent \ --region AWS 區域
  4. 然後在 EKS 叢集、IAM 角色和新的 IAM 角色之間建立 Pod 身分關聯

    aws eks create-pod-identity-association \ --cluster-name my-eks-cluster \ --role-arn ARN of your role \ --namespace aws-hyperpod \ --service-account hp-training-operator-controller-manager \ --region AWS 區域
  5. 完成程序後,您可以使用 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 的延伸。它會協調每個容器上訓練工作者的生命週期,並與 HyperPod 訓練運算子通訊。若要使用 HyperPod 訓練運算子,您必須先在訓練映像中安裝 HyperPod 彈性代理程式,才能使用運算子提交和執行任務。以下是安裝彈性代理程式並使用 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 叢集。

  1. 請遵循官方 Kueue 文件中的安裝指南。當您達到設定 的步驟時controller_manager_config.yaml,請新增下列組態:

    externalFrameworks: - "HyperPodPytorchJob.v1.sagemaker.amazonaws.com"
  2. 請遵循官方安裝指南中的其餘步驟。完成安裝 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