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作业

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

如果更新作业的 vCPU 和内存,以便一个实例中只能容纳一个作业,则 Batch 将逐个计划作业,而不会尝试同时运行两个作业。

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

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

最新更新