AWS 批量限制单个主机上的容器数量

AWS batch limit number of container on single host

我有一些带有 GPU Tensorflow 作业的容器,如果在单个主机上同时执行其中 2 个以上的作业,则只有 1 个会成功(2018-05-11 13:02:19.147869: E tensorflow/core/common_runtime/direct_session.cc:171] Internal: failed initializing StreamExecutor for CUDA device ordinal 0: Internal: failed call to cuDevicePrimaryCtxRetain: CUDA_ERROR_ECC_UNCORRECTABLE,即它们无法正确共享 GPU)。

完美的场景如下:我有 10 个 GPU 作业和最多 5 个容器。前 5 个被执行,其他 5 个等待(此时,他们不等待但尝试执行但失败),当一个完成时,第 6 个立即在同一主机上启动,然后是第 7、8、9、10。

我使用p2.xlarge,并为gpu作业设置了4个vCPU和42000内存。根据 ec2instances.info,这台机器有 61.0 GiB 内存和 4 个 vCPU。但是,无论如何,batch 似乎同时调度了多个容器,导致了所描述的失败。

到目前为止,我尝试使用 vCPUmemory 参数,但 Batch 的调度程序似乎忽略了这些参数。

有趣的是,相关的 ECS 任务定义具有 1/-- 作为 Hard/Soft memory limits (MiB) 的值,因此看起来 来自 Batch 'job definition' 的值不会传播到 ECS 'task definition'.

另一种选择是设置大量尝试,但是

您的作业对 vCPU 和内存的要求是什么,您的计算环境中的实例类型是什么?

如果您更新作业的 vCpu 和内存以便一个实例只能容纳一个作业,Batch 将一个接一个地安排您的作业,而不是尝试同时 运行 两个作业.

例如,如果您的计算环境有 p3.16xlarge (64vCpus,488Gib) 个实例,并且希望确保只有一个作业 运行s 一次在实例中,确保作业指定 vCPU > 32Memory > 244GB

当容器的内存小于最大可能时,Batch 的作业调度程序似乎有一些问题。这样,有时它会尝试 运行 两个容器,其中只有一个房间,但有一些保留(例如 42000 / 61000,我最初尝试过)。因此,解决方法是在容器中保留几乎所有机器的内存。