AWS 批处理始终为每个作业启动新的 ec2 实例
Posted
技术标签:
【中文标题】AWS 批处理始终为每个作业启动新的 ec2 实例【英文标题】:AWS batch to always launch new ec2 instance for each job 【发布时间】:2019-12-03 03:33:00 【问题描述】:我已经设置了一个批处理环境
-
托管计算环境
作业队列
工作定义
实际工作(docker 容器)会进行大量视频编码,因此会占用大部分 CPU。该过程本身需要几分钟(接近 5 分钟来初始化所有编码器)。理想情况下,我希望每个实例都有一份工作,这样编码器就不会被 CPU 饿死。
我的问题是,当我同时启动多个作业或足够接近时,AWS 批处理决定在同一个实例中启动它们,因为第一个容器仍在初始化并且尚未开始使用 CPU。 对我来说,这似乎是一种竞争条件,两个作业都将创建的实例视为可用。
有没有一种方法可以为每个作业启动一个实例,而无需查找已经在运行的实例?或者任何其他解决方案在指定用于特定作业后锁定实例?
非常感谢您的帮助。
【问题讨论】:
Aws 批处理和 ECS 应该不会在调度容器时遇到任何问题,只要您正确配置即可。您是否在作业定义中为您的容器保留 vcpus?您将计算环境的最小/最大/所需 vcpus 设置为什么?您是否让 aws batch 决定使用哪些实例类型? 嗨@ngenator,该任务需要3种不同类型的VCPU,具体取决于编码类型。大多数时候它是 16 个 vcpu,有些需要更多。所以我在启动作业时覆盖了 aws 批处理的environment
属性。下面是我的配置 ``` 最小 vCPU 0 所需 vCPU 0 最大 vCPU 256 实例类型 c5 ```
好的,当您说要覆盖环境属性时,您是在谈论作业定义的 containerProperties 吗?你在那里设置 vcpus 吗? environment 属性用于容器的环境变量,而不用于其他容器配置。如果您查看示例作业定义,您能否验证您是在 containerProperties 而不是在环境中设置 vcpus? docs.aws.amazon.com/batch/latest/userguide/…
【参考方案1】:
您不必担心将作业分离到不同的实例上,因为运行作业的容器受限于它们可以使用的 vCPU 数量。例如,如果您启动两个作业,每个作业都需要 4 个 vCPU,Batch 可能会启动一个具有 8 个 vCPU 的实例并在同一个实例上运行这两个作业。每个作业只能访问其中的 4 个 vCPU,因此性能应该与独立运行且实例上没有其他作业的作业相同。
但是,如果您仍想将作业分离到单独的实例上,您可以通过将作业的 vCPU 与计算环境中的实例类型相匹配来实现。例如,如果您的作业需要 4 个 vCPU,您可以将计算环境配置为仅允许 c5.xlarge 实例,这样每个实例只能运行一个作业。但是,如果您想运行具有更高 vCPU 要求的其他作业,则必须在不同的计算环境中运行它们。
【讨论】:
以上是关于AWS 批处理始终为每个作业启动新的 ec2 实例的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS 中的 SUSE Linux EC2 实例上安装 SSM 代理和角色确保启动