AWS Batch 功能

为什么选择 AWS Batch?

使用 AWS Batch,您可以打包批处理作业的代码,指定其依赖关系并使用 AWS 管理控制台、CLI 或 SDK 提交批处理作业。一旦您指定执行参数和作业依赖关系,AWS Batch 会促进与一系列常用批处理计算工作流引擎及语言(如 Pegasus WMS、Luigi、Nextflow、Metaflow、Apache Airflow 和 AWS Step Functions)的集成。AWS Batch 可以高效、动态地预置与扩展 Amazon Elastic Container Service(ECS)Amazon Elastic Kubernetes Service(EKS)和 AWS Fargate 计算资源,并提供基于您的作业要求使用按需型实例或竞价型实例的选项。AWS Batch 提供默认作业队列和计算环境定义,以便您快速开始使用。

作业定义

多容器作业是一项功能,可在您测试复杂的系统(如自动驾驶车辆和机器人中所用的系统)时简化并加快模拟的大规模运行。借助在一个作业中运行多个容器的能力,您可以享受到 AWS Batch 的高级扩展、调度和成本优化功能,而无需将您的系统重构为一个复杂的整体式容器。与此同时,您可以继续使用多个较小的模块化容器,每个容器代表不同的系统组件,如 3D 虚拟环境、机器人感知传感器或数据记录 Sidecar 等。多容器作业通过减少作业的准备步骤,加快开发速度,并消除构建额外内部工具的需求。利用多个容器运行模拟作业还可以通过定义组件责任,简化软件开发(Dev)和 IT 运营(Ops),因此不同团队可以专注于发现和修复各自组件中的错误,避免被其他团队的组件分散注意力。

AWS Batch 支持多节点并行作业,这使您能够跨多个 EC2 实例运行单个作业。此功能允许您使用 AWS Batch 高效地运行工作负载,例如,大规模紧密耦合的高性能计算(HPC)应用程序或分布式 GPU 模型训练。AWS Batch 还支持 Elastic Fabric Adapter,这是一种网络接口,可让您在 AWS 上运行需要大规模节点间通信的应用程序。

借助 AWS Batch,您可以指定资源要求,如 vCPU 和内存、AWS Identity and Access Management(IAM)角色、卷挂载点、容器属性及环境变量,以定义如何执行作业。AWS Batch 在 Amazon ECS 上将您的作业作为容器化应用程序运行。  您还可以定义不同作业之间的依赖关系。例如,您的批处理作业可能分为三个处理阶段,且各个阶段所需资源不同。有了依赖关系,您可以创建资源要求不同的三个任务,其中下一个任务均依赖于上一个任务。

集成

AWS Batch 可与商用开源工作流引擎集成(如 Pegasus WMS、Luigi、Nextflow、Metaflow、Apache Airflow,和 AWS Step Functions),让您能够使用熟悉的工作流语言为批处理计算管道建模。

AWS Batch 现在支持 EC2 启动模板,因此您可以为计算资源构建定制模板,同时 Batch 会扩展实例以满足您的需求。您可以指定 EC2 启动模板来添加存储卷、指定网络接口、配置权限或者使用其他功能。EC2 启动模板会将启动参数捕获到一项资源中,从而减少配置 Batch 环境所需的步骤。

 

AWS Batch 在 AWS 管理控制台中显示批处理任务的主要操作指标。您可以查看与计算容量相关的指标以及执行中、待执行和已完成作业的指标。您可以在控制台中查看您的作业日志(如 STDERR 和 STDOUT),也可以将其写入 Amazon CloudWatch Logs。

AWS Batch 使用 IAM 控制和监控您的任务可访问的 AWS 资源,如 Amazon DynamoDB 表。此外,您还可以通过 IAM 为组织中的不同用户定义策略。比如,管理员可以拥有对所有 AWS Batch API 操作的完全访问权限,开发人员可以拥有与配置计算环境及注册作业相关的有限权限,而最终用户只能拥有提交和删除作业所需的权限。

计算环境

AWS Batch 可以在您现有的 Amazon EKS 集群上运行您的批处理作业。您可以指定容器所需的 vCPU、内存和 GPU 要求,然后将其提交到队列,而该队列应连接至已启用 EKS 集群的计算环境。AWS Batch 管理 Kubernetes 节点的扩展和节点内容器组(pod)的放置。此外,AWS Batch 还管理队列、依赖关系跟踪、作业重试、优先级设置和容器组(pod)提交,同时为 Amazon Elastic Compute Cloud(EC2)按需型和竞价型实例提供支持。AWS Batch 还在不同的命名空间中与您的 EKS 集群集成,因此您无需担心批处理作业会干扰您现有的流程。最后,AWS Batch 为您管理容量,包括维护节点热池、在一定 vCPU 数量上限制容量、扩展节点,以及在单个集群或跨多个集群运行作业。

包含 Fargate 资源的 AWS Batch 可让您为批处理作业提供完全无服务器的架构。在 Fargate 中,每个作业都会收到其请求的确切 CPU 和内存量(在允许的 Fargate SKU 范围内),因此不会浪费资源时间,也无需等待 EC2 实例启动。

如果您目前在使用 AWS Batch,Fargate 允许从 EC2 实例中分离出一个额外的层。无需管理或修补亚马逊机器映像(AMI)。在将与 Fargate 兼容的作业提交到 Batch 中时,如果您有一些在 Amazon EC2 上运行的工作负载和在 Fargate 上运行的其他工作负载,则不必担心要维护两种不同的服务。

AWS 提供配有托管队列的基于云的计划程序,并且可以指定优先级、作业重试、依赖关系、超时等。AWS Batch 可以管理到 Fargate 的提交以及作业的生命周期,因此您不必自己操作。

Fargate 还提供了诸多安全优势且无需额外操作(例如,SOX、PCI 合规性),以及每个作业的计算资源之间的隔离。

计划

借助 AWS Batch,您可以设置多个具有不同优先级的队列。批处理作业会一直存储在队列中,直到计算资源可用于运行作业。AWS Batch 计划程序会根据每个任务的资源要求评估已提交给队列的任务的执行时间、执行位置及执行方式。该计划程序会评估每个队列的优先级并按最优计算资源(例如,内存优化型和 CPU 优化型的比较)的优先级执行作业,只要这些作业依赖关系确定即可。

通过 GPU 安排,您可以指定作业所需的加速器的数量和类型,作为 AWS Batch 中的作业定义输入变量。AWS Batch 随后将根据所需的 GPU 数量纵向扩展适合您的作业实例,并根据每个作业的需要隔离加速器,因此只有合适的容器才能访问它们。

扩展

在将 Fargate 或 AWS Fargate Spot 与 AWS Batch 配合使用时,您只需在 Batch 中设置一些概念(计算环境、作业队列和作业定义),您就将拥有完整的队列、计划程序和计算架构,而无需管理一个计算基础设施。

对于需要 EC2 实例的人员而言,AWS Batch 提供托管计算环境,此类环境可根据所提交作业的卷和资源要求以动态方式预置和扩展计算资源。您可以结合如下要求配置托管计算环境:EC2 实例类型、VPC 子网配置、跨所有实例的最少/最多/所需 vCPU 及您愿意为竞价型实例作为按需型实例价格百分比支付的金额。

此外,如果您需要针对 EC2 实例使用不同的配置(如更大的 EBS 卷或另一种操作系统)而不是托管计算资源所提供的配置,您还可以在 AWS Batch 非托管计算资源中预置和管理自己的计算资源。您只需预置含有 Amazon ECS 代理的 EC2 实例并运行支持的 Linux 和 Docker 版本。然后,AWS Batch 会在您预置的 EC2 实例上执行批量任务。

使用 AWS Batch,您可以选择三种方法来分配计算资源。这些策略让您在决定 AWS Batch 应如何为您扩展实例时考虑到吞吐量和价格两方面因素。

最佳匹配:AWS Batch 选择最符合作业需求的实例类型,并首选成本最低的实例类型。若已选实例类型无更多可用的实例,AWS Batch 将等待它们变得可用为止。如果没有足够可用的实例,或如果您达到 Amazon EC2 服务的限制,则其他作业将在当前运行的作业完成以后运行。此分配策略可以降低成本,同时限制扩展。

最佳渐进式匹配:AWS Batch 将选择大小足以满足队列中作业要求的其他实例类型,并首选单位 vCPU 成本较低的实例类型。若之前选择的实例类型无更多实例,AWS Batch 将选择新的实例类型。

最优化 Spot 容量:AWS Batch 将选择大小足以满足队列中作业要求的一个或多个实例类型,并首选被中断可能性较小的实例类型。此分配策略仅适用于 Spot 实例计算资源。