【问题标题】:AWS batch limit number of container on single hostAWS批量限制单个主机上的容器数量
【发布时间】:2018-10-22 02:19:58
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 我使用p2.xlarge,并为gpu作业设置了4个vCPU和42000内存。根据 ec2instances.info,这台机器有 61.0 GiB 内存和 4 个 vCPU。但是,无论如何,批处理似乎同时调度多个容器,导致描述的失败。
    • 刚刚注意到 ECS 任务定义有 1/-- 作为容器的内存限制。那是一个错误吗?更新的问题。
    • "刚注意到ECS任务定义有1/--" 启动任务时一定要检查正在运行的Tasks CPU/Memory任务定义参数是否可以被覆盖
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 2018-12-18
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多