翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
トレーニングオペレーターのインストール
トレーニングオペレーターをインストールする方法については、以降のセクションを参照してください。
前提条件
HyperPod トレーニングオペレーターを使用する前に、次の前提条件を満たしている必要があります。
-
HyperPod クラスターに最新の AMI をインストール済み。詳細については、「Amazon EKS 向け SageMaker HyperPod AMI リリース」を参照してください。
-
コンソールを使用して EKS Pod Identity Agent を設定済み。を使用する場合は AWS CLI、次のコマンドを使用します。
aws eks create-addon \ --cluster-namemy-eks-cluster\ --addon-name eks-pod-identity-agent \ --regionAWS リージョン -
(オプション) HyperPod クラスターノードをプライベート VPC で実行する場合は、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 エンドポイントの作成」を参照してください。
トレーニングオペレーターのインストール
HyperPod トレーニングオペレーターは、SageMaker AI コンソール、Amazon EKS コンソール、または AWS CLI コンソールメソッドを使用してインストールできるようになりました。これにより、オペレーターのインストールに役立つシンプルなエクスペリエンスが提供されます。 AWS CLI は、より多くのインストールをカスタマイズできるプログラムによるアプローチを提供します。
2 つのコンソールエクスペリエンスのうち、SageMaker AI はワンクリックインストールを提供し、IAM 実行ロールの作成、ポッド ID の関連付け、オペレーターのインストールを実行します。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 | コントローラーポッドのノードセレクタ | デフォルトの動作では、sagemaker.amazonaws.com/compute-type: "HyperPod" ラベルが付けられたノードを選択します。 |
HyperPod Elastic Agent
HyperPod エラスティックエージェントは、PyTorch の ElasticAgenthyperpodrun を使用してジョブランチャーを作成する 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-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 と統合してリソースを割り当て、ジョブをスケジュールすることもできます。HyperPod クラスターに Kueue をインストールするには、次の手順に従います。
-
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