如何通过资源感知调度在 Amazon Batch 任务中使用限速资源

作者: Angel Pizarro, Nikita Buldakov |

批处理通常有一些方面,这些方面会限制分析的规模或完成的速度。很多时候,限制因素取决于您的计算需求,例如并发 CPU 的数量或向任务提供数据的底层 IO 系统的速度。尽管亚马逊云科技提供了许多方法来克服这些挑战(更大的实例、不同的存储服务),但有时您的任务会受到您无法控制的因素的限制,例如您的应用程序可以访问的许可证数量或受速率限制的第三方 API 或数据库。在这些情况下,您希望将并发运行的作业数量保持在资源可以处理的范围以下,这样作业就不会空闲等待资源,甚至更糟糕的是,由于缺乏资源而失败。

Amazon Batch 刚刚发布了资源感知计划,允许您定义用于任务的消耗资源。消耗资源代表跨越正在运行的作业(例如应用程序许可证或并发数据库连接)的任何限制。要对这些稀缺资源进行建模,您只需创建一个可消耗资源以及总共有多少资源即可。然后,您可以在任务定义中定义每个提交的任务需要多少可消耗资源。Batch 在做出调度决策时会自动将可用的消耗资源考虑在内,即只有在有足够的消耗资源可以完成任务时才开始作业。

在进行资源感知调度之前,您需要创建自己的机制来限制在给定时间运行的作业数量。随着这项新功能的发布,您可以让 Batch 处理分配资源和调度任务的所有逻辑,从而最大限度地利用计算批量比例。

它是如何运作的

让我们仔细看一下我们的一个例子——根据应用程序可用的许可证数量限制可以运行的作业数量。首先,我们在 Amazon Batch 管理控制台中定义了一个名为 "foobar-licenses" 的消耗性资源,并告诉 Batch 我们有 10 个许可证可以在工作中使用(图 1)。

图 1-Amazon Batch 管理控制台

图 1 — Amazon Batch 管理控制台 "创建消耗品资源" 表单显示了 "foobar 许可证" 可补充消耗品资源的创建情况,计数为 10。

消耗性资源可以是可补充的,也可以是不可补充的。任务完成后,可补充资源将重新添加到可用数量中。任务完成后,不可补充的资源不会添加到可用数量中。由于许可证是可重复使用的,因此我们将这种消耗性资源定义为可补充资源。我将在本文后面详细讨论不可补充的资源。

接下来,我将定义一个利用单一 "foobar 许可证" 消费资源的任务定义(图 2)。每个示例作业将运行 5 分钟。

图 2 — Amazon Batch 管理控制台创建任务定义表单显示了如何设置任务以使用一次 "foobar 许可证" 消费资源。

最后,我向任务队列提交了一个 50 的数组作业。以下控制台屏幕截图是在阵列作业提交几分钟后拍摄的。图 3 显示了消耗品资源的详细信息页面,显示了在用资源和仍可用的资源数量。该图还显示了求职表单,您可以使用该表单查看预留了消耗资源的职位,即使是跨任务队列也是如此。

图 3-

图 3 — "foobar-licenses" 的消耗品资源详细信息页面显示 10 个正在使用中的 10 个,还有一个职位搜索框用于查看在消耗品资源上预留的作业,即使在任务队列中也是如此。

为了确认只有分配了 foobar 许可证资源的作业才能运行,您可以查看阵列作业的详细信息页面(图 4)以查看子任务的状态并确认只有十个作业同时运行。

图 4-阵列作业子任务状态摘要显示 20 个任务仍处于待处理状态,10 个作业正在运行,20 个任务已完成。

图 4 — 阵列作业子任务状态摘要显示 20 个任务仍处于待处理状态,10 个作业正在运行,20 个任务已完成。

完成所有任务后,您应该看到可用的消耗资源数回到 10。

不可补充的消耗资源

可补充的消耗资源看起来很方便,但是不可补充的资源呢?正如我们所提到的,任务完成后,不可补充资源的数量不会增加。但是,您可以使用 Amazon Batch 控制台或 UpdateConsumableResource API 调用将资源的总数更新为新值。使用不可补充的消耗资源的一个很好的用例是使用基于时间的使用模型访问外部服务,例如 "每天调用我们的推理服务 100 次"。在此示例中,您将创建一个 "每日推理" 不可补充的消耗性资源,上限为 100,然后在每天开始时重置计数器。

顺便说一句,你也可以增加或减少可补充消耗资源的数量。如果您需要在使用相同基础资源的亚马逊云科技区域之间重新分配资源,或者如果您需要临时增加紧急工作负载的资源数量,然后需要缩减到正常数量,这非常方便。将消耗资源的总数减少到正在使用的资源总数不会影响分配资源的正在运行的作业。任务完成后,如果释放的资源超过当前总量,则不会添加到可用数量中。此外,任务完成后,并发运行的作业数量将缩减到可用总数。

那我的许可证服务器呢?

Amazon Batch 消耗性资源无法访问外部资源或无法与之协调,它们只能计量其定义的亚马逊云科技区域内批处理任务的使用量。这意味着您需要预置一部分许可证,以供 Batch 在许可证管理框架内用作消费资源。如果您需要重新分配许可证,可以酌情增加或减少区域消耗资源数量。

结论

资源感知调度简化了管理运行中的复杂工作负载的方式,这些工作负载依赖于有限的资源,而不仅仅是计算能力。通过采用更全面的资源管理方法,Amazon Batch 允许您高效、经济高效地处理企业级工作负载编排,简化操作并减少与失败的任务和未充分利用的资源相关的不必要开支。要尝试资源感知调度,请访问 Amazon Batch 管理控制台或阅读文档!



Angel Pizarro

Angel Pizarro

Angel 是 HPC 和科学计算的首席开发倡导者。他的背景是生物信息学应用程序开发和为基因组学和其他高通量生命科学领域中的可扩展计算构建系统架构。

Nikita Buldakov

Nikita Buldakov

Nikita Buldakov 是 Amazon Batch 的高级技术产品经理,在亚马逊云科技的高级计算和仿真组织工作。他的背景是应用数学以及技术、交通和工业领域的战略咨询。在 Amazon Batch,Nikita 专注于自动驾驶汽车、高级驾驶辅助系统和机器人工作负载。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。