

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

# 任務佇列
<a name="job_queues"></a>

任務會提交至其所在的任務佇列，直到可以排定在運算環境中執行。 AWS 帳戶可以有多個任務佇列。例如，您可以建立使用 Amazon EC2 隨需執行個體進行高優先順序任務的佇列，以及使用 Amazon EC2 Spot 執行個體進行低優先順序任務的另一個佇列。任務佇列具有排程器用來決定哪些任務應該先評估佇列以供執行的優先順序。

**Topics**
+ [建立任務佇列](create-job-queue.md)
+ [在 中檢視任務佇列 AWS Batch](job_queue_viewing_status.md)
+ [在 中刪除任務佇列 AWS Batch](delete-job-queue.md)
+ [公平共用排程政策](job_scheduling.md)
+ [資源感知排程](resource-aware-scheduling.md)
+ [配額管理](quota-management.md)

# 建立任務佇列
<a name="create-job-queue"></a>

您必須先建立任務佇列 AWS Batch，才能在 中提交任務。當您建立任務佇列時，您可以將一或多個運算環境與佇列建立關聯，並指派偏好順序。

您也可以將優先順序設定為任務佇列，以決定 AWS 批次排程器放置任務的順序。這表示，如果運算環境與多個任務佇列相關聯，則會指定優先順序較高的任務佇列。

**Topics**
+ [建立 Amazon EC2 任務佇列](create-job-queue-ec2.md)
+ [建立 Fargate 任務佇列](create-job-queue-fargate.md)
+ [建立 Amazon EKS 任務佇列](create-job-queue-eks.md)
+ [在 中建立 SageMaker 訓練任務佇列 AWS Batch](create-sagemaker-job-queue.md)
+ [任務佇列範本](job-queue-template.md)

# 建立 Amazon EC2 任務佇列
<a name="create-job-queue-ec2"></a>

請完成下列步驟，以建立 Amazon Elastic Compute Cloud (Amazon EC2) 的任務佇列。

**建立 Amazon EC2 任務佇列**

1. 在 https：//[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) 開啟 AWS Batch 主控台。

1. 從導覽列中，選取要 AWS 區域 使用的 。

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

1. 選擇**建立**。

1. 針對**協調類型**，選擇 **Amazon Elastic Compute Cloud (Amazon EC2)**。

1. 在**名稱**中，輸入任務佇列的唯一名稱。名稱長度上限為 128 個字元，且可包含大小寫字母、數字和底線 (\$1)。

1. 針對**優先順序**，輸入任務佇列優先順序的整數值。優先順序較高的任務佇列會在與相同運算環境相關聯的優先順序較低的任務佇列之前執行。優先順序會依遞減順序決定。例如，優先順序值為 10 的任務佇列的排程優先順序會高於優先順序值為 1 的任務佇列。

1. （選用） 針對**排程政策 Amazon Resource Name (ARN)**，選擇現有的排程政策。

1. 對於**連線的運算環境**，請從清單中選擇一或多個運算環境，以與任務佇列建立關聯。依您希望佇列嘗試放置任務佇列的順序選取運算環境。任務排程器會使用您在 中選取運算環境的順序，來判斷哪個運算環境會啟動指定的任務。運算環境必須處於 `VALID` 狀態，才能將它們與任務佇列建立關聯。您可以將多達三個運算環境與工作佇列建立關聯。如果您沒有現有的運算環境，請選擇**建立運算環境**
**注意**  
與任務佇列相關聯的所有運算環境必須共用相同的佈建模型。 AWS Batch 不支援在單一任務佇列中混合佈建模型。

1. 針對**運算環境順序**，選擇向上和向下箭頭以設定您想要的順序。

1. 選擇**建立任務佇列**以完成並建立您的任務佇列。

# 建立 Fargate 任務佇列
<a name="create-job-queue-fargate"></a>

完成下列步驟以建立任務佇列 AWS Fargate。

**建立 Fargate 任務佇列**

1. 在 https：//[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) 開啟 AWS Batch 主控台。

1. 從導覽列中，選取要 AWS 區域 使用的 。

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

1. 選擇**建立**。

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

1. 在**名稱**中，輸入任務佇列的唯一名稱。名稱長度上限為 128 個字元，且可包含大小寫字母、數字和底線 (\$1)。

1. 針對**優先順序**，輸入任務佇列優先順序的整數值。優先順序較高的任務佇列會在與相同運算環境相關聯的優先順序較低的任務佇列之前執行。優先順序會依遞減順序決定。例如，優先順序值為 10 的任務佇列的排程優先順序會高於優先順序值為 1 的任務佇列。

1. （選用） 針對**排程政策 Amazon Resource Name (ARN)**，選擇現有的排程政策。

1. 對於**連線的運算環境**，請從清單中選擇一或多個運算環境，以與任務佇列建立關聯。依您希望佇列嘗試放置任務佇列的順序選取運算環境。任務排程器會使用您在 中選取運算環境的順序，來判斷哪個運算環境會啟動指定的任務。運算環境必須處於 `VALID` 狀態，才能將它們與任務佇列建立關聯。您可以將多達三個運算環境與工作佇列建立關聯。
**注意**  
與任務佇列相關聯的所有運算環境必須共用相同的佈建模型。 AWS Batch 不支援在單一任務佇列中混合佈建模型。

1. 針對**運算環境順序**，選擇向上和向下箭頭以設定您想要的順序。

1. 選擇**建立任務佇列**以完成並建立您的任務佇列。

# 建立 Amazon EKS 任務佇列
<a name="create-job-queue-eks"></a>

請完成下列步驟，以建立 Amazon Elastic Kubernetes Service (Amazon EKS) 的任務佇列。

**建立 Amazon EKS 任務佇列**

1. 在 https：//[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) 開啟 AWS Batch 主控台。

1. 從導覽列中，選取要 AWS 區域 使用的 。

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

1. 選擇**建立**。

1. 針對**協調類型**，選擇 **Amazon Elastic Kubernetes Service (Amazon EKS)**。

1. 在**名稱**中，輸入任務佇列的唯一名稱。名稱長度上限為 128 個字元，且可包含大小寫字母、數字和底線 (\$1)。

1. 在 **Priority** (優先順序)，為任務佇列的優先順序輸入整數值。優先順序較高的任務佇列會在與相同運算環境相關聯的優先順序較低的任務佇列之前執行。優先順序會依遞減順序決定。例如，優先順序值為 10 的任務佇列的排程優先順序會高於優先順序值為 1 的任務佇列。

1. （選用） 針對**排程政策 Amazon Resource Name (ARN)**，選擇現有的排程政策。

1. 對於**連線的運算環境**，請從清單中選擇一或多個運算環境，以與任務佇列建立關聯。依您希望佇列嘗試放置任務佇列的順序選取運算環境。任務排程器會使用您在 中選取運算環境的順序，來判斷哪個運算環境會啟動指定的任務。運算環境必須處於 `VALID` 狀態，才能將它們與任務佇列建立關聯。您可以將多達三個運算環境與工作佇列建立關聯。
**注意**  
與任務佇列相關聯的所有運算環境必須共用相同的佈建模型。 AWS Batch 不支援在單一任務佇列中混合佈建模型。
**注意**  
與任務佇列相關聯的所有運算環境必須共用相同的架構。 AWS Batch 不支援在單一任務佇列中混合運算環境架構類型。

1. 針對**運算環境順序**，選擇向上和向下箭頭以設定您想要的順序。

1. 選擇**建立任務佇列**以完成並建立您的任務佇列。

# 在 中建立 SageMaker 訓練任務佇列 AWS Batch
<a name="create-sagemaker-job-queue"></a>

SageMaker Training 任務佇列會直接與 SageMaker AI 服務整合，以提供無伺服器任務排程，而不需要您管理基礎運算基礎設施。

## 先決條件
<a name="sagemaker-job-queue-prerequisites"></a>

在建立 SageMaker 訓練任務佇列之前，請確定您已：
+ **服務環境** – 定義容量限制的服務環境。如需詳細資訊，請參閱[在 中建立服務環境 AWS Batch](create-service-environments.md)。
+ **IAM 許可** – 建立和管理 AWS Batch 任務佇列和服務環境的許可。如需詳細資訊，請參閱[AWS Batch IAM 政策、角色和許可](IAM_policies.md)。

------
#### [ Create a SageMaker Training job queue (AWS Batch console) ]

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. （選用） 針對**排程政策 Amazon Resource Name (ARN)**，選擇現有的排程政策。

   1. 對於**連線的服務環境**，從清單中選擇服務環境，以與任務佇列建立關聯。

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

   1. 針對**設定錯誤**，選擇`SERVICE_ENVIRONMENT_MAX_RESOURCE`並輸入**最長執行時間 （秒）**。

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

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

------
#### [ Create a SageMaker Training job queue (AWS CLI) ]

使用 `create-job-queue`命令來建立 SageMaker Training 任務佇列。

下列範例會建立使用服務環境的基本 SageMaker Training 任務佇列：

```
aws batch create-job-queue \
  --job-queue-name my-sm-training-fifo-jq \
  --job-queue-type SAGEMAKER_TRAINING \
  --priority 1 \
  --service-environment-order order=1,serviceEnvironment=ExampleServiceEnvironment
```

以您的服務環境名稱取代 *ExampleServiceEnvironment*。

此命令會傳回類似以下的輸出：

```
{
  "jobQueueName": "my-sm-training-fifo-jq",
  "jobQueueArn": "arn:aws:batch:region:account:job-queue/my-sm-training-fifo-jq"
}
```

建立您的任務佇列後，請確認其已成功建立且處於有效狀態。

使用 `describe-job-queues`命令來檢視任務佇列的詳細資訊：

```
aws batch describe-job-queues --job-queues my-sm-training-fifo-jq
```

此命令會傳回類似以下的輸出：

```
{
  "jobQueues": [
    {
      "jobQueueName": "my-sm-training-fifo-jq",
      "jobQueueArn": "arn:aws:batch:region:account:job-queue/my-sm-training-fifo-jq",
      "state": "ENABLED",
      "status": "VALID",
      "statusReason": "JobQueue Healthy",
      "priority": 1,
      "computeEnvironmentOrder": [],
      "serviceEnvironmentOrder": [
        {
          "order": 1,
          "serviceEnvironment": "arn:aws:batch:region:account:service-environment/ExampleServiceEnvironment"
        }
      ],
      "jobQueueType": "SAGEMAKER_TRAINING",
      "tags": {},
      "jobStateTimeLimitActions": []
    }
  ]
}
```

請確定：
+ `state` 是 `ENABLED`
+ `status` 是 `VALID`
+ `statusReason` 是 `JobQueue Healthy`
+ `jobQueueType` 是 `SAGEMAKER_TRAINING`
+ `serviceEnvironmentOrder` 參考您的服務環境

------

# 任務佇列範本
<a name="job-queue-template"></a>

以下是空的任務佇列範本。您可以使用此範本來建立任務佇列。然後，您可以將此任務佇列儲存至檔案，並將其與 AWS CLI `--cli-input-json`選項搭配使用。如需這些參數的詳細資訊，請參閱 *AWS Batch API 參考*中的 [CreateJobQueue](https://docs.aws.amazon.com/batch/latest/APIReference/API_CreateJobQueue.html)。

**注意**  
您可以使用下列 AWS CLI 命令產生任務佇列範本。  

```
$ aws batch create-job-queue --generate-cli-skeleton
```

```
{
   "computeEnvironmentOrder": [ 
      { 
         "computeEnvironment": "",
         "order": 0
      }
   ],
   "jobQueueName": "",
   "jobStateTimeLimitActions": [ 
      { 
         "state": "RUNNABLE",
         "action": "CANCEL",
		 "maxTimeSeconds": 0,
         "reason": ""

      }
   ],
   "priority": 0,
   "schedulingPolicyArn": "",
   "state": "ENABLED",
   "tags": { 
      "KeyName": ""
   }
}
```

# 在 中檢視任務佇列 AWS Batch
<a name="job_queue_viewing_status"></a>

在您建立任務佇列並提交任務之後，請務必能夠監控其進度。您可以使用**任務詳細資訊**頁面來檢閱、管理和監控您的任務佇列。

## 檢視任務佇列資訊
<a name="view-job-queue-info"></a>

在 AWS Batch 主控台中，選取導覽窗格中**的任務佇列**，然後選擇所需的任務佇列以檢視其詳細資訊。在此頁面上，您可以檢閱和管理任務佇列，並查看佇列操作的其他資訊，例如任務佇列快照、任務狀態限制、環境順序、標籤和任務佇列的 JSON 程式碼。

### 任務佇列詳細資訊
<a name="job-queue-info-details"></a>

本節提供任務佇列的概觀和維護選項。請務必注意，您可以在本節中找到 Amazon Resource Name (ARN)。

若要透過 尋找此資訊 AWS Command Line Interface，請使用 [https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobQueues.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobQueues.html)操作搭配任務佇列名稱或對應的 ARN。

### 作用中共享
<a name="top-active-shares"></a>

對於使用公平共用排程的任務佇列， AWS Batch 提供不同共用識別符如何使用容量的可見性。此資訊可協助您了解資源分佈，並識別可能需要調整的共享。

**注意**  
只有在任務佇列的**排程演算法**為公平共用時，才會顯示**作用中**共用索引標籤。

前 20 個作用中共享區段會顯示已排程、開始和執行任務的共享識別符。此檢視包括：
+ **共用識別符名稱** - 共用的唯一識別符。

  共用識別符是將任務分組以進行公平共用排程的標籤。當您提交具有相同共用識別符的任務時， AWS Batch 會將它們視為相同工作負載的一部分，以用於資源配置。共用識別符有助於確保在不同團隊、專案或工作負載類型之間公平分配運算容量。如需詳細資訊，請參閱[使用共用識別符來識別工作負載](share-identifiers.md)。
+ **容量使用率** - 任務設定為使用的資源量。這是在 `instances`、 或 中測量`cpu`，`vCPU`取決於環境。
+ **檢視任務動作** - 查看該共享所有任務的連結。

您可以同時以清單和圖表格式檢視此資訊：
+ **清單檢視** - 具有確切容量編號的表格式顯示
+ **圖表檢視** - 顯示相對使用率的視覺化長條圖

### 任務佇列快照
<a name="job-queue-info-snapshot"></a>

本節提供佇列中前 100 個`RUNNABLE`任務的靜態清單。您可以使用搜尋欄位，從結果區段中的任何資料欄搜尋資訊，以縮小清單範圍。快照結果區域中的任務會根據任務佇列的執行策略進行排序。對於first-in-first-out(FIFO) 任務佇列，任務的順序是根據提交時間。對於[公平共用排程](fair-share-scheduling.md)任務佇列，任務的排序是根據任務優先順序和共用用量。**容量必要**欄位會顯示任務設定為使用的資源量。

由於結果是任務佇列的快照，因此結果清單不會自動更新。若要更新清單，請選擇區段頂端的重新整理。選擇任務的名稱超連結以導覽至**任務詳細資訊**，並檢視任務的狀態和其他相關資訊。

若要透過 尋找此資訊 AWS CLI，請使用 [https://docs.aws.amazon.com/batch/latest/APIReference/API_GetJobQueueSnapshot.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_GetJobQueueSnapshot.html)操作搭配任務佇列名稱或對應的 ARN。

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

### 任務狀態限制
<a name="job-queue-info-state-limits"></a>

使用此索引標籤來檢閱任務在取消之前可保持 `RUNNABLE` 狀態的時間組態資訊。

若要透過 尋找此資訊 AWS CLI，請使用 [https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobQueues.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobQueues.html)操作搭配任務佇列名稱或對應的 ARN。

### 環境順序
<a name="job-queue-info-env-order"></a>

如果您的任務佇列在多個環境中執行，此索引標籤會提供其順序和概觀。

若要透過 尋找此資訊 AWS CLI，請使用 [https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobQueues.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobQueues.html)操作搭配任務佇列名稱或對應的 ARN。

### Tags (標籤)
<a name="job-queue-info-tags"></a>

使用此索引標籤來檢閱和管理與此任務佇列相關聯的標籤。

### JSON
<a name="job-queue-info-json"></a>

使用此索引標籤來複製與此任務佇列相關聯的 JSON 程式碼。然後，您可以將 JSON 重複使用於 AWS CloudFormation 範本和 AWS CLI 指令碼。

# 在 中刪除任務佇列 AWS Batch
<a name="delete-job-queue"></a>

當您不再需要任務佇列時，您可以停用和刪除任務佇列。

------
#### [ Delete a job queue (AWS Batch console) ]

1. 在 https：//[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) 開啟 AWS Batch 主控台。

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

1. 選擇**動作**，然後選擇**停用**。

1. 一旦任務佇列的狀態**停用**，請選擇**動作**，然後選擇**刪除**。

1. 在模態視窗中，選擇**刪除任務佇列**。

------
#### [ Delete a job queue (AWS CLI) ]

1. 停用任務佇列以防止提交新的任務：

   ```
   aws batch update-job-queue \
     --job-queue my-sm-training-fifo-jq \
     --state DISABLED
   ```

1. 等待任何執行中的任務完成，然後刪除任務佇列：

   ```
   aws batch delete-job-queue \
     --job-queue my-sm-training-fifo-jq
   ```

------

# 公平共用排程政策
<a name="job_scheduling"></a>

 AWS Batch 排程器會評估何時、何處以及如何執行提交至任務佇列的任務。如果您在建立任務佇列時未指定排程政策， AWS Batch 任務排程器會預設為先進先出 (FIFO) 策略。FIFO 策略可能會導致重要的任務落後於先前提交的任務。透過指定不同的排程政策，您可以根據您的特定需求配置運算資源。

**注意**  
如果您想要排程任務執行的特定順序，請使用 [SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) 中的 `[dependsOn](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html#Batch-SubmitJob-request-dependsOn)` 參數來指定每個任務的相依性。

如果您建立排程政策並將其連接到任務佇列，則會開啟公平共用排程。如果任務佇列具有排程政策，則排程政策會決定任務執行的順序。如需詳細資訊，請參閱[使用公平共用排程政策來指派共用識別符](scheduling-policies.md)。

**Topics**
+ [使用共用識別符來識別工作負載](share-identifiers.md)
+ [使用公平共用排程政策來指派共用識別符](scheduling-policies.md)
+ [使用公平共用排程來協助排程任務](fair-share-scheduling.md)
+ [教學課程：建立公平共用排程政策](create-scheduling-policy.md)
+ [參考：公平共用排程政策範本](scheduling-policy-template.md)

# 使用共用識別符來識別工作負載
<a name="share-identifiers"></a>

您可以使用共用識別符來標記任務，並區分使用者和工作負載。 AWS Batch 排程器會使用 `(T * weightFactor)`公式追蹤每個共用識別符的用量，其中 *`T`* 是一段時間內的 vCPU 用量。排程器會從共用識別符挑選使用量最低的任務。您可以使用共用識別符，而不覆寫它。

**注意**  
共用識別符在任務佇列中是唯一的，不會跨任務佇列彙總。

您可以設定公平共用排程優先順序，以設定任務在共用識別符上執行的順序。排程優先順序較高的任務會先排程。如果您未指定公平共用排程政策，則提交至任務佇列的所有任務都會以 FIFO 順序排程。當您提交任務時，您無法指定共用識別符或公平共用排程優先順序。

**注意**  
除非明確覆寫，否則連接運算資源會在所有共用識別符中平均分配。

# 使用公平共用排程政策來指派共用識別符
<a name="scheduling-policies"></a>

您可以使用公平共用排程政策來設定如何在使用者或工作負載之間配置任務佇列中的運算資源。使用公平共用排程政策，您可以將不同的共用識別符指派給工作負載或使用者。 會 AWS Batch 為每個共用識別符指派一段時間內可用資源總數的百分比。

公平共用百分比是使用 `shareDecaySeconds`和 `shareDistribution`值計算。您可以透過將共用衰減時間指派給政策，將時間新增至公平共用分析。新增時間可增加時間的權重，減少定義的權重。您可以指定運算保留，為未處於作用中狀態的共用識別符保留運算資源。如需詳細資訊，請參閱 [SchedulingPolicyDetail](https://docs.aws.amazon.com/batch/latest/APIReference/API_SchedulingPolicyDetail.html)。

# 使用公平共用排程來協助排程任務
<a name="fair-share-scheduling"></a>

公平共用排程提供一組控制項，以協助排程任務。如需排程政策參數的詳細資訊，請參閱 [SchedulingPolicyDetail](https://docs.aws.amazon.com/batch/latest/APIReference/API_SchedulingPolicyDetail.html)。
+ **共用衰減秒數 –** AWS Batch 排程器用來計算每個共用識別符公平共用百分比的期間 （以秒為單位）。值為零表示只會測量目前的用量。較長的衰減時間可為時間提供更多權重。
**注意**  
衰減的期間計算方式為：*`shareDecaySeconds + OrderMinutes`*其中 *`OrderMinutes `*是以分鐘為單位的時間。
+ **運算保留 –** 防止單一共用識別符中的任務用完連接至任務佇列的所有資源。預留比率是 `(computeReservation/100)^ActiveFairShares`，其中 `ActiveFairShares`是作用中共享識別符的數量。
**注意**  
如果共用識別符的任務處於 `SUBMITTED`、`PENDING`、`STARTING`、 `RUNNABLE`或 `RUNNING` 狀態，則視為作用中的共用識別符。在衰減期間到期之後，共享識別符會被視為非作用中。
+ **權重因數 –** 共享識別符的權重因數。預設值為 1. 較低的值可讓共用識別符中的任務執行，或為共用識別符提供額外的執行時間。例如，使用權重因數為 0.125 (1/8) 之共用識別符的任務，會被指派為使用權重因數為 1 之共用識別符的任務運算資源的八倍。
**注意**  
只有在您需要更新預設權重因數為 1 時，才需要定義此屬性。

當任務佇列處於作用中狀態且正在處理任務時，您可以透過`RUNNABLE`任務佇列快照檢閱前 100 個任務的清單。如需詳細資訊，請參閱[在 中檢視任務佇列 AWS Batch](job_queue_viewing_status.md)。

# 教學課程：建立公平共用排程政策
<a name="create-scheduling-policy"></a>

您必須建立排程政策，才能使用排程政策建立任務佇列。當您建立公平共用排程政策時，您可以將一或多個共用識別符或共用識別符字首與佇列的權重建立關聯，並選擇性地將衰減期間和運算保留指派給政策。

**建立公平共用排程政策**

1. 在 https：//[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) 開啟 AWS Batch 主控台。

1. 從導覽列中選取要使用的「區域」。

1. 在導覽窗格中，選擇**排程政策**、**建立**。

1. 在**名稱**中，輸入排程政策的唯一名稱。可以包含最多可達 128 個字元 (大小寫)、數字、連字號和底線。

1. （選用） 針對**共用衰減秒**數，輸入公平共用排程政策的共用衰減時間的整數值。在排程任務時，較長的共用衰減時間將在較長的時間內使用更多的運算資源用量。這可以允許使用共用識別符的任務暫時使用比該共用識別符的權重更多的運算資源，如果該共用識別符最近未使用運算資源，則會允許該共用識別符。

1. （選用） 針對**運算保留**，輸入公平共用排程政策運算保留的整數值。運算保留將保留一些 vCPUs，以用於目前非作用中的共用識別符。

   預留比率是 `(computeReservation/100)^ActiveFairShares` *ActiveFairShares* 是作用中共享識別符的數量。

   例如，`computeReservation`值 50 表示如果只有一個共用識別符，則 AWS Batch 應該保留最大可用 VCPU 的 50%，如果有兩個共用識別符，則保留 25%，如果有三個共用識別符，則保留 12.5%。如果只有一個共用識別符，`computeReservation`則值為 25 表示 AWS Batch 應該保留最大可用 VCPU 的 25%，如果有兩個共用識別符，則保留 6.25%，如果有三個共用識別符，則保留 1.56%。

1. 在**共用屬性**區段中，您可以為要與公平共用排程政策建立關聯的每個共用識別符指定共用識別符和權重。

   1. 選擇**新增共用識別符**。

   1. 針對**共用識別符**，指定共用識別符。如果字串以「\$1」結尾，這將成為共享識別符字首，用於比對任務的共享識別符。排程政策中的所有共用識別符和共用識別符字首必須是唯一的且不能重疊。例如，您不能在相同的公平共用排程政策中具有共用識別符字首 'UserA\$1' 和共用識別符 'UserA1'。

   1. 針對**權重因**數，指定共用識別符的相對權重。預設值為 1.0。較低的值對於運算資源的優先順序較高。如果使用共用識別符字首，具有以字首開頭的共用識別符的任務將共用權重因素。這可有效地增加這些任務的權重因素，降低其個別優先順序，但維持共用識別符字首的相同權重因素。

1. （選用） 在**標籤**區段中，您可以指定要與排程政策建立關聯的每個標籤的索引鍵和值。如需詳細資訊，請參閱[標記您的 AWS Batch 資源](using-tags.md)。

1. 選擇**提交**以完成並建立排程政策。

# 參考：公平共用排程政策範本
<a name="scheduling-policy-template"></a>

空的公平共用排程政策範本如下所示。您可以使用此範本來建立排程政策，然後將其儲存至 檔案，並搭配 AWS CLI `--cli-input-json`選項使用。如需這些參數的詳細資訊，請參閱 *AWS Batch API 參考*中的 [CreateSchedulingPolicy](https://docs.aws.amazon.com/batch/latest/APIReference/API_CreateSchedulingPolicy.html)。

**注意**  
您可以使用下列 AWS CLI 命令產生任務佇列範本。  

```
$ aws batch create-scheduling-policy --generate-cli-skeleton
```

```
{
    "name": "",
    "fairsharePolicy": {
        "shareDecaySeconds": 0,
        "computeReservation": 0,
        "shareDistribution": [
            {
                "shareIdentifier": "",
                "weightFactor": 0.0
            }
        ]
    },
    "tags": {
        "KeyName": ""
    }
}
```

# 資源感知排程
<a name="resource-aware-scheduling"></a>

AWS Batch 根據 vCPU、GPU 和與任務佇列 (JQ) 相關聯的運算環境 (CE) 中的記憶體可用性來排程任務。但有時候，只有這些 CE 資源的可用性並不保證任務會成功執行，因為它可能取決於其他必要的資源，因此這些任務會被取消或終止。這會導致運算資源的使用效率降低。為了解決此問題，資源感知排程可以在排程任務在 CE 上執行之前檢查相依、非 CE 資源的可用性。

AWS Batch 資源感知排程可讓您根據執行任務所需的消耗性資源來排程任務：第三方授權字符、資料庫存取頻寬、調節對第三方 API 的呼叫等。您可以指定任務執行所需的消耗性資源，而 Batch 在排程任務時會將這些資源相依性納入考量。您可以避免手動介入，以消除因消耗性資源不足而導致的任務失敗和長時間等待。您可以只配置具有所有必要資源的任務，以減少運算資源的使用率不足。

資源感知排程適用於 FIFO 和公平共用排程政策，並可搭配 Batch 支援的所有運算平台使用，包括 EKS、ECS 和 Fargate。它可以與陣列任務、多節點平行 (MNP) 任務以及一般 Batch 任務搭配使用。

若要設定資源感知排程，請先指定執行任務所需的所有消耗性資源，以及每個資源的可用總數。然後，針對每個需要消耗性資源的任務，您可以指定每個所需資源的名稱和所需數量。批次會追蹤任務佇列中任務可用的消耗性資源數量，並確保任務排程只有在任務可成功執行所有必要的消耗性資源時才執行。

**Topics**
+ [建立消耗性資源](resource-aware-scheduling-how-to-create.md)
+ [指定執行任務所需的資源](resource-aware-scheduling-how-to-for-jobs.md)
+ [檢查有多少資源正在使用中且可用](resource-aware-scheduling-how-to-check-resources-check-resources.md)
+ [更新任務正在使用的資源數量](resource-aware-scheduling-how-to-update-quantity.md)
+ [尋找需要特定消耗性資源的任務](resource-aware-scheduling-how-to-find-jobs.md)
+ [刪除消耗性資源](resource-aware-scheduling-how-to-delete.md)

# 建立消耗性資源
<a name="resource-aware-scheduling-how-to-create"></a>

您必須先建立消耗性資源，以代表任務執行時消耗的非 CE 資源，並且只能以有限數量使用。每個消耗性資源都有一個：
+ 在帳戶層級必須是唯一的資源名稱 (`consumableResourceName`)。
+ （選用） 資源類型 (`resourceType`)，指出資源是否可在任務完成後重複使用。這可以是下列其中一項：
  + `REPLENISHABLE` (default)
  + `NON_REPLENISHABLE`
+ 總數量 (`totalQuantity`)，指定可用消耗性資源的總數。

每個帳戶的消耗性資源數目上限為 50k。

**主控台：**

1. 在[AWS Batch 主控台](https://console.aws.amazon.com/batch)的左側導覽面板中，選擇**消耗性資源**。

1. 選擇**建立消耗性資源**。

1. 輸入唯一的**資源名稱**、**總資源數量**，然後選取**資源類型**是**可補充**還是**不可補充**。

1. 選擇**建立消耗性資源**。

**API：**

使用 [`CreateConsumableResource` API](https://docs.aws.amazon.com/batch/latest/APIReference/API_CreateConsumableResource.html) 來定義您想要的資源。

# 指定執行任務所需的資源
<a name="resource-aware-scheduling-how-to-for-jobs"></a>

當您註冊任務時，您可以指定您建立的一或多個資源的名稱 (`consumableResource`)，以及每個任務執行個體所需的該資源數量 (`quantity`)。

批次會隨時追蹤每個資源的可用單位。對於任務佇列中的每個任務，批次排程器可確保您的任務僅在有指定的資源相依性可用時執行。

如果任務到達佇列前端時無法使用任務的消耗性資源，任務會等待`RUNNABLE`狀態，直到所有必要資源都可用或達到任務狀態時間限制 （請參閱 [在 中檢視任務佇列 AWS Batch](job_queue_viewing_status.md))。一旦 Batch 驗證所有資源都可用，任務就會轉換為 `STARTING` 狀態，然後轉換為 `RUNNING`。資源會在任務移至 時鎖定，`STARTING`然後在任務移至 `SUCCEEDED`或 時解除鎖定`FAILED`。

您也可以在提交任務時更新特定任務所需的資源數量。

**主控台：**

**若要在定義任務時指定資源及其所需的數量：**

1. 從[AWS Batch 主控台](https://console.aws.amazon.com/batch)使用任務定義精靈來定義任務 (**任務定義** -> **建立**)。

1. 在精靈的步驟 4：**設定容器**的**取用資源**下，從清單中選取所需資源**的名稱**。在**請求的值**欄位中，輸入此任務的執行個體所需的此資源數量，然後選擇**新增消耗性資源**。

1. 對任務所需的所有消耗性資源重複上一個步驟。您可以為您定義的每個任務指定最多 5 個資源。

1. 在完成任務定義精靈之後，但在選擇**建立任務定義**之前，您會看到已建立的消耗性資源清單。

**若要在提交任務時更新所需的資源數量：**

1. 在[AWS Batch 主控台](https://console.aws.amazon.com/batch)的左側導覽窗格中，選擇**任務**，然後選擇**提交新任務**。

1. 在精靈的步驟 2：**設定覆寫**中，**在消耗性資源覆寫**下，為要覆寫任務所需數量的任何消耗性資源輸入新的**請求值**。

1. 完成您要為此任務進行的所有覆寫後，請選擇**下一步**以繼續**檢閱並提交**。

**API：**

當您向 [`RegisterJobDefinition` API](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html) 註冊任務時，請使用請求`consumableResourceProperties`部分`consumableResourceList`中的 來指定執行任務執行個體所需的消耗性資源，以及每個資源的數量。

當您使用 [`SubmitJob` API](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) 提交任務時，您可以使用請求的 `consumableResourcePropertiesOverride`部分覆寫消耗性資源清單和每個資源的數量。請注意，這只會覆寫任務的每個執行個體所需的資源數量，而不是可用的總數量。

# 檢查有多少資源正在使用中且可用
<a name="resource-aware-scheduling-how-to-check-resources-check-resources"></a>

Batch 可讓您查詢可用資源的數目 (`availableQuantity`)、使用中的資源數目 (`inUseQuantity`)，以及指定時間的資源總數 (`totalQuantity`)。

一旦任務進入 `STARTING` 狀態，消耗的資源將從該資源的可用數量中減去。如果資源為 `REPLENISHABLE`，一旦任務移至 SUCCEEDED 或 FAILED 狀態，消耗的資源數量就會重新新增至可用數量，而總數量將保持不變。如果資源是 `NON_REPLENISHABLE`，耗用的資源數量會從總和可用數量中減去，而且無論任務移至 `SUCCEEDED`或 `FAILED` 狀態，都不會新增回去。

**注意**  
此資訊可能會延遲最多 30 秒。

**主控台：**

1. 在[AWS Batch 主控台](https://console.aws.amazon.com/batch)的左側導覽面板中，選擇**消耗性資源**。

1. 選取**可取代**或**不可取代**索引標籤，以檢視您已建立的該類型的資源。

1. 對於每個**可補充**的資源，主控台會顯示**名稱**、資源**的總**數量、目前**使用中的**數量和仍然**可用的**數量，以及**使用率**的計算 （使用中的資源數量除以該資源的總數量）。

   對於每個**不可取代**的資源，主控台會顯示**名稱**、目前**使用中的**數量，以及仍然**可用的**數量。

您也可以從 主控台中的任務詳細資訊頁面檢視有關消耗性資源的目前資訊。

1. 在[AWS Batch 主控台](https://console.aws.amazon.com/batch)的左側導覽面板中，選擇**任務**，然後選取任務的名稱以開啟該任務的詳細資訊頁面。

1. 如果任務需要，則可檢視**可取代資源**和**不可取代資源**的相關資訊。對於這兩種類型，主控台會顯示資源**的名稱**、任務**的請求**數量、剩餘**數量**、目前**使用中的**數量、資源**的總**數量，以及**目前使用率**的計算 （任務使用中的資源數量除以該資源的總數量）。

**API：**

使用傳回下列資訊的 [`DescribeConsumableResource` API](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeConsumableResource.html)：

```
{
   "availableQuantity": number,
   "consumableResourceArn": "string",
   "consumableResourceName": "string",
   "createdAt": number,
   "inUseQuantity": number,
   "resourceType": "string",
   "tags": { 
      "string" : "string" 
   },
   "totalQuantity": number
}
```

[`ListConsumableResources` API](https://docs.aws.amazon.com/batch/latest/APIReference/API_ListConsumableResources.html) 也會報告使用中的資源數量 (`inUseQuantity`) 和目前可用的資源總數 (`totalQuantity`)，做為您在帳戶中建立的所有消耗性資源清單的一部分。此 API 也可讓您根據消耗性資源名稱篩選消耗性資源清單查詢。

# 更新任務正在使用的資源數量
<a name="resource-aware-scheduling-how-to-update-quantity"></a>

您可以將資源的總數量重設為新值、新增至總數量或從中減去。

如果您指定的新總數量大於之前的數量，批次會相應地排程更多任務。如果新的總數量少於之前的數量，而且沒有使用此資源的單位，則 Batch 只會減少總 （或可用的） 數量。如果有使用中的單位，Batch 會立即減少可用數量，並在任務完成時，Batch 會減少總 （可用） 數量，使其最終到達新的數量。

**主控台：**

1. 在[AWS Batch 主控台](https://console.aws.amazon.com/batch)的左側導覽面板中，選擇**消耗性資源**。

1. 選取**可取代**或**不可取代**索引標籤，以檢視您已建立的該類型的資源。

1. 對於**可取代**的資源：

   1. 選擇您要更新的資源，然後選擇**動作**，然後選擇**設定資源**、**新增資源**或**移除資源**。

   1. 出現快顯視窗，您可以在其中**設定總值**、**新增資源**或**移除資源**，具體取決於您在上一個步驟中選擇的動作。輸入要設定為新總值的數量、要新增至總數量，或是要從總數量中減去的數量，然後選取**確定**。

   對於**不可取代**的資源：

   1. 選擇您要更新的資源，然後選擇**動作**，然後選擇**設定資源**、**新增資源**或**移除資源**。

   1. 出現快顯視窗，您可以在其中**設定可用值**、**新增資源**或**移除資源**，具體取決於您在上一個步驟中選擇的動作。輸入您要設定為新可用值的數量、您要新增至可用數量，或您要從可用數量中減去的數量，然後選取**確定**。

**API：**

使用 [`UpdateConsumableResource` API](https://docs.aws.amazon.com/batch/latest/APIReference/API_UpdateConsumableResource.html) 為資源設定新的總數量，或增加或減少總數量。

# 尋找需要特定消耗性資源的任務
<a name="resource-aware-scheduling-how-to-find-jobs"></a>

Batch 可讓您擷取需要特定消耗性資源的任務清單。

**主控台：**

1. 在[AWS Batch 主控台](https://console.aws.amazon.com/batch)的左側導覽面板中，選擇**消耗性資源**。

1. 在清單中，選取消耗性資源的名稱。該資源的詳細資訊頁面隨即開啟。

1. 在**搜尋任務**下，輸入您要套用至任務清單的任何篩選條件。您可以依**任務名稱** ('equals'， 'starts with')、**日期範圍** （建立任務時） 和其他**條件** ('job queue'， 'job definition'， 'shared job identifier') 進行篩選。對於您要套用的每種篩選條件類型，請從下拉式清單中的可用選項中選取，然後輸入請求的任何其他資訊。

   選擇 **Search** (搜尋)。

1. 隨即顯示需要消耗性資源的任務清單 （篩選），包括任務的名稱、狀態、消耗性資源的請求單位數量、其他所需的消耗性資源等。使用此清單，您可以選取要**取消**或終止的一或多個任務****。您也可以選取任務的名稱，以開啟該任務的詳細資訊頁面。

1. 在**搜尋任務**下，您現在可以**重新整理結果**或**清除搜尋**並重新開始。

**API：**

您可以取得搭配 [`ListJobsByConsumableResource` API](https://docs.aws.amazon.com/batch/latest/APIReference/API_ListJobsByConsumableResource.html) 使用特定消耗性資源的任務清單。此 API 也可讓您使用任務狀態或任務名稱來篩選任務清單查詢。

# 刪除消耗性資源
<a name="resource-aware-scheduling-how-to-delete"></a>

您可以隨時刪除消耗性資源，即使需要資源的任務仍在執行中。刪除消耗性資源後，在收到刪除命令和任務排程器遵守刪除之間可能會有間隙，因此可能會在刪除呼叫後立即排程使用資源的任務。如果已刪除的消耗性資源具有資源類型 (`resourceType`) `REPLENISHABLE`，則會在任務完成時忽略此項目。如果您刪除消耗性資源並以相同名稱重新建立該資源，則會將其視為相同資源，並且可供`RUNNABLE`任務使用。

**主控台：**

1. 在[AWS Batch 主控台](https://console.aws.amazon.com/batch)的左側導覽面板中，選擇**消耗性資源**。

1. 選取**可取代**或**不可取代**索引標籤，以檢視您已建立的該類型的資源。

1. 選取您要刪除的每個資源，然後選擇**刪除**。隨即出現快顯視窗 **刪除消耗性資源**。如要確認刪除，請選擇 **Delete (刪除)**。

您也可以從 主控台的詳細資訊頁面刪除消耗性資源。

1. 在[AWS Batch 主控台](https://console.aws.amazon.com/batch)的左側導覽面板中，選擇**消耗性資源**。

1. 選取**可取代**或**不可取代**索引標籤，以檢視您已建立的該類型的資源。

1. 選擇您要刪除的資源名稱。消耗性資源的詳細資訊頁面隨即出現。選擇 **刪除**。隨即出現快顯視窗 **刪除消耗性資源**。如要確認刪除，請選擇 **Delete (刪除)**。

**API：**

使用 [`DeleteConsumableResource` API](https://docs.aws.amazon.com/batch/latest/APIReference/API_DeleteConsumableResource.html) 刪除消耗性資源。

# 配額管理
<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}}'"
```