トレーニングオペレーターのインストール - Amazon SageMaker AI

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

トレーニングオペレーターのインストール

トレーニングオペレーターをインストールする方法については、以降のセクションを参照してください。

前提条件

HyperPod トレーニングオペレーターを使用する前に、次の前提条件を満たしている必要があります。

トレーニングオペレーターのインストール

HyperPod トレーニングオペレーターは、SageMaker AI コンソール、Amazon EKS コンソール、または AWS CLI コンソールメソッドを使用してインストールできるようになりました。これにより、オペレーターのインストールに役立つシンプルなエクスペリエンスが提供されます。 AWS CLI は、より多くのインストールをカスタマイズできるプログラムによるアプローチを提供します。

2 つのコンソールエクスペリエンスのうち、SageMaker AI はワンクリックインストールを提供し、IAM 実行ロールの作成、ポッド ID の関連付け、オペレーターのインストールを実行します。Amazon EKS コンソールからのインストールは似ていますが、この方法の場合、IAM 実行ロールは自動的には作成されません。このプロセス中に、コンソールが事前入力する情報を使用して新しい IAM 実行ロールを作成することを選択できます。デフォルトでは、作成されたこれらのロールは、オペレーターをインストールしている現在のクラスターにのみアクセスできます。他のクラスターを含めるようにロールの権限を編集しない限り、オペレーターを削除して再インストールする場合は、新しいロールを作成する必要があります。

SageMaker AI console (recommended)
  1. Amazon SageMaker AI コンソール (https://console.aws.amazon.com/sagemaker/) を開きます。

  2. クラスターの詳細ページに移動します。

  3. [ダッシュボード] タブで、[Amazon SageMaker HyperPod トレーニングオペレーター] という名前のアドオンを探して、[インストール] をクリックします。インストールプロセス中、SageMaker AI は AmazonSageMakerHyperPodTrainingOperatorAccess マネージドポリシーと同様のアクセス許可を持つ IAM 実行ロールを作成し、Amazon EKS クラスターと新しい実行ロールの間でポッド ID の関連付けを作成します。

Amazon EKS console
注記

Amazon EKS クラスターを介してアドオンをインストールする場合は、まず HyperPod クラスターに SageMaker:true key-value ペアがタグ付けされていることを確認します。タグ付けしないと、インストールは失敗します。

  1. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソールを開きます。

  2. EKS クラスターに移動し、[アドオン] をクリックしてから、[アドオンをさらに追加] をクリックします。

  3. Amazon SageMaker HyperPod トレーニングオペレーターを選択し、[次へ] をクリックします。

  4. [バージョン] でのコンソールのデフォルトは最新バージョンです。これを使用することをお勧めします。

  5. [アドオンアクセス] で、トレーニングオペレーターアドオンで使用するポッド ID IAM ロールを選択します。まだロールがない場合は、[推奨ロールを作成] を選択してロールを作成します。

  6. このロールの作成プロセス中、IAM コンソールは、ユースケース、AmazonSageMakerHyperPodTrainingOperatorAccess マネージドポリシー、その他の必要なアクセス許可、ロール名、説明など、必要な情報をすべて事前入力します。手順を実行しながら情報を確認し、[ロールを作成] をクリックします。

  7. EKS コンソールで、アドオンの設定を確認してから、[作成] をクリックします。

CLI
  1. HyperPod クラスターの IAM 実行ロールに、EKS Pod Identity がロールを引き受けることを許可する信頼関係があることを確認するか、次の信頼ポリシーを使用して新しい IAM ロールを作成します。または、Amazon EKS コンソールを使用してアドオンをインストールし、推奨ロールを作成することもできます。

    JSON
    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession", "eks-auth:AssumeRoleForPodIdentity" ] } ] }
  2. AmazonSageMakerHyperPodTrainingOperatorAccess マネージドポリシーを作成したロールにアタッチします。

  3. 次に、EKS クラスター、IAM ロール、新しい IAM ロールの間にポッド ID の関連付けを作成します

    aws eks create-pod-identity-association \ --cluster-name my-eks-cluster \ --role-arn ARN of your execution role \ --namespace aws-hyperpod \ --service-account hp-training-operator-controller-manager \ --region AWS リージョン
  4. このプロセスが完了したら、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" }] }
  5. トレーニングオペレーターをインストールするには、create-addon オペレーションを使用します。--addon-version パラメータはオプションです。指定しない場合、最新バージョンがデフォルトです。可能なバージョンを取得するには、DescribeAddonVersions オペレーションを使用します。

    aws eks create-addon \ --cluster-name my-eks-cluster \ --addon-name amazon-sagemaker-hyperpod-training-operator \ --resolve-conflicts OVERWRITE

HyperPod クラスターにトレーニングオペレーターが既にインストールされている場合は、EKS アドオンを必要なバージョンに更新できます。 チェックポイントレストレーニングまたはエラスティックトレーニングを使用する場合は、次の点を考慮してください。

  • チェックポイントレストレーニングとエラスティックトレーニングの両方で、EKS アドオンはバージョン 1.2.0 以降である必要があります。

  • Amazon SageMaker HyperPod トレーニングオペレーターは、任意の EKS アドオンバージョンの下位互換性を維持するので、任意のアドオンバージョンから 1.2.0 以降にアップグレードできます。

  • バージョン 1.2.0 以降から下位バージョンにダウングレードする場合は、まずダウングレード前に既存のジョブを削除し、ダウングレードの完了後にジョブを再送信する必要があります。

Amazon EKS Console
  1. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソールを開きます。

  2. EKS クラスターに移動し、アドオンを選択します。次に、Amazon SageMaker HyperPod トレーニングオペレーターアドオンを選択し、編集を選択します。

  3. バージョンメニューで、必要なアドオンのバージョンを選択し、変更の保存を選択します。

CLI
  1. まず、クラスターでサポートされているバージョンのアドオンのリストを取得します。

    aws eks describe-addon-versions \ --kubernetes-version $(aws eks describe-cluster --name my-eks-cluster --query 'cluster.version' --output text) \ --addon-name amazon-sagemaker-hyperpod-training-operator \ --query 'addons[0].addonVersions[].addonVersion' \ --output table
  2. 次に、アドオンを必要なバージョンに更新します。

    aws eks update-addon \ --cluster-name my-eks-cluster \ --addon-name amazon-sagemaker-hyperpod-training-operator \ --addon-version target-version --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 コントローラーポッドのノードセレクタ デフォルトの動作では、sagemaker.amazonaws.com/compute-type: "HyperPod" ラベルが付けられたノードを選択します。

HyperPod Elastic Agent

HyperPod エラスティックエージェントは、PyTorch の ElasticAgent の拡張機能です。各コンテナのトレーニングワーカーのライフサイクルをオーケストレーションして、HyperPod トレーニングオペレーターと通信します。HyperPod トレーニングオペレーターを使用するには、オペレータを使用してジョブを送信および実行する前に、まず HyperPod Elastic Agent をトレーニングイメージにインストールする必要があります。Elastic Agent をインストールし、hyperpodrun を使用してジョブランチャーを作成する Docker ファイルは、以下のとおりです。

注記

チェックポイントレストレーニングエラスティックトレーニングの両方で、HyperPod エラスティックエージェントバージョン 1.1.0 以降を使用する必要があります。

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 Elastic Agent の引数

HyperPod Elastic Agent は、元の引数をすべてサポートし、いくつかの引数を追加します。以下は、HyperPod Elastic Agent で使用できるすべての引数です。PyTorch の Elastic Agent の詳細については、公式ドキュメントを参照してください。

引数 説明 デフォルト値
--shutdown-signal シャットダウンのためにワーカーに送信するシグナル (SIGTERM または SIGKILL) "SIGKILL"
--shutdown-timeout シャットダウンシグナルと SIGKILL シグナルの間の秒単位のタイムアウト 15
--server-host Agent サーバーのアドレス "0.0.0.0"
--server-port Agent サーバーのポート 8080
--server-log-level Agent サーバーのログレベル "info"
--server-shutdown-timeout 秒単位のサーバーシャットダウンタイムアウト 300
--pre-train-script 事前トレーニングスクリプトへのパス なし
--pre-train-args 事前トレーニングスクリプトの引数 なし
--post-train-script トレーニング後スクリプトへのパス なし
--post-train-args トレーニング後スクリプトの引数 なし
--inprocess-restart inprocess_restart 機能を使用するかどうかを指定するフラグ FALSE
--inprocess-timeout プロセスレベルの再起動をトリガーする前に、エージェントがワーカーが同期障壁に到達するのを待機する秒単位の時間。 なし

タスクガバナンス (オプション)

トレーニングオペレーターは、リソース割り当てを合理化し、Amazon EKS クラスターのチームやプロジェクト全体にわたってコンピューティングリソースを効率的に利用できるように設計された、堅牢な管理システムである HyperPod タスクガバナンスと統合されています。HyperPod タスクガバナンスを設定するには、「SageMaker HyperPod タスクガバナンスのセットアップ」を参照してください。

注記

HyperPod タスクガバナンスアドオンをインストールする場合、バージョン v1.3.0-eksbuild.1 以降を使用する必要があります。

ジョブを送信する際は、キュー名と hyperpod-ns-team-name-localqueuepriority-class-name-priority の優先クラスラベルを必ず含めます。例えば、Kueue を使用している場合、ラベルは次のようになります。

  • 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-name labels: 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 と統合してリソースを割り当て、ジョブをスケジュールすることもできます。HyperPod クラスターに Kueue をインストールするには、次の手順に従います。

  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