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

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

我有一些带有 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。但无论如何,批处理似乎同时调度了多个容器,从而导致所述失败。

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

有趣的是,相关的 ECS 任务定义具有1/--作为的值Hard/Soft memory limits (MiB),因此看起来像批处理“作业定义”中的值未传播到 ECS“任务定义”

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

  • 它很丑
  • 对于长期运行的任务,即使数量很大也可能会耗尽
  • 我失去了对永远运行的作业(例如配置错误)的防御能力
  • 不确定这种中断会对正在运行的 Tensorflow 作业产生什么影响

相关内容