我有一些带有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将一个接一个地安排您的作业,而不是尝试同时运行两个作业。

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

    08-07 23:14