

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

# のサービスジョブ AWS Batch
<a name="service-jobs"></a>

AWS Batch サービスジョブを使用すると、 AWS Batch ジョブキューを介して AWS サービスにリクエストを送信できます。現在、 は SageMaker トレーニングジョブをサービスジョブとして AWS Batch サポートしています。が基盤となるコンテナ実行 AWS Batch を管理するコンテナ化されたジョブとは異なり、サービスジョブでは AWS Batch がジョブのスケジュールとキューイング機能を提供できますが、ターゲット AWS サービス (SageMaker AI など) は実際のジョブ実行を処理します。

AWS Batch SageMaker トレーニングジョブの場合、データサイエンティストは優先順位を付けてトレーニングジョブを設定可能なキューに送信できるため、リソースが利用可能になるとすぐにワークロードが介入なしで実行されます。この機能は、リソースの調整、偶発的な過剰支出の防止、予算の制約への対応、リザーブドインスタンスによるコストの最適化、チームメンバー間の手動調整の必要性の排除といった一般的な課題に対処します。

サービスジョブは、いくつかの重要な点でコンテナ化されたジョブとは異なります。
+ **ジョブの送信**: サービスジョブは [SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html) API を使用して送信する必要があります。サービスジョブは AWS Batch コンソールから送信できません。
+ **ジョブ実行**: サービスジョブを AWS Batch スケジュールしてキューに入れますが、ターゲット AWS サービスは実際のジョブワークロードを実行します。
+ **リソース識別子**: サービスジョブは、「job」ではなく「service-job」を含む ARN を使用して、コンテナ化されたジョブとの区別を行います。

SageMaker Training AWS Batch のサービスジョブの使用を開始するには、「」を参照してください[SageMaker AI AWS Batch での の開始方法](getting-started-sagemaker.md)。

**Topics**
+ [のサービスジョブペイロード AWS Batch](service-job-payload.md)
+ [でサービスジョブを送信する AWS Batch](service-job-submit.md)
+ [AWS Batch サービスジョブのステータスを SageMaker AI ステータスにマッピングする](service-job-status.md)
+ [のサービスジョブの再試行戦略 AWS Batch](service-job-retries.md)
+ [AWS Batch キュー内のサービスジョブをモニタリングする](monitor-sagemaker-job-queue.md)
+ [サービスジョブを終了する](terminate-service-jobs.md)

# のサービスジョブペイロード AWS Batch
<a name="service-job-payload"></a>

[SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html) を使用してサービスジョブを送信するときは、ジョブを定義する 2 つの主要なパラメータとして `serviceJobType`、`serviceRequestPayload` を指定します。
+ は、ジョブを実行する AWS サービス`serviceJobType`を指定します。SageMaker トレーニングジョブの場合、この値は `SAGEMAKER_TRAINING` です。
+ `serviceRequestPayload` は、通常はターゲットサービスに直接送信される完全なリクエストを含む JSON エンコードされた文字列です。SageMaker トレーニングジョブの場合、このペイロードには SageMaker AI [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) API で使用するのと同じパラメータが含まれています。

使用可能なすべてのパラメータの完全なリストとその説明については、SageMaker AI [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) API リファレンスを参照してください。`CreateTrainingJob` でサポートされているすべてのパラメータをサービスジョブのペイロードに含めることができます。

その他のトレーニングジョブの設定例については、「[SageMaker AI デベロッパーガイド](https://docs.aws.amazon.com/sagemaker/latest/dg/gs.html)」の「[API、CLI、SDK](https://docs.aws.amazon.com/sagemaker/latest/dg/api-and-sdk-reference-overview.html)」を参照してください。

PySDK にはヘルパークラスとユーティリティがあるため、サービスジョブの作成には PySDK を使用することをお勧めします。PySDK の使用例については、GitHub の「[SageMaker AI の例](https://github.com/aws/amazon-sagemaker-examples)」を参照してください。

## サービスジョブのペイロードの例
<a name="service-job-payload-example"></a>

次の例は、「hello world」トレーニングスクリプトを実行する SageMaker トレーニングジョブのシンプルなサービスジョブのペイロードを示しています。

このペイロードは、`SubmitServiceJob` を呼び出すときに `serviceRequestPayload` パラメータに JSON 文字列として渡されます。

```
{
  "TrainingJobName": "my-simple-training-job",
  "RoleArn": "arn:aws:iam::123456789012:role/SageMakerExecutionRole",
  "AlgorithmSpecification": {
    "TrainingInputMode": "File",
    "TrainingImage": "763104351884.dkr.ecr.us-west-2.amazonaws.com/pytorch-training:2.0.0-cpu-py310",
    "ContainerEntrypoint": [
      "echo",
      "hello world"
    ]
  },
  "ResourceConfig": {
    "InstanceType": "ml.c5.xlarge",
    "InstanceCount": 1,
    "VolumeSizeInGB": 1
  },
  "OutputDataConfig": {
    "S3OutputPath": "s3://your-output-bucket/output"
  },
  "StoppingCondition": {
    "MaxRuntimeInSeconds": 30
  }
}
```

# でサービスジョブを送信する AWS Batch
<a name="service-job-submit"></a>

サービスジョブを送信するには AWS Batch、[SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html) API を使用します。 AWS CLI または SDK を使用してジョブを送信できます。

実行ロールがまだない場合は、サービスジョブを送信する前に作成する必要があります。SageMaker AI 実行ロールを作成するには、「*[SageMaker AI デベロッパーガイド](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html)*」の「[SageMaker AI 実行ロールの使用方法](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)」を参照してください。

## サービスジョブの送信ワークフロー
<a name="service-job-submit-workflow"></a>

サービスジョブを送信すると、 は次のワークフロー AWS Batch を実行します。

1. AWS Batch は`[SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html)`リクエストを受け取り、 AWS Batch特定のパラメータを検証します。`serviceRequestPayload` は検証なしで渡されます。

1. ジョブは `SUBMITTED` 状態になり、指定されたジョブキューに配置されます。

1. AWS Batch は、キューの前面にある`RUNNABLE`ジョブに対してサービス環境に使用可能な容量があるかどうかを評価します。

1. 容量が利用可能な場合、ジョブは `SCHEDULED` に移動し、ジョブは SageMaker AI に渡されます。

1. 容量が取得され、SageMaker AI がサービスジョブデータをダウンロードすると、サービスジョブは初期化を開始し、ジョブは `STARTING` に変更されます。

1. SageMaker AI がジョブの実行を開始すると、ステータスは `RUNNING` に変更されます。

1. SageMaker AI がジョブを実行する間、 は進行状況 AWS Batch を監視し、サービスの状態を AWS Batch ジョブの状態にマッピングします。サービスジョブの状態のマッピング方法の詳細については、「[AWS Batch サービスジョブのステータスを SageMaker AI ステータスにマッピングする](service-job-status.md)」を参照してください。

1. サービスジョブが完了すると、`SUCCEEDED` に移動し、出力をダウンロードする準備が整います。

## 前提条件
<a name="service-job-submit-prerequisites"></a>

サービスジョブを送信する前に、以下があることを確認してください。
+ **サービス環境** – 容量制限を定義するサービス環境。詳細については、「[でサービス環境を作成する AWS Batch](create-service-environments.md)」を参照してください。
+ **SageMaker ジョブキュー** – ジョブスケジューリングを提供する SageMaker ジョブキュー。詳細については、「[AWS Batch で SageMaker トレーニングジョブのキューを作成する](create-sagemaker-job-queue.md)」を参照してください。
+ **IAM アクセス許可** – AWS Batch ジョブキューとサービス環境を作成および管理するためのアクセス許可。詳細については、「[AWS Batch IAM ポリシー、ロール、アクセス許可](IAM_policies.md)」を参照してください。

## CLI AWS を使用してサービスジョブを送信する
<a name="service-job-submit-example"></a>

 AWS CLI を使用してサービスジョブを送信する方法を以下に示します。

```
aws batch submit-service-job \
    --job-name "my-sagemaker-training-job" \
    --job-queue "my-sagemaker-job-queue" \
    --service-job-type "SAGEMAKER_TRAINING" \
    --service-request-payload '{\"TrainingJobName\": \"sagemaker-training-job-example\", \"AlgorithmSpecification\": {\"TrainingImage\": \"123456789012.dkr.ecr.us-east-1.amazonaws.com/pytorch-inference:1.8.0-cpu-py3\", \"TrainingInputMode\": \"File\", \"ContainerEntrypoint\":  [\"sleep\", \"1\"]}, \"RoleArn\":\"arn:aws:iam::123456789012:role/SageMakerExecutionRole\", \"OutputDataConfig\": {\"S3OutputPath\": \"s3://example-bucket/model-output/\"}, \"ResourceConfig\": {\"InstanceType\": \"ml.m5.large\", \"InstanceCount\": 1, \"VolumeSizeInGB\": 1}}'
    --client-token "unique-token-12345"
```

`serviceRequestPayload` パラメータの詳細については、「[のサービスジョブペイロード AWS Batch](service-job-payload.md)」を参照してください。

# AWS Batch サービスジョブのステータスを SageMaker AI ステータスにマッピングする
<a name="service-job-status"></a>

[SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html) を使用して SageMaker ジョブキューにジョブを送信すると、 はジョブのライフサイクル AWS Batch を管理し、 AWS Batch [ジョブの状態](job_states.md)を同等の SageMaker トレーニングジョブの状態にマッピングします。SageMaker トレーニングジョブなどのサービスジョブは、従来のコンテナジョブとは異なる状態ライフサイクルに従います。サービスジョブはほとんどの状態をコンテナジョブと共有しますが、`SCHEDULED` 状態を導入し、特にターゲットサービスからの容量不足エラーを処理するために、さまざまな再試行動作を示します。

次の表は、 AWS Batch ジョブの状態と対応する SageMaker Status/SecondaryStatus を示しています。


| バッチステータス | SageMaker AI プライマリステータス | SageMaker AI セカンダリステータス | 説明 | 
| --- | --- | --- | --- | 
| SUBMITTED | 該当なし | 該当なし | ジョブがキューに送信され、スケジューラの評価を待機しています。 | 
| RUNNABLE | 該当なし | 該当なし | ジョブはキューに入れられ、スケジューリングの準備が整います。この状態のジョブは、サービス環境で十分なリソースが使用可能になるとすぐに開始されます。十分なリソースが使用不可の場合、この状態が無限に続くことがあります。 | 
| SCHEDULED | InProgress | Pending | サービスジョブが SageMaker AI に正常に送信されました | 
| STARTING | InProgress | Downloading | データとイメージをダウンロード中の SageMaker トレーニングジョブ。トレーニングジョブの容量が取得され、ジョブの初期化が開始されました。 | 
| RUNNING | InProgress | Training | SageMaker トレーニングジョブの実行アルゴリズム  | 
| RUNNING | InProgress | Uploading | トレーニング完了後に出力アーティファクトをアップロードする SageMaker トレーニングジョブ | 
| SUCCEEDED | Completed | Completed | SageMaker トレーニングジョブが正常に完了しました。出力アーティファクトのアップロードが完了しました。 | 
| FAILED | Failed | Failed | SageMaker トレーニングジョブで回復不可能なエラーが発生しました。 | 
| FAILED | Stopped | Stopped | SageMaker トレーニングジョブが StopTrainingJob を使用して手動で停止されました。 | 

# のサービスジョブの再試行戦略 AWS Batch
<a name="service-job-retries"></a>

サービスジョブの再試行戦略により AWS Batch 、 は特定の条件下で失敗したサービスジョブを自動的に再試行できます。

サービスジョブには、いくつかの理由で複数回の試行が必要になる場合があります。
+ **一時的なサービスの問題**: 内部サービスエラー、スロットリング、または一時的な停止により、送信中または実行中にジョブが失敗する可能性があります。
+ **トレーニング初期化の失敗**: イメージのプルの問題や初期化エラーなど、ジョブの起動中の問題は再試行時に解決される可能性があります。

適切な再試行戦略を設定することで、ジョブの成功率を向上させ、特に長時間実行されるトレーニングのワークロードにおける手動介入の必要性を減らすことができます。

**注記**  
サービスジョブは、設定された再試行を消費することなく、容量不足エラーなど、特定のタイプの失敗を自動的に再試行します。再試行戦略は、アルゴリズムエラーやサービスの問題などの他のタイプの失敗を主に処理します。

## 再試行戦略の設定
<a name="configuring-service-job-retries"></a>

サービスジョブの再試行戦略は、シンプルな再試行回数と条件付き再試行ロジックの両方をサポートする [ServiceJobRetryStrategy](https://docs.aws.amazon.com/batch/latest/APIReference/API_ServiceJobRetryStrategy.html) を使用して設定されます。

### 再試行設定
<a name="basic-retry-configuration"></a>

最も簡単な再試行戦略では、サービスジョブが失敗した場合に実行する再試行回数を指定します。

```
{
  "retryStrategy": {
    "attempts": 3
  }
}
```

この設定では、サービスジョブが失敗した場合に最大 3 回再試行できます。

**重要**  
`attempts` 値は、最初の試行を含め、ジョブを `RUNNABLE` 状態に配置できる合計回数を表します。3 の値は、ジョブが最初に 1 回試行され、失敗するとさらに 2 回再試行されることを意味します。

### evaluateOnExit で設定を再試行する
<a name="advanced-retry-configuration"></a>

`evaluateOnExit` パラメータを使用して、ジョブを再試行するか、失敗を許可する条件を指定できます。これは、さまざまなタイプの失敗で異なる処理が必要な場合に便利です。

`evaluateOnExit` 配列には最大 5 つの再試行戦略を含めることができ、それぞれがステータス理由に基づいてアクション (`RETRY` または `EXIT`) と条件を指定します。

```
{
  "retryStrategy": {
    "attempts": 5,
    "evaluateOnExit": [
      {
        "action": "RETRY",
        "onStatusReason": "Received status from SageMaker: InternalServerError*"
      },
      {
        "action": "EXIT",
        "onStatusReason": "Received status from SageMaker: ValidationException*"
      },
      {
        "action": "EXIT",
        "onStatusReason": "*"
      }
    ]
  }
}
```

この設定では、次のようになります。
+ SageMaker AI の内部サーバーエラーが原因で失敗したジョブを再試行する
+ 検証例外 (再試行によって解決されないクライアントエラー) が発生したジョブをすぐに失敗させる
+ 他の失敗タイプに対して終了するキャッチオールルールを含める

#### ステータス理由のパターンマッチング
<a name="status-reason-patterns"></a>

`onStatusReason` パラメータは、最大 512 文字のパターンマッチングをサポートします。パターンはワイルドカード (\$1) を使用し、SageMaker AI によって返されるステータス理由と照合できます。

サービスジョブの場合、SageMaker AI からのステータスメッセージには、SageMaker からのステータスの受信: AWS Batch」というプレフィックスが付けられ、生成されたメッセージと区別されます。一般的なパターンは次のとおりです。
+ `Received status from SageMaker: InternalServerError*` - 内部サービスエラーの一致
+ `Received status from SageMaker: ValidationException*` - クライアント検証エラーの一致
+ `Received status from SageMaker: ResourceLimitExceeded*` - リソース制限エラーの一致
+ `*CapacityError*` - 容量関連の失敗の一致

**ヒント**  
特定のパターンマッチングを使用して、さまざまなエラータイプを適切に処理します。例えば、内部サーバーエラーを再試行しますが、ジョブパラメータの問題を示す検証エラーですぐに失敗します。

# AWS Batch キュー内のサービスジョブをモニタリングする
<a name="monitor-sagemaker-job-queue"></a>

`list-service-jobs` および `get-job-queue-snapshot` を使用して、SageMaker トレーニングジョブキュー内のジョブのステータスをモニタリングできます。

キューで実行中のジョブを表示します:

```
aws batch list-service-jobs \
  --job-queue my-sm-training-fifo-jq \
  --job-status RUNNING
```

キューで待機しているジョブを表示する:

```
aws batch list-service-jobs \
  --job-queue my-sm-training-fifo-jq \
  --job-status RUNNABLE
```

SageMaker に送信されたものの、まだ実行されていないジョブを表示します:

```
aws batch list-service-jobs \
  --job-queue my-sm-training-fifo-jq \
  --job-status SCHEDULED
```

キューの前面でジョブのスナップショットを取得します:

```
aws batch get-job-queue-snapshot --job-queue my-sm-training-fifo-jq
```

このコマンドは、キュー内の今後のサービスジョブの順序を示します。

## 詳細なサービスジョブ情報を取得する
<a name="describe-service-job"></a>

[https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeServiceJob.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeServiceJob.html) オペレーションを使用して、現在のステータス、サービスリソース識別子、詳細な試行情報など、特定のサービスジョブに関する包括的な情報を取得します。

特定のジョブに関する詳細情報を表示する:

```
aws batch describe-service-job \
  --job-id a4d6c728-8ee8-4c65-8e2a-9a5e8f4b7c3d
```

このコマンドは、次のようなジョブに関する包括的な情報を返します。
+ ジョブ ARN と現在のステータス
+ サービスリソース識別子 (SageMaker トレーニングジョブ ARN など)
+ 優先度と再試行設定のスケジューリング
+ 元のサービスパラメータを含むサービスリクエストペイロード
+ 開始時刻と停止時刻を含む詳細な試行情報
+ ターゲットサービスからのステータスメッセージ

## SageMaker トレーニングジョブをモニタリングする
<a name="monitor-sagemaker-training-jobs"></a>

を使用して SageMaker トレーニングジョブをモニタリングする場合 AWS Batch、 AWS Batch ジョブ情報と基盤となる SageMaker トレーニングジョブの詳細の両方にアクセスできます。

ジョブ詳細のサービスリソース識別子には、SageMaker トレーニングジョブ ARN が含まれます。

```
{
  "latestAttempt": {
    "serviceResourceId": {
      "name": "TrainingJobArn",
      "value": "arn:aws:sagemaker:us-east-1:123456789012:training-job/my-training-job"
    }
  }
}
```

この ARN を使用して、SageMaker から直接追加の詳細を取得できます。

```
aws sagemaker describe-training-job \
  --training-job-name my-training-job
```

 AWS Batch ステータスと SageMaker Training ジョブのステータスの両方を確認して、ジョブの進行状況をモニタリングします。 AWS Batch ジョブのステータスはジョブのライフサイクル全体を示し、SageMaker トレーニングジョブのステータスはトレーニングプロセスに関するサービス固有の詳細を提供します。

# サービスジョブを終了する
<a name="terminate-service-jobs"></a>

[https://docs.aws.amazon.com/batch/latest/APIReference/API_TerminateServiceJob.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_TerminateServiceJob.html) オペレーションを使用して、実行中のサービスジョブを停止します。

特定のサービスジョブを終了する:

```
aws batch terminate-service-job \
  --job-id a4d6c728-8ee8-4c65-8e2a-9a5e8f4b7c3d \
  --reason "Job terminated by user request"
```

サービスジョブを終了すると、 はジョブ AWS Batch を停止し、ターゲットサービスに通知します。SageMaker トレーニングジョブの場合、これにより SageMaker AI のトレーニングジョブも停止します。