

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

# Amazon EKS によってオーケストレーションされた SageMaker HyperPod クラスターでジョブを実行する
<a name="sagemaker-hyperpod-eks-run-jobs"></a>

以下のトピックでは、Amazon EKS とオーケストレーションされたプロビジョニング済みの SageMaker HyperPod クラスターでコンピューティングノードにアクセスし、ML ワークロードを実行する手順と例を示します。HyperPod クラスターで環境を設定する方法に応じて、HyperPod クラスターで ML ワークロードを実行する方法は多数あります。

**注記**  
SageMaker HyperPod CLI または kubectl を介してジョブを実行する場合、HyperPod は名前空間 (チーム) 全体にわたってコンピューティング使用率 (GPU/CPU 時間) を追跡できます。これらのメトリクスの電力使用状況レポートは、以下を提供します。  
割り当てられたリソースの消費状況と借用されたリソースの消費状況の可視性
監査のためのチームのリソース使用状況 (最大 180 日）
タスクガバナンスポリシーに沿ったコスト属性
使用状況レポートを使用するには、使用状況レポートインフラストラクチャをインストールする必要があります。コンピューティングクォータを適用し、きめ細かいコスト属性を有効にするように「[タスクガバナンス](sagemaker-hyperpod-eks-operate-console-ui-governance.md)」を設定することを強くお勧めします。  
使用状況レポートの設定と生成の詳細については、「[HyperPod でのコンピューティング使用状況レポート](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-usage-reporting.html)」を参照してください。

**ヒント**  
Amazon EKS とオーケストレーションされた SageMaker HyperPod クラスターをセットアップして使用する方法に関する実践的な経験とガイダンスについては、[SageMaker HyperPod ワークショップでこの Amazon EKS サポート](https://catalog.us-east-1.prod.workshops.aws/workshops/2433d39e-ccfe-4c00-9d3d-9917b729258e)を受けることをお勧めします。

データサイエンティストユーザーは、SageMaker HyperPod クラスターのオーケストレーターとして EKS クラスターセットを使用して基礎モデルをトレーニングできます。サイエンティストは、[SageMaker HyperPod CLI](https://github.com/aws/sagemaker-hyperpod-cli) とネイティブ `kubectl` コマンドを活用して、利用可能な SageMaker HyperPod クラスターを検索し、トレーニングジョブ (ポッド) を送信して、ワークロードを管理します。SageMaker HyperPod CLI では、トレーニングジョブスキーマファイルを使用してジョブを送信でき、ジョブの一覧表示、説明、キャンセル、実行の機能が備わっています。サイエンティストは、HyperPod が管理するコンピューティングクォータに従って、[Kubeflow トレーニングオペレーター](https://www.kubeflow.org/docs/components/training/overview/)を使用し、[SageMaker AI マネージド MLflow](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow.html) を使用して ML 実験とトレーニング実行を管理できます。

**Topics**
+ [SageMaker HyperPod CLI のインストール](sagemaker-hyperpod-eks-run-jobs-access-nodes.md)
+ [SageMaker HyperPod CLI コマンド](sagemaker-hyperpod-eks-hyperpod-cli-reference.md)
+ [SageMaker HyperPod CLI を使用してジョブを実行する](sagemaker-hyperpod-eks-run-jobs-hyperpod-cli.md)
+ [`kubectl` を使用したジョブの実行](sagemaker-hyperpod-eks-run-jobs-kubectl.md)

# SageMaker HyperPod CLI のインストール
<a name="sagemaker-hyperpod-eks-run-jobs-access-nodes"></a>

SageMaker HyperPod には、[SageMaker HyperPod コマンドラインインターフェイス](https://github.com/aws/sagemaker-hyperpod-cli) (CLI) パッケージが用意されています。

1. ローカルマシンの Python のバージョンが 3.8 から 3.11 の間であることを確認します。

1. [SageMaker HyperPod CLI](https://github.com/aws/sagemaker-hyperpod-cli) パッケージ の `README`マークダウンファイルの前提条件を確認します。

1. GitHub から SageMaker HyperPod CLI パッケージをクローンします。

   ```
   git clone https://github.com/aws/sagemaker-hyperpod-cli.git
   ```

1. SageMaker HyperPod CLI をインストールします。

   ```
   cd sagemaker-hyperpod-cli && pip install .
   ```

1. 次のコマンドを実行して、SageMaker HyperPod CLI が正常にインストールされているかどうかをテストします。

   ```
   hyperpod --help
   ```

**注記**  
データサイエンティストが SageMaker HyperPod CLI を使用する場合、「[サイエンティストの IAM ユーザー](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-cluster-user)」および「[Kubernetes ロールベースのアクセスコントロールの設定](sagemaker-hyperpod-eks-setup-rbac.md)」の手順に従ってクラスター管理者により IAM ロールが適切に設定されていることを確認してください。

# SageMaker HyperPod CLI コマンド
<a name="sagemaker-hyperpod-eks-hyperpod-cli-reference"></a>

次の表は、SageMaker HyperPod CLI コマンドをまとめたものです。

**注記**  
詳細な CLI リファレンスについては、[SageMaker HyperPod CLI GitHub リポジトリ](https://github.com/aws/sagemaker-hyperpod-cli)の [README](https://github.com/aws/sagemaker-hyperpod-cli?tab=readme-ov-file#sagemaker-hyperpod-command-line-interface) を参照してください。


| SageMaker HyperPod CLI コマンド | エンティティ  | 説明 | 
| --- | --- | --- | 
| hyperpod get-clusters | クラスター/アクセス | トレーニングワークロードを送信するための IAM アクセス許可をユーザーが持つすべてのクラスターを一覧表示します。ワークロードやジョブを実行していない利用可能なインスタンス全体の現在のスナップショットを、ヘルスチェックのステータス (例: BurnInPassed) 別にグループ化して、最大容量と一緒に表示します。 | 
| hyperpod connect-cluster | クラスター/アクセス | 指定された HyperPod クラスターと名前空間で動作するよう kubectl を設定します。 | 
| hyperpod start-job  | ジョブ | ターゲットクラスターにジョブを送信します。ジョブ名は名前空間レベルで一意になります。ユーザーは、CLI 引数として渡すことで yaml 仕様を上書きできます。 | 
| hyperpod get-job | ジョブ | 送信されたジョブのメタデータを表示します。 | 
| hyperpod list-jobs | ジョブ | ユーザーが追加された接続先クラスター/名前空間内のすべてのジョブを、トレーニングワークロードを送信するための IAM アクセス許可で一覧表示します。 | 
| hyperpod cancel-job | ジョブ | ジョブを停止して削除し、基盤となるコンピューティングリソースを放棄します。このジョブは再開できません。必要に応じて、新しいジョブを開始する必要があります。 | 
| hyperpod list-pods | ポッド | 名前空間内の特定のジョブ内のすべてのポッドを一覧表示します。 | 
| hyperpod get-log | ポッド | 指定されたジョブの particulat ポッドのログを取得します。 | 
| hyperpod exec | ポッド | 指定されたポッドのシェルで bash コマンドを実行し、出力を発行します。 | 
| hyperpod --help | ユーティリティ | サポートされているすべてのコマンドを一覧表示します。 | 

# SageMaker HyperPod CLI を使用してジョブを実行する
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli"></a>

ジョブを実行するには、EKS クラスターに Kubeflow Training Operator がインストールされていることを確認します。詳細については、「[Helm を使用して Amazon EKS クラスターにパッケージをインストールする](sagemaker-hyperpod-eks-install-packages-using-helm-chart.md)」を参照してください。

`hyperpod get-cluster` コマンドを実行して、使用可能な HyperPod クラスターのリストを取得します。

```
hyperpod get-clusters
```

`hyperpod connect-cluster` を実行して、HyperPod クラスターをオーケストレーションする EKS クラスターを使用して SageMaker HyperPod CLI を設定します。

```
hyperpod connect-cluster --cluster-name <hyperpod-cluster-name>
```

`hyperpod start-job` コマンドを使用してジョブを実行します。次のコマンドは、コマンドと必要なオプションを示しています。

```
hyperpod start-job \
    --job-name <job-name>
    --image <docker-image-uri>
    --entry-script <entrypoint-script>
    --instance-type <ml.instance.type>
    --node-count <integer>
```

`hyperpod start-job` コマンドには、ジョブの自動再開やジョブスケジューリングなど、さまざまなオプションも用意されています。

## ジョブの自動再開を有効にする
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli-enable-auto-resume"></a>

`hyperpod start-job` コマンドには、ジョブの自動再開を指定する以下のオプションも用意されています。ジョブの自動再開を有効にして SageMaker HyperPod ノードの回復性機能を使用するには、`restart-policy` オプションの値を `OnFailure` に設定する必要があります。ジョブは、`kubeflow` 名前空間、またはプレフィックス `hyperpod` が付けられた名前空間で実行されている必要があります。
+ [--auto-resume <bool>] \$1オプション。失敗後にジョブの自動再開が有効になります。デフォルトは false です
+ [--max-retry <int>] \$1オプション。自動再開が true の場合、max-retry のデフォルト値は 1 です (指定されていない場合)
+ [--restart-policy <enum>] \$1オプション。PyTorchJob 再起動ポリシー。指定できる値は `Always`、`OnFailure`、`Never`、または `ExitCode` です。デフォルト値は `OnFailure` です。

```
hyperpod start-job \
    ... // required options \
    --auto-resume true \
    --max-retry 3 \
    --restart-policy OnFailure
```

## スケジュールオプションを使用してジョブを実行する
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli-scheduling"></a>

`hyperpod start-job` コマンドには、キューイングメカニズムを使用してジョブを設定するための以下のオプションが用意されています。

**注記**  
EKS クラスターに [Kueue](https://kueue.sigs.k8s.io/docs/overview/) をインストールする必要があります。インストールされていない場合は、「[SageMaker HyperPod タスクガバナンスのセットアップ](sagemaker-hyperpod-eks-operate-console-ui-governance-setup.md)」の手順に従ってください。
+ [--scheduler-type <enum>] \$1オプション。スケジューラタイプを指定します。デフォルトは `Kueue` です。
+ [--queue-name <string>] \$1オプション。ジョブで送信する[ローカルキュー](https://kueue.sigs.k8s.io/docs/concepts/local_queue/)または[クラスターキュー](https://kueue.sigs.k8s.io/docs/concepts/cluster_queue/)の名前を指定します。キューは、クラスター管理者が `CreateComputeQuota` を使用して作成する必要があります。
+ [--priority <string>] \$1オプション。[ワークロード優先度クラス](https://kueue.sigs.k8s.io/docs/concepts/workload_priority_class/)の名前を指定します。これはクラスター管理者が作成する必要があります。

```
hyperpod start-job \
    ... // required options
    --scheduler-type Kueue \
    --queue-name high-priority-queue \
    --priority high
```

## 設定ファイルからジョブを実行する
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli-from-config"></a>

代わりに、ジョブに必要なすべてのパラメータを含むジョブ設定ファイルを作成し、--config-file オプションを使用してこの設定ファイルを `hyperpod start-job` コマンドに渡します。この場合は以下のようになります。

1. 必要なパラメータを使用してジョブ設定ファイルを作成します。[ベースライン設定ファイル](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-run-jobs-hyperpod-cli.html#sagemaker-hyperpod-eks-hyperpod-cli-from-config)については、SageMaker HyperPod CLI GitHub リポジトリでジョブ設定ファイルを参照してください。

1. 次のように設定ファイルを使用してジョブを開始します。

   ```
   hyperpod start-job --config-file /path/to/test_job.yaml
   ```

**ヒント**  
`hyperpod start-job` コマンドのパラメータの詳細なリストについては、SageMaker HyperPod CLI GitHub リポジトリの `README.md` にある「[Submitting a Job](https://github.com/aws/sagemaker-hyperpod-cli?tab=readme-ov-file#submitting-a-job)」セクションを参照してください。

# `kubectl` を使用したジョブの実行
<a name="sagemaker-hyperpod-eks-run-jobs-kubectl"></a>

**注記**  
トレーニングジョブの自動再開には、Kubeflow トレーニングオペレーターリリースバージョン `1.7.0`、`1.8.0`、または `1.8.1` が必要です。

Helm チャートを使用してクラスターに Kubeflow Training Operator をインストールする必要がある点に注意してください。詳細については、「[Helm を使用して Amazon EKS クラスターにパッケージをインストールする](sagemaker-hyperpod-eks-install-packages-using-helm-chart.md)」を参照してください。次のコマンドを実行して、Kubeflow Training Operator コントロールプレーンが正しく設定されていることを確認します。

```
kubectl get pods -n kubeflow
```

これにより、次のような出力が返されます。

```
NAME                                             READY   STATUS    RESTARTS   AGE
training-operator-658c68d697-46zmn               1/1     Running   0          90s
```

**トレーニングジョブを送信するには**

トレーニングジョブを実行するには、ジョブ設定ファイルを準備し、次のように [https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply) コマンドを実行します。

```
kubectl apply -f /path/to/training_job.yaml
```

**トレーニングジョブを記述するには**

EKS クラスターに送信されたジョブの詳細を取得するには、次のコマンドを使用します。ジョブの送信時間、完了時間、ジョブステータス、設定の詳細などのジョブ情報を返します。

```
kubectl get -o yaml training-job -n kubeflow
```

**トレーニングジョブを停止して EKS リソースを削除するには**

トレーニングジョブを停止するには、kubectl delete を使用します。以下は、設定ファイル `pytorch_job_simple.yaml` から作成されたトレーニングジョブを停止する例です。

```
kubectl delete -f /path/to/training_job.yaml 
```

以下のような出力が返されます。

```
pytorchjob.kubeflow.org "training-job" deleted
```

**ジョブの自動再開を有効にするには**

SageMaker HyperPod では、Kubernetes ジョブのジョブ自動再開機能がサポートされており、Kubeflow Training Operator コントロールプレーンと統合されます。

クラスター内に、SageMaker HyperPod ヘルスチェックに合格した十分な数のノードがあることを確認します。ノードのテイント `sagemaker.amazonaws.com/node-health-status` を `Schedulable` に設定する必要があります。ジョブ YAML ファイルにノードセレクタを含め、次のように適切な設定のノードを選択することをお勧めします。

```
sagemaker.amazonaws.com/node-health-status: Schedulable
```

次のコードスニペットは、ジョブ自動再開機能を有効にするために Kubeflow PyTorch ジョブ YAML 設定を変更する方法の例です。2 つの注釈を追加し、次のように `restartPolicy` を `OnFailure` に設定する必要があります。

```
apiVersion: "kubeflow.org/v1"
kind: PyTorchJob 
metadata:
    name: pytorch-simple
    namespace: kubeflow
    annotations: { // config for job auto resume
      sagemaker.amazonaws.com/enable-job-auto-resume: "true"
      sagemaker.amazonaws.com/job-max-retry-count: "2"
    }
spec:
  pytorchReplicaSpecs:
  ......
  Worker:
      replicas: 10
      restartPolicy: OnFailure
      template:
          spec:
              nodeSelector:
                  sagemaker.amazonaws.com/node-health-status: Schedulable
```

**ジョブ自動再開ステータスを確認するには**

次のコマンドを実行してジョブ自動再開のステータスを取得します。

```
kubectl describe pytorchjob -n kubeflow <job-name>
```

障害パターンによっては、次のように Kubeflow トレーニングジョブ再起動の 2 つのパターンが表示される場合があります。

**パターン 1**:

```
Start Time:    2024-07-11T05:53:10Z
Events:
  Type     Reason                   Age                    From                   Message
  ----     ------                   ----                   ----                   -------
  Normal   SuccessfulCreateService  9m45s                  pytorchjob-controller  Created service: pt-job-1-worker-0
  Normal   SuccessfulCreateService  9m45s                  pytorchjob-controller  Created service: pt-job-1-worker-1
  Normal   SuccessfulCreateService  9m45s                  pytorchjob-controller  Created service: pt-job-1-master-0
  Warning  PyTorchJobRestarting     7m59s                  pytorchjob-controller  PyTorchJob pt-job-1 is restarting because 1 Master replica(s) failed.
  Normal   SuccessfulCreatePod      7m58s (x2 over 9m45s)  pytorchjob-controller  Created pod: pt-job-1-worker-0
  Normal   SuccessfulCreatePod      7m58s (x2 over 9m45s)  pytorchjob-controller  Created pod: pt-job-1-worker-1
  Normal   SuccessfulCreatePod      7m58s (x2 over 9m45s)  pytorchjob-controller  Created pod: pt-job-1-master-0
  Warning  PyTorchJobRestarting     7m58s                  pytorchjob-controller  PyTorchJob pt-job-1 is restarting because 1 Worker replica(s) failed.
```

**パターン 2**: 

```
Events:
  Type    Reason                   Age    From                   Message
  ----    ------                   ----   ----                   -------
  Normal  SuccessfulCreatePod      19m    pytorchjob-controller  Created pod: pt-job-2-worker-0
  Normal  SuccessfulCreateService  19m    pytorchjob-controller  Created service: pt-job-2-worker-0
  Normal  SuccessfulCreatePod      19m    pytorchjob-controller  Created pod: pt-job-2-master-0
  Normal  SuccessfulCreateService  19m    pytorchjob-controller  Created service: pt-job-2-master-0
  Normal  SuccessfulCreatePod      4m48s  pytorchjob-controller  Created pod: pt-job-2-worker-0
  Normal  SuccessfulCreatePod      4m48s  pytorchjob-controller  Created pod: pt-job-2-master-0
```