

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 配額管理
<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 個。配額共享可透過使用**容量限制**，將運算配額分配給團隊或專案；配額共享需要提供至少一個容量限制，並支援最多 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`、 `STARTING`或 `RUNNING`任務符合先佔資格，即使`RESERVE`已選取 `LEND` 或 作為資源共享策略，如果該配額共享已耗用的容量高於其降低的容量限制。

# 先佔
<a name="preemption"></a>

配額管理是唯一納入**先佔**的 AWS Batch 排程演算法，其中 會 AWS Batch 停止 `SCHEDULED`、 `STARTING`或 `RUNNING`任務來為`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：//[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) 開啟 AWS Batch 主控台。

1. 在導覽窗格中，選擇**任務佇列**，然後選擇**建立**。

1. 針對**協調類型**，選擇 **SageMaker Training**。

1. 對於**任務佇列組態**：

   1. 在**名稱**中，輸入任務佇列的名稱。

   1. 針對 **Priority**，輸入介於 0 到 1000 之間的值。具有較高優先順序的任務佇列會優先於服務環境。

1. 對於**排程**：

   1. 針對**排程演算法**，選擇**配額管理**。

   1. 對於**排程政策 ARN**：
      + 如果已經存在指定配額管理的排程政策，請從下拉式清單中選取它。
      + 否則，請選擇**建立排程政策**。

        1. 邊欄隨即開啟，以設定配額管理排程政策。

        1. 提供排程政策**的名稱**。

        1. 選擇**建立**。**排程政策 ARN** 欄位現在已填入。

1. 對於**服務環境**組態，在**連線服務環境**下：
**注意**  
啟用配額管理的服務環境只能連接到啟用配額管理的任務佇列。

   1. 如果已建立與配額管理相容的服務環境，且尚未連線至已啟用配額管理的任務佇列，請從下拉式清單中選取它。

   1. 否則，請選擇**建立服務環境**。邊欄會開啟以設定服務環境。

      1. 提供服務環境**的名稱**。

      1. 提供至少一個容量限制 （最多 5 個）。針對每個容量限制，從下拉式清單中選擇**執行個體類型**，以及**執行個體數量上限**。

1. （選用） 對於**任務狀態限制**：

   1. 對於**設定錯誤**，請選擇其中一個`SERVICE_ENVIRONMENT_MAX_RESOURCE`，然後輸入**最長可執行時間 （秒）**。

   1. 針對**容量**，選擇`INSUFFICIENT_INSTANCE_CAPACITY`並輸入**最大執行時間 （秒）**。

1. 選擇**建立任務佇列**。

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

若要透過 CLI AWS 設定配額管理，請建立排程政策、服務環境和任務佇列。排程政策和服務環境都必須與配額管理相容，並在建立任務佇列之前建立。

**建立排程政策**

使用 `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 Training 任務接受的執行個體類型，例如 `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>

Quota 會以虛擬佇列的形式共用 函數，在 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：//[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) 開啟 AWS Batch 主控台。

1. 在導覽窗格中，選擇**任務佇列**，然後從清單中選擇已啟用配額管理的任務佇列。選擇任務佇列名稱連結。

1. 在**配額共享**區段中，選擇**建立配額共享**。

1. 提供配額共享**的名稱**。

1. 針對**容量限制**，選擇**新增容量限制**。必須指定至少一個容量限制。

   1. 從下拉式清單中選取**執行個體類型**，並設定此配額共用已配置給它的**執行個體上限**。

   1. （選用） 選擇**新增容量限制**，然後重複 以連接最多五個容量限制。

1. 針對**容量共用**，選擇此配額如何與相同任務佇列中的其他配額共用共用其容量：
   + 如果配額共享不應借出或借用閒置運算，請選取**預留**。
   + 如果配額共享可以將閒置運算借給其他配額共享，請選取 **Lend**。
   + 如果配額共享可以借出和借出閒置運算，則選取**借出**，並在工作送達時透過跨共用先佔回收借出運算。

1. （選用） 對於**共用中先佔**，選擇是否啟用或停用共用中先佔。啟用共用中先佔允許較高優先順序的任務先佔已處於 `SCHEDULED`、 `STARTING`或 `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}}'"
```