3

我有一些带有 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 作业
4

2 回答 2

1

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

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

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

于 2018-05-11T20:31:46.920 回答
0

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

于 2018-05-15T13:17:14.170 回答