AWS Batch:如何提高 Fargate 作业的并发性

AWS Batch: how to increase concurrency for Fargate jobs

我正在尝试使用 Batch 进行大规模并行作业执行,使用 Docker 个容器。我想同时处理数千个任务。

我已经准备好了 运行。我的计算环境配置的最大 vCPU 为 2048。每个任务都配置为使用单个 vCPU 和 2GB RAM。我正在使用具有 1,000 个数组元素的数组作业(目前)。

问题是:当我创建一个新作业时,并发性似乎非常有限。当我查看 ECS 中的集群时,“待处理任务”似乎一直徘徊在 50 左右(它可能永远不会超过 50),而“运行 任务”不会超过 30。即使每个人任务只需要大约 10 秒即可完成,整个批次大约需要 20 分钟。

这不是我所期望的。通过以上设置,我以为 Batch 会同时处理所有 1,000 个任务。

我最初认为问题可能是我使用 public 子网引起的(所有 Fargate 容器都有 public IP)。我改为使用私有子网(带 NAT 网关),但没有用。

有人知道我做错了什么吗?

谢谢!

答案在上面的评论中,但为了后代:

具有 Fargate 资源的 AWS Batch 计算环境的扩展速度不足以满足您的需求,因为每个作业都在其自己的 Fargate 资源中启动。将 EC2 用于计算环境将启动一个大型实例,该实例将 运行 并发执行多个作业,因此扩展 运行 个作业会快得多。

至于为什么您会看到最大值(pending 50 运行ning 30),这可能是因为您的请求达到了启动/完成的平衡。如果您的作业 运行 超过 10 秒(分钟),您会看到 运行ning 任务的总数会比您看到的要多。