

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

# クォータ管理
<a name="quota-management"></a>

AWS Batch は、ジョブに必要なリソースと接続されたサービス環境 (SE) で使用可能な容量に基づいてジョブをスケジュールし、コンピューティングリソースの使用率を高めます。クォータ管理を使用すると、管理者は、チームまたはプロジェクトがよりきめ細かなリソース割り当てを通じて消費できるリソースの数を制御することもできます。

クォータ管理を使用すると、管理者は関連する**クォータ共有**を定義することで、チームやプロジェクト間で共有コンピューティングリソースを効率的に割り当てることができます。これには、アイドル状態のコンピューティングのコンピューティングクォータ (**容量制限**) とリソース共有戦略を含む AWS Batch リソースが含まれます。各クォータ共有は、関連付けられたジョブキュー内にネストされた仮想キューとして動作します。ジョブキューのジョブをスケジュールする場合、 AWS Batch はアタッチされたすべてのクォータ共有を反復処理します。

管理者は、クォータ共有間のリソース共有を自信を持って有効にできます。**これは**、任意のクォータ共有が必要に応じて他のユーザーに貸したリソースを再利用できるようにするためです。クォータ共有内で、実行中のジョブを優先度の高いジョブに優先させるか、実行中のジョブを完了させるかを選択できます。ジョブの優先順位は送信時に設定し、後で更新できます。更新された優先順位は、プリエンプションの決定が行われる際に考慮されます。キャパシティ使用率は、キュー、クォータ共有、ジョブレベルの粒度でモニタリングできます。

クォータ管理は、`SAGEMAKER_TRAINING`サービス環境に接続されたジョブキューでのみサポートされます。

**Topics**
+ [クォータ共有](quota-shares.md)
+ [プリエンプション](preemption.md)
+ [クォータ管理リソースを作成する](create-quota-management-resources.md)
+ [クォータ共有の作成](create-quota-shares.md)
+ [クォータ共有へのジョブの送信](submit-job-quota-share.md)

# クォータ共有
<a name="quota-shares"></a>

**クォータ共有**は、ジョブキューの下にネストされる仮想キューです。最大 20 個のジョブキューにアタッチできます。クォータ共有では、**容量制限**を使用してチームまたはプロジェクトにコンピューティングクォータを割り当てることができます。クォータ共有には、少なくとも 1 つの容量制限を指定する必要があり、最大 5 つの容量制限をサポートします。各容量制限は、サポートされている SageMaker Training ジョブインスタンスタイプのインスタンス制限として表現する必要があります。

## クォータ共有リソース共有戦略
<a name="quota-share-resource-sharing"></a>

クォータ共有には、明示的なリソース共有設定もあります。
+ クォータ共有のアイドル状態のコンピューティングをジョブのみ用に予約する必要がある場合は、 を選択します`RESERVE`。
+ クォータ共有のアイドルコンピューティングを他のクォータ共有に貸すことができる場合は、 を選択します`LEND`。
+ クォータ共有のアイドルコンピューティングを他のクォータ共有に貸すことができ、クォータ共有のジョブにアイドルコンピューティングの借用を許可する場合は、設定された借用制限`LEND_AND_BORROW`で を選択します。

## プリエンプションによるキャパシティの復元
<a name="capacity-limit-restoration"></a>

AWS Batch ジョブが到着すると、 **はクロスシェアプリエンプション**を実行して、借用容量をクォータ共有に復元します。どのジョブを優先するかを選択する場合、 はジョブが借用するインスタンスの数とタイプ、ジョブの相対的な優先順位とジョブの期間 AWS Batch を考慮し、カスタムヒューリスティックを適用します。

クォータ共有の容量制限を引き下げる管理者は`SCHEDULED`、 または がリソース共有戦略として`RESERVE`選択された場合でも`STARTING`、そのクォータ共有内の 、、`LEND`または `RUNNING`ジョブをプリエンプションの対象にすることもできます。

# プリエンプション
<a name="preemption"></a>

クォータ管理は**、プリエンプション**を組み込む唯一の AWS Batch スケジューリングアルゴリズムです。 は、、`STARTING`、または `SCHEDULED``RUNNING`ジョブ AWS Batch を停止して`RUNNABLE`、ジョブの容量を作成します。

## クロス共有のプリエンプション
<a name="cross-share-preemption"></a>

クォータ管理では**、クロスシェアプリエンプション**を使用して、ジョブの到着時に借用キャパシティをクォータ共有に復元します。

クォータ共有の容量制限を引き下げる管理者は`SCHEDULED`、そのクォータ共有によって消費される容量が設定された容量制限を上回った場合、そのクォータ共有内の `STARTING`、、または `RUNNING`ジョブをプリエンプションの対象にすることもできます。

## 共有内プリエンプション
<a name="in-share-preemption"></a>

クォータ共有は**、共有内プリエンプション**を有効にするように設定できます。これにより、優先度の高い`RUNNABLE`ジョブは、`SCHEDULED`、、`STARTING`または に入ったのと同じクォータ共有内で優先度の低いジョブのプリエンプションをトリガーできます`RUNNING`。

## プリエンプション選択アルゴリズム
<a name="preemption-selection-algorithm"></a>

どのジョブを優先するかを選択するときは、ジョブが借用するインスタンスの数とタイプ、ジョブの相対的な優先順位、ジョブの期間 AWS Batch を考慮し、カスタムヒューリスティックを適用します。[UpdateServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_UpdateServiceJob.html) API コールを使用して、送信後にジョブ`schedulingPriority`の を更新できます。これは、`RUNNING`ジョブの優先度を下げる (プリエンプションの可能性を高める) か、共有プリエンプションを有効にしてクォータ共有の`RUNNABLE`ジョブの優先度を上げることで、ジョブが既に実行中のジョブをプリエンプションできるようにするのに役立ちます。

## プリエンプションの再試行
<a name="preemption-retries"></a>

デフォルトでは、プリエンプションされたジョブは制限`RUNNABLE`なしで として再キューに入れられます。ジョブで発生するプリエンプションの数を制限するには、ジョブの送信`preemptionRetriesBeforeTermination`時に を設定します。`preemptionRetriesBeforeTermination` が 0 に設定されている場合、ジョブは最初のプリエンプション`FAILED`で になります。

最近のプリエンプション試行のスライディングウィンドウがジョブに保存され、[DescribeServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeServiceJob.html) を介して表示されます。

# クォータ管理リソースを作成する
<a name="create-quota-management-resources"></a>

クォータ管理では、関連するスケジューリングポリシー、サービス環境、ジョブキューを作成するときに特定の設定が必要です。

## 前提条件
<a name="quota-management-resources-prerequisites"></a>

クォータ管理リソースを作成する前に、以下があることを確認してください。
+ **IAM アクセス許可** – ジョブキュー、スケジューリングポリシー、サービス環境を作成 AWS Batch および管理するためのアクセス許可。詳細については、「[AWS Batch IAM ポリシー、ロール、アクセス許可](IAM_policies.md)」を参照してください。

------
#### [ Configure quota management resources (AWS Batch console) ]

 AWS Batch コンソールには、クォータ管理に必要なすべてのリソースを作成するための統合ワークフローが用意されています。クォータ管理ジョブキュー作成ワークフローでは、クォータ管理が有効なスケジューリングポリシーとサービス環境も作成されます。

1. [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) で AWS Batch コンソールを開きます。

1. ナビゲーションペインで、**ジョブキュー**を選択し、**作成**を選択します。

1. **[オーケストレーションタイプ]** で、**[SageMaker トレーニング]** を選択します。

1. **[ジョブキューの設定]** で以下を行います。

   1. Name に****、ジョブキューの名前を入力します。

   1. **Priority** には、0～1000 の値を入力します。サービス環境では、優先度の高いジョブキューが優先されます。

1. **スケジューリングの場合**:

   1. **スケジュールアルゴリズム**で、**クォータ管理**を選択します。

   1. **スケジュールポリシー ARN** の場合:
      + クォータ管理を指定するスケジューリングポリシーが既に存在する場合は、ドロップダウンから選択します。
      + それ以外の場合は、**スケジュールポリシーの作成**を選択します。

        1. サイドバーが開き、クォータ管理スケジューリングポリシーを設定します。

        1. スケジューリングポリシー**の名前**を指定します。

        1. **[作成]** を選択します。**これで、スケジューリングポリシー ARN** フィールドが入力されました。

1. **サービス環境**設定の場合、**接続されたサービス環境**:
**注記**  
クォータ管理が有効なサービス環境は、単一のクォータ管理が有効なジョブキューにのみ接続できます。

   1. クォータ管理と互換性があり、クォータ管理が有効なジョブキューにまだ接続されていないサービス環境が既に作成されている場合は、ドロップダウンから選択します。

   1. それ以外の場合は、**サービス環境の作成**を選択します。サイドバーが開き、サービス環境を設定します。

      1. サービス環境**の名前**を指定します。

      1. 容量制限を少なくとも 1 つ (最大 5 つ) 指定します。容量制限ごとに、ドロップダウンから**インスタンスタイプ**を選択し、**インスタンスの最大数**を選択します。

1. (オプション) **[ジョブ状態の制限]** の場合:

   1. **設定ミス**の場合は、いずれかを選択し`SERVICE_ENVIRONMENT_MAX_RESOURCE`、**最大実行可能時間 (秒)** を入力します。

   1. **[容量]** の場合、`INSUFFICIENT_INSTANCE_CAPACITY` を選択し、**[最大実行可能時間 (秒)]** を入力します。

1. **ジョブキューの作成** を選択します。

------
#### [ Configure quota management resources (AWS CLI) ]

 AWS CLI を使用してクォータ管理を設定するには、スケジューリングポリシー、サービス環境、ジョブキューを作成します。スケジューリングポリシーとサービス環境の両方がクォータ管理と互換性があり、ジョブキューを作成する前に作成されている必要があります。

**スケジューリングポリシーを作成する**

`create-scheduling-policy` コマンドを使用して、クォータ管理と互換性のあるスケジューリングポリシーを作成します。作成時にクォータ共有ポリシーを指定します。

```
aws batch create-scheduling-policy \
  --name my-qm-sagemaker-scheduling-policy \
  --quota-share-policy idleResourceAssignmentStrategy="FIFO"
```

スケジューリングポリシーが正常に作成されたことを確認します。

```
aws batch describe-scheduling-policies \
  --arns arn-for-my-qm-sagemaker-scheduling-policy
```

**サービス環境を作成する**

`create-service-environment` コマンドを使用して、クォータ管理が有効なサービス環境を作成します。容量制限で、SageMaker トレーニングジョブが受け入れる `ml.g6.xlarge`や などのインスタンスタイプを使用していることを確認します`ml.p4d.24xlarge`。

```
aws batch create-service-environment \
  --service-environment-name my-qm-sagemaker-service-env \
  --service-environment-type SAGEMAKER_TRAINING \
  --capacity-limits capacityUnit=instance_type,maxCapacity=instance_count
```

サービス環境が正常に作成されたことを確認します。

```
aws batch describe-service-environments \
  --service-environments my-qm-sagemaker-service-env
```

**ジョブキューを作成する**

`create-job-queue` コマンドを使用して、クォータ管理が有効なジョブキューを作成します。以下の条件を満たす必要があります。
+ 現在別のジョブキューに接続されていない単一の`SAGEMAKER_TRAINING`サービス環境を提供する必要があります。
+ サービス環境は、 `ml.m6i.xlarge`ではなく などのインスタンスタイプの観点から容量制限を表現する必要があります`NUM_INSTANCES`。
+ を含むスケジューリングポリシーを接続する必要があります`quotaSharePolicy`。
+ `jobQueueType` は `SAGEMAKER_TRAINING` でなければなりません。

```
aws batch create-job-queue \
  --job-queue-name my-qm-sagemaker-jq \
  --job-queue-type SAGEMAKER_TRAINING \
  --priority 1 \
  --service-environment-order order=1,serviceEnvironment=my-qm-sagemaker-service-env \
  --scheduling-policy-arn arn-for-my-qm-sagemaker-scheduling-policy
```

ジョブキューが正常に作成されたことを確認します。

```
aws batch describe-job-queues \
  --job-queues my-qm-sagemaker-jq
```

以下を確認してください。
+ `state` は、`ENABLED` です。
+ `status` は、`VALID` です。
+ `statusReason` は、`JobQueue Healthy` です。

------

# クォータ共有の作成
<a name="create-quota-shares"></a>

クォータ共有は、スケジューリング時にスケジューラが AWS Batch 反復する、関連付けられたジョブキュー内の仮想キューとして機能します。これにより、管理者は を介してチームまたはプロジェクトにコンピューティングクォータを割り当て` capacity limits `、リソース共有戦略を明示的に設定できます。

## 前提条件
<a name="create-quota-shares-prerequisites"></a>

クォータ共有を作成する前に、以下があることを確認してください。
+ **クォータ管理スケジューリングポリシー、サービス環境、ジョブキュー** – クォータ管理を有効にしたクォータ管理スケジューリングポリシー、サービス環境、ジョブキュー。詳細については、「[クォータ管理リソースを作成する](create-quota-management-resources.md)」を参照してください。
+ **IAM アクセス許可** – クォータ共有を作成および管理 AWS Batch するためのアクセス許可。詳細については、「[AWS Batch IAM ポリシー、ロール、アクセス許可](IAM_policies.md)」を参照してください。

------
#### [ Configure quota shares (AWS Batch console) ]

1. [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) で AWS Batch コンソールを開きます。

1. ナビゲーションペインで、**ジョブキュー**を選択し、リストからクォータ管理が有効なジョブキューを選択します。ジョブキュー名リンクを選択します。

1. **「クォータ共有**」セクションで、**「クォータ共有の作成**」を選択します。

1. クォータ共有**の名前**を指定します。

1. **容量制限** で、**容量制限の追加** を選択します。少なくとも 1 つの容量制限を指定する必要があります。

   1. ドロップダウンから**インスタンスタイプ**を選択し、このクォータ共有が割り当てた**最大インスタンス**数を設定します。

   1. (オプション) **容量制限を追加**を選択し、最大 5 つの容量制限をアタッチするように繰り返します。

1. **キャパシティ共有**では、このクォータ共有が同じジョブキュー内の他のクォータ共有とキャパシティを共有する方法を選択します。
   + クォータ共有がアイドル状態のコンピューティングを貸したり借用したりしない場合は、**Reserve** を選択します。
   + クォータ共有が他のクォータ共有にアイドルコンピューティングを貸すことができる場合は、**Lend** を選択します。
   + クォータ共有がアイドルコンピューティングの貸し出しと借用の両方が可能な場合は**、貸し出しと**借用を選択します。作業が到着すると、貸し出しコンピューティングはクロスシェアプリエンプションによって再利用されます。

1. (オプション) **In-share preemption** で、In-share preemption を有効または無効にするかどうかを選択します。共有プリエンプションを有効にすると、優先度の高いジョブは`STARTING`、既に `SCHEDULED`、、または `RUNNING`状態にある優先度の低いジョブよりも優先されます。共有プリエンプションを無効にすると、優先度の高いジョブは容量が利用可能になるまで待機します。

1. **クォータ共有の作成** を選択します。

------
#### [ Configure quota shares (AWS CLI) ]

`create-quota-share` コマンドを使用して、クォータ共有を作成します。リソース共有戦略と、共有内プリエンプションを有効にするかどうかを選択する必要があります。

**借用と借用の例**

次の例では、設定された容量制限の 100% の借用制限で、アイドル容量を貸し借りできるクォータ共有を作成します。また、共有プリエンプションを有効にするため、優先度の高いジョブは、SageMaker AI 内でスケジュールされた優先度の低いジョブが完了するまで待機しません。

```
aws batch create-quota-share \
  --quota-share-name lend_and_borrow_qs \
  --job-queue my-qm-sagemaker-jq \
  --capacity-limits maxCapacity=5,capacityUnit=ml.m6i.large \
  --resource-sharing-configuration strategy=LEND_AND_BORROW,borrowLimit=100 \
  --preemption-configuration inSharePreemption=ENABLED
```

**レンドのみの例**

クォータ共有はアイドル容量のみを貸すように設定できますが、自分で借用することはできません。次の例では`LEND`、共有内プリエンプションを無効にするとペアになります。

```
aws batch create-quota-share \
  --quota-share-name lend_qs \
  --job-queue my-qm-sagemaker-jq \
  --capacity-limits maxCapacity=8,capacityUnit=ml.m6i.large \
  --resource-sharing-configuration strategy=LEND \
  --preemption-configuration inSharePreemption=DISABLED
```

**予約の例**

クォータ共有は、アイドル容量を予約するように設定することもできます。クォータ共有にアイドルキャパシティがある場合、新しく送信されたジョブはより早く開始される可能性がありますが、クォータ共有にジョブがない場合、キュー全体の使用率が低くなります。

```
aws batch create-quota-share \
  --quota-share-name reserved_qs \
  --job-queue my-qm-sagemaker-jq \
  --capacity-limits maxCapacity=2,capacityUnit=ml.m6i.large \
  --resource-sharing-configuration strategy=RESERVE \
  --preemption-configuration inSharePreemption=DISABLED
```

------

# クォータ共有へのジョブの送信
<a name="submit-job-quota-share"></a>

クォータ管理ジョブキューでは、ジョブの送信時にすべてのジョブでクォータ共有を指定する必要があります。クォータ共有にジョブを送信するには、[SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html) `quotaShareName`で を指定します。オプションで を指定して、ジョブの試行が に入るまでのプリエンプションの試行回数を制限`preemptionConfiguration`できます`FAILED`。ジョブで発生するプリエンプションの数を制限するには、ジョブの送信時に [ServiceJobPreemptionConfiguration](https://docs.aws.amazon.com/batch/latest/APIReference/API_ServiceJobPreemptionConfiguration.html) `preemptionRetriesBeforeTermination`内で を設定します。

## を使用してジョブを送信する AWS CLI
<a name="submit-job-quota-share-cli"></a>

次の例では、 **submit-service-job** コマンドを使用してジョブをクォータ共有に送信します。

```
aws batch submit-service-job \
    --job-name "my-sagemaker-training-job" \
    --job-queue "my-sagemaker-job-queue" \
    --service-job-type "SAGEMAKER_TRAINING" \
    --quota-share-name "my_quota_share" \
    --timeout-config '{"attemptDurationSeconds":3600}' \
    --scheduling-priority 5 \
    --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}}'"
```