AWS Batch

自动调度数十万规模的批处理作业,并在最优计算资源上执行的全托管服务

概述

AWS Batch 是一项自动化批处理计算工作负载的规划、调度和执行的全托管服务。将作业提交到作业队列后,Batch 会自动预置所需的计算资源 (EC2 实例或 Fargate),在解决作业依赖关系的同时以最优顺序执行。适用于基因组分析、金融风险计算、视频编码、机器学习预处理等需要大量并行计算的工作负载。通过与 Spot 实例集成,可以大幅降低成本。

EC2 与 Fargate 计算环境

AWS Batch 的计算环境定义了执行作业的基础设施。EC2 环境中可指定实例类型、最小/最大 vCPU 数和是否使用 Spot 实例。Fargate 环境无需管理实例,只需为每个作业指定所需的 vCPU 和内存即可执行。选择标准很明确:需要 GPU、需要特定实例类型或使用多节点并行作业 (MPI) 的 HPC 工作负载选择 EC2,其他情况选择 Fargate。在 EC2 环境中使用 Spot 实例时,Batch 会自动检测 Spot 中断并将作业重新调度到其他实例,因此对于具有中断容忍性的工作负载,最高可节省 90% 的成本。Azure Batch 也提供类似的作业调度,但没有像 Fargate 这样的无服务器选项,始终需要管理 VM 池,在这一点上 AWS Batch 更容易减轻运维负担。

作业队列与依赖关系控制

Batch 的作业调度由作业队列和作业定义两个概念组成。作业队列可设置优先级,高优先级队列的作业会先于低优先级队列执行。将多个计算环境关联到一个作业队列,可以实现按需实例不足时回退到 Spot 实例的配置。作业间的依赖关系只需在提交作业时指定依赖作业的 ID,Batch 就会自动解决执行顺序。使用数组作业 (Array Job) 可以用同一作业定义批量提交数千个作业,每个作业分配索引号,通过索引控制处理 S3 文件列表中的第几个文件是常见的设计模式。批处理相关书籍 (Amazon) 也可作为参考。

Step Functions 集成与重试策略

AWS Batch 的典型应用是数据流水线的大规模并行处理。通过 EventBridge 检测到达 S3 的数千个文件,经 Step Functions 提交 Batch 作业,并行处理各文件后将结果写回 S3 是常见的架构。通过与 Step Functions 集成,可以声明式地定义等待 Batch 作业完成、根据成功或失败分支后续处理的工作流。作业定义中可设置重试策略 (最大重试次数、重试条件),自动恢复因临时错误导致的作业失败。重试条件可指定退出码或错误消息的模式,实现仅对特定错误 (如内存不足) 进行重试的精细控制。成本优化的要点是适当设置作业超时,防止挂起的作业无限消耗资源。

共有するXB!