

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 作业队列
<a name="job_queues"></a>

作业将提交到作业队列，并将一直存放在队列中，直到能够在计算环境中计划运行这些作业。一个 AWS 账户可以有多个任务队列。例如，可以为高优先级作业创建一个使用 Amazon EC2 按需型实例的队列，为低优先级作业创建另一个使用 Amazon EC2 竞价型实例的队列。作业队列具有优先级，调度器使用该优先级来确定应评估哪个队列中的作业首先执行。

**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)
+ [在 AWS Batch 中创建 SageMaker 训练作业队列](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. 打开AWS Batch控制台，地址：[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/)。

1. 从导航栏中，选择要使用的AWS 区域。

1. 在导航窗格中，选择 **作业队列**。

1. 选择**创建**。

1. 对于**编排类型**，选择 **Amazon Elastic Compute Cloud (Amazon EC2)**。

1. 对于**名称**，为作业队列输入唯一名称。名称可以长达 128 个字符，可以包含大小写字母、数字及下划线 (\$1)。

1. 对于**优先级**，为作业队列的优先级输入一个整数值。具有较高优先级的作业队列在与同一计算环境关联的较低优先级作业队列之前运行。优先级按降序确定。例如，优先级值为 10 的任务队列将会比优先级值为 1 的任务队列优先计划。

1. （可选）对于**计划策略 Amazon 资源名称（ARN）**，请选择现有的计划策略。

1. 对于 **连接的计算环境**，从列表中选择一个或多个计算环境，以便与作业队列关联。按照您希望队列尝试放置作业队列的顺序选择计算环境。作业计划程序使用您选择的计算环境顺序来确定哪些计算环境应启动给定作业。计算环境必须先处于 `VALID` 状态，然后您才能将其与作业队列关联。最多可以将三个计算环境与一个作业队列关联。如果您没有现有的计算环境，请选择**创建计算环境**
**注意**  
与作业队列关联的所有计算环境必须共享同一配置模型。AWS Batch 不支持在单个作业队列中混合使用配置模型。

1. 对于**计算环境顺序**，选择向上和向下箭头以配置所需的顺序。

1. 选择 **创建作业队列** 以完成和创建作业队列。

# 创建 Fargate 作业队列
<a name="create-job-queue-fargate"></a>

完成以下步骤，为 AWS Fargate 创建作业队列。

**要创建 Fargate 作业队列**

1. 打开AWS Batch控制台，地址：[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/)。

1. 从导航栏中，选择要使用的AWS 区域。

1. 在导航窗格中，选择 **作业队列**。

1. 选择**创建**。

1. 对于**编排类型**，请选择 **Fargate**。

1. 对于**名称**，为作业队列输入唯一名称。名称可以长达 128 个字符，可以包含大小写字母、数字及下划线 (\$1)。

1. 对于**优先级**，为作业队列的优先级输入一个整数值。具有较高优先级的作业队列在与同一计算环境关联的较低优先级作业队列之前运行。优先级按降序确定。例如，优先级值为 10 的任务队列将会比优先级值为 1 的任务队列优先计划。

1. （可选）对于**计划策略 Amazon 资源名称（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. 打开AWS Batch控制台，地址：[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/)。

1. 从导航栏中，选择要使用的AWS 区域。

1. 在导航窗格中，选择 **作业队列**。

1. 选择**创建**。

1. 对于**编排类型**，选择 **Amazon Elastic Kubernetes Service (Amazon EKS)**。

1. 对于**名称**，为作业队列输入唯一名称。名称可以长达 128 个字符，可以包含大小写字母、数字及下划线 (\$1)。

1. 对于 **Priority**，为作业队列的优先级输入一个整数值。具有较高优先级的作业队列在与同一计算环境关联的较低优先级作业队列之前运行。优先级按降序确定。例如，优先级值为 10 的任务队列将会比优先级值为 1 的任务队列优先计划。

1. （可选）对于**计划策略 Amazon 资源名称（ARN）**，请选择现有的计划策略。

1. 对于 **连接的计算环境**，从列表中选择一个或多个计算环境，以便与作业队列关联。按照您希望队列尝试放置作业队列的顺序选择计算环境。作业计划程序使用您选择的计算环境顺序来确定哪些计算环境应启动给定作业。计算环境必须先处于 `VALID` 状态，然后您才能将其与作业队列关联。最多可以将三个计算环境与一个作业队列关联。
**注意**  
与作业队列关联的所有计算环境必须共享同一配置模型。AWS Batch 不支持在单个作业队列中混合使用配置模型。
**注意**  
与作业队列关联的所有计算环境必须共享同一架构。AWS Batch不支持在单个作业队列中混合使用计算环境架构类型。

1. 对于**计算环境顺序**，选择向上和向下箭头以配置所需的顺序。

1. 选择 **创建作业队列** 以完成和创建作业队列。

# 在 AWS Batch 中创建 SageMaker 训练作业队列
<a name="create-sagemaker-job-queue"></a>

SageMaker 训练作业队列直接与 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. 打开AWS Batch控制台，地址：[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/)。

1. 在导航窗格中，选择**作业队列**和**创建**。

1. 对于**编排类型**，选择 **SageMaker 训练**。

1. 对于**作业队列配置**：

   1. 对于**名称**，输入该作业队列的名称。

   1. 对于**优先级**，输入一个介于 0 到 1000 之间的值。服务环境会优先处理优先级较高的作业队列。

   1. （可选）对于**计划策略 Amazon 资源名称（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 训练作业队列。

以下示例会创建一个使用服务环境的基本 SageMaker 训练作业队列：

```
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 控制台中，在导航窗格中选择 **J** ob queues，然后选择所需的任务队列以查看其详细信息。在此页面上，您可以查看和管理您的作业队列并查看有关队列操作的其他信息，例如作业队列快照、作业状态限制、环境顺序、标签和作业队列的 JSON 代码。

### 作业队列详细信息
<a name="job-queue-info-details"></a>

本部分提供了作业队列概述和维护选项。值得注意的是，您可以在本部分中找到 Amazon 资源名称（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 提供对不同共享标识符如何消耗容量的可见性。此信息可帮助您了解资源分布并确定可能需要调整的份额。

**注意**  
只有当作业队列的**调度算法**为 Fair-**Share 时，才会显示 “活动份额**” 选项卡。

前 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。

### 标签
<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. 打开AWS Batch控制台，地址：[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/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 策略可能会导致重要的工作“滞留”在之前提交的工作之后。通过指定不同的调度策略，您可以根据自己的特定需求分配计算资源。

**注意**  
如果要安排作业的特定运行顺序，请使用中的`[dependsOn](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html#Batch-SubmitJob-request-dependsOn)`参数[SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html)来指定每个作业的依赖关系。

如果您创建了调度策略并将其附加到作业队列，则公平份额调度将处于开启状态。如果作业队列有调度策略，则调度策略决定作业的运行顺序。有关更多信息，请参阅 [使用调度策略分配份额标识符](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`、`RUNNABLE`、`STARTING` 或 `RUNNING` 状态，则该标识符被视为有效份额标识符。衰减期限到期后，份额标识符被视为非活动状态。
+ **权重系数 -** 份额标识符的权重系数。默认值是 1。较低的值允许份额标识符中的作业运行，或者为份额标识符提供额外的运行时间。例如，使用权重因子为 0.125（1/8）的共享标识符的作业获得的计算资源是使用权重因子为 1 的共享标识符的作业的 8 倍。
**注意**  
只有在需要更新默认权重系数 1 时才需要定义此属性。

当作业队列处于活动状态并处理作业时，您可以通过作业队列快照查看前 100 个 `RUNNABLE` 作业的列表。有关更多信息，请参阅 [在中查看作业队列 AWS Batch](job_queue_viewing_status.md)。

# 教程：创建公平分享计划政策
<a name="create-scheduling-policy"></a>

在创建带有计划策略的任务队列之前，您必须创建计划策略。创建公平份额调度策略时，您可以将一个或多个份额标识符或份额标识符前缀与队列的权重相关联，还可以选择为策略分配衰减周期和计算预留。

**创建公平分享计划政策**

1. 打开 AWS Batch 控制台，网址为[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/)。

1. 从导航栏中，选择要使用的区域。

1. 在导航窗格中，选择**创建策略**和**创建**。

1. 对于 **Name**，请为您的计划策略输入唯一的名称。最多能包含 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 根据与作业队列 (JQ) 关联的 vCPU、GPU 和计算环境 (CE) 中的内存可用性来调度作业。但在某些时候，仅凭这些 CE 资源的可用性并不能保证作业能够成功运行，因为作业可能会依赖其他所需的资源，因此这些作业将被取消或终止。这会导致计算资源的使用效率低下。为解决此问题，资源感知调度可以在 CE 上调度作业运行之前检查所依赖的非 CE 资源的可用性。

AWS Batch 资源感知型调度允许您根据运行作业所需的消耗资源（第三方许可证令牌、数据库访问带宽、限制对第三方 API 的调用的需求等）来安排作业。您可以指定作业运行所需的消耗性资源，Batch 在调度作业时会考虑这些资源依赖项。您可以避免进行手动干预，从而消除因消耗性资源短缺而导致的作业失败和长时间等待。您可以通过仅分配具有全部所需资源的作业来减少计算资源利用不足的情况。

资源感知调度支持 FIFO 和公平份额调度策略，并且可以与 Batch 支持的所有计算平台结合使用，包括 EKS、ECS 和 Fargate。此功能可用于数组作业、多节点并行（MNP）作业和常规 Batch 作业。

要配置资源感知调度，首先要指定运行作业所需的所有消耗性资源，以及每种资源的可用总数。然后，对于每项需要消耗性资源的作业，您可以指定所需每种资源的名称和所需数量。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`（默认值）
  + `NON_REPLENISHABLE`
+ 总数量 (`totalQuantity`)，指定可用消耗性资源的总量。

每个账户的最大消耗性资源数量为 5 万个。

**控制台**：

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`)。

Batch 会跟踪每种资源在任何给定时刻的可用单位数。对于作业队列中的每个作业，Batch 调度器会确保您的作业仅在指定的资源依赖项可用时运行。

如果作业到达队列顶部时作业的消耗性资源不可用，则该作业将处于 `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 会立即减少可用数量，并且在作业完成时，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. 在**搜索作业**下，输入要应用到作业列表的任何筛选条件。您可以按**作业名称**（“等于”、“开头为”）、**日期范围**（作业创建时间）和**其他条件**（“作业队列”、“作业定义”、“共享作业标识符”）进行筛选。对于要应用的每个筛选条件类型，请从下拉列表中的可用选项中进行选择，然后输入所需的任何其他信息。

   选择**搜索**。

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>

您可以随时删除消耗性资源，即使需要该资源的作业仍在运行。删除消耗性资源后，从收到删除命令之时到作业调度器执行删除之时可能会有一段间隔，因此有可能消耗该资源的作业的调度时间恰好在 delete 调用之后。如果已删除消耗性资源的资源类型 (`resourceType`) 为 `REPLENISHABLE`，则这将在作业完成时忽略。如果您删除消耗性资源后使用相同的名称重新创建该资源，则该资源将被视为同一资源，并且可供 `RUNNABLE` 作业使用。

**控制台**：

1. 在 [AWS Batch 控制台](https://console.aws.amazon.com/batch)的左侧导航面板中，选择**消耗性资源**。

1. 选择**可补充**或**不可补充**选项卡，查看您创建的该类型的资源。

1. 选择要删除的每个资源，然后选择**删除**。这时将显示**删除消耗性资源**弹出窗口。要确认删除，请选择**删除**。

也可以从控制台的详细信息页面删除消耗性资源。

1. 在 [AWS Batch 控制台](https://console.aws.amazon.com/batch)的左侧导航面板中，选择**消耗性资源**。

1. 选择**可补充**或**不可补充**选项卡，查看您创建的该类型的资源。

1. 选择要删除的资源的名称。此时将显示该消耗性资源的详细信息页面。选择**删除**。这时将显示**删除消耗性资源**弹出窗口。要确认删除，请选择**删除**。

**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 将遍历所有附加的配额份额。

管理员可以放心地在配额共享之间启用资源共享，因为**抢**占将允许任何配额共享在需要时回收其借给其他人的资源。在配额份额内，您可以选择优先级较高的作业是否应抢占正在运行的作业，还是让正在运行的作业完成。Job 优先级可以在提交时设置，稍后再更新；在做出抢占决定时会考虑更新的优先级。可以按队列、配额份额和作业级别的粒度监控容量利用率。

只有连接到`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 训练作业实例类型的实例限制。

## 配额共享资源共享策略
<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`任务有资格获得抢占资格，即使`LEND`该配额共享已`RESERVE`被选为资源共享策略，前提是该配额份额已经消耗的容量超过其降低的容量限制。

# 抢占权
<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. 打开 AWS Batch 控制台，网址为[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/)。

1. 在导航窗格中，选择 **Job 队列**，然后选择 C **reat** e。

1. 对于**编排类型**，请选择**SageMaker训练**。

1. 对于**作业队列配置**：

   1. 在**名称**中，输入作业队列的名称。

   1. 在 “**优先级**” 中，输入一个介于 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) ]

要通过 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. 打开 AWS Batch 控制台，网址为[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/)。

1. 在导航窗格中，选择 **Job qu** eues，然后从列表中选择已启用配额管理的作业队列。选择作业队列名称链接。

1. 在**配额份额**部分中，选择**创建配额共享**。

1. 提供配额份额的**名称**。

1. 对于**容量限制**，请选择**添加容量限制**。必须至少指定一个容量限制。

   1. 从下拉列表中选择一个**实例类型**，然后设置此配额份额分配给它**的最大实例数**。

   1. （可选）选择 “**添加容量限制**”，然后重复添加最多五个容量限制。

1. 对于**容量共享**，请选择此配额共享如何与同一作业队列中的其他配额共享共享其容量：
   + 如果配额份额不应借出或借用闲置计算，请选择 “**预留**”。
   + **如果配额份额可以将闲置计算借给其他配额份额，请选择 “借出”。**
   + 如果配额份额既可以**借出**闲置计算，也可以借用闲置计算，当工作到来时，通过交叉共享抢占回借出的计算，则选择 “借出”。

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>

配额管理任务队列要求所有作业在提交作业时指定配额份额。要向配额共享提交任务，请在`quotaShareName`中指定[SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html)。`preemptionConfiguration`可以选择提供 A 来限制在任务尝试进入之前的抢占尝试次数。`FAILED`要限制工作经历的抢占次数，请在提交工作时将其设置`preemptionRetriesBeforeTermination`[ServiceJobPreemptionConfiguration](https://docs.aws.amazon.com/batch/latest/APIReference/API_ServiceJobPreemptionConfiguration.html)在内。

## 使用提交作业 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}}'"
```