

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

# トレーニングオペレーターのインストール
<a name="sagemaker-eks-operator-install"></a>

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

## 前提条件
<a name="sagemaker-eks-operator-prerequisites"></a>

 HyperPod トレーニングオペレーターを使用する前に、次の前提条件を満たしている必要があります。
+  [Amazon EKS オーケストレーションを使用した HyperPod クラスターを作成する](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-operate-console-ui-create-cluster.html)。
+ HyperPod クラスターに最新の AMI をインストール済み。詳細については、「[Amazon EKS 向け SageMaker HyperPod AMI リリース](sagemaker-hyperpod-release-ami-eks.md)」を参照してください。
+ [cert-manager をインストール済み](https://cert-manager.io/docs/installation/)。
+  [コンソールを使用して EKS Pod Identity Agent を設定済み](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html)。を使用する場合は AWS CLI、次のコマンドを使用します。

  ```
  aws eks create-addon \ 
   --cluster-name {{my-eks-cluster}} \
   --addon-name eks-pod-identity-agent \
   --region {{AWS リージョン}}
  ```
+ (オプション) HyperPod クラスターノードをプライベート VPC で実行する場合は、Amazon SageMaker AI API (`com.amazonaws.{{aws-region}}.sagemaker.api`) および Amazon EKS Auth サービス (com.amazonaws.{{aws-region}}.eks-auth) の PrivateLinks VPC エンドポイントを設定する必要があります。また、クラスターノードが、トラフィックが VPC エンドポイントをルーティングして SageMaker AI および Amazon EKS と通信できるようにするセキュリティグループ内のサブネットで実行されていることを確認する必要があります。これらが正しく設定されていない場合、アドオンのインストールが失敗する可能性があります。VPC エンドポイントの設定の詳細については、[「VPC エンドポイントの作成](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)」を参照してください。

## トレーニングオペレーターのインストール
<a name="sagemaker-eks-operator-install-operator"></a>

 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/](https://console.aws.amazon.com/sagemaker/)) を開きます。

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

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

------
#### [ Amazon EKS console ]

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

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

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

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

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

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

1. このロールの作成プロセス中、IAM コンソールは、ユースケース、[AmazonSageMakerHyperPodTrainingOperatorAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerHyperPodTrainingOperatorAccess.html) マネージドポリシー、その他の必要なアクセス許可、ロール名、説明など、必要な情報をすべて事前入力します。手順を実行しながら情報を確認し、**[ロールを作成]** をクリックします。

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

------
#### [ CLI ]

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

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "AllowEksAuthToAssumeRoleForPodIdentity",
         "Effect": "Allow",
         "Principal": {
           "Service": "pods.eks.amazonaws.com"
         },
         "Action": [
           "sts:AssumeRole",
           "sts:TagSession",
           "eks-auth:AssumeRoleForPodIdentity"
         ]
       }
     ]
   }
   ```

------

1.  [AmazonSageMakerHyperPodTrainingOperatorAccess マネージドポリシー](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerHyperPodTrainingOperatorAccess.html)を作成したロールにアタッチします。

1.  [次に、EKS クラスター、IAM ロール、新しい IAM ロールの間にポッド ID の関連付けを作成します](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)。

   ```
   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 リージョン}}
   ```

1.  このプロセスが完了したら、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}}"
       }]
   }
   ```

1. トレーニングオペレーターをインストールするには、`create-addon` オペレーションを使用します。`--addon-version` パラメータはオプションです。指定しない場合、最新バージョンがデフォルトです。可能なバージョンを取得するには、[DescribeAddonVersions](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html) オペレーションを使用します。

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

------

HyperPod クラスターにトレーニングオペレーターが既にインストールされている場合は、EKS アドオンを必要なバージョンに更新できます。[ チェックポイントレストレーニング](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless.html)または[エラスティックトレーニング](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-elastic-training.html)を使用する場合は、次の点を考慮してください。
+ チェックポイントレストレーニングとエラスティックトレーニングの両方で、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](https://console.aws.amazon.com/eks/home#/clusters) で Amazon EKS コンソールを開きます。

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

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

------
#### [ 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
   ```

1. 次に、アドオンを必要なバージョンに更新します。

   ```
   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
<a name="sagemaker-eks-operator-elastic-agent"></a>

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

**注記**  
[ チェックポイントレストレーニング](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless.html)と[エラスティックトレーニング](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-elastic-training.html)の両方で、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 の引数
<a name="sagemaker-eks-operator-elastic-agent-args"></a>

 HyperPod Elastic Agent は、元の引数をすべてサポートし、いくつかの引数を追加します。以下は、HyperPod Elastic Agent で使用できるすべての引数です。PyTorch の Elastic Agent の詳細については、[公式ドキュメント](https://docs.pytorch.org/docs/stable/elastic/agent.html)を参照してください。


| 引数 | 説明 | デフォルト値 | 
| --- | --- | --- | 
| --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 | プロセスレベルの再起動をトリガーする前に、エージェントがワーカーが同期障壁に到達するのを待機する秒単位の時間。 | なし | 

## タスクガバナンス (オプション)
<a name="sagemaker-eks-operator-task-governance"></a>

トレーニングオペレーターは、リソース割り当てを合理化し、Amazon EKS クラスターのチームやプロジェクト全体にわたってコンピューティングリソースを効率的に利用できるように設計された、堅牢な管理システムである [HyperPod タスクガバナンス](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-operate-console-ui-governance)と統合されています。HyperPod タスクガバナンスを設定するには、「[SageMaker HyperPod タスクガバナンスのセットアップ](sagemaker-hyperpod-eks-operate-console-ui-governance-setup.md)」を参照してください。

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

ジョブを送信する際は、キュー名と `hyperpod-ns-{{team-name}}-localqueue`と `{{priority-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 (オプション)
<a name="sagemaker-eks-operator-kueue"></a>

ジョブは直接実行できますが、組織はトレーニングオペレーターを Kueue と統合してリソースを割り当て、ジョブをスケジュールすることもできます。HyperPod クラスターに Kueue をインストールするには、次の手順に従います。

1. [Kueue の公式ドキュメント](https://kueue.sigs.k8s.io/docs/installation/#install-a-custom-configured-released-version)のインストールガイドに従ってください。`controller_manager_config.yaml` を設定するステップに達したら、次の設定を追加します。

   ```
   externalFrameworks:
   - "HyperPodPytorchJob.v1.sagemaker.amazonaws.com"
   ```

1. 公式のインストールガイドの残りの手順に従ってください。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
   ```