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

时间:2018-05-11 16:02:01

标签: amazon-web-services tensorflow aws-batch

我有一些带有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个。 / p>

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

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

有趣的是,相关的ECS任务定义1/--的值为Hard/Soft memory limits (MiB),因此看起来像批量'作业定义'中的值不会传播到ECS'任务定义'

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

  • 它的丑陋
  • 对于长期工作,即使很多人可能会筋疲力尽
  • 我从永远在线的工作中失去了防守(例如配置错误)
  • 不确定这种中断会如何影响已经运行的Tensorflow作业

2 个答案:

答案 0 :(得分:1)

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

如果更新作业的vCpu和内存,以便只有一个作业可以放入实例,Batch将一个接一个地安排作业,而不是尝试同时运行两个作业。

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

答案 1 :(得分:0)

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