我有一些带有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。但是,无论如何,批次似乎同时安排了几个容器,导致描述失败。
到目前为止,我尝试使用vCPU
和memory
参数,但Batch的调度程序似乎忽略了这些参数。
有趣的是,相关的ECS任务定义1/--
的值为Hard/Soft memory limits (MiB)
,因此看起来像批量'作业定义'中的值不会传播到ECS'任务定义' 。
另一种选择是设置大量尝试,但
答案 0 :(得分:1)
您的作业的vCPU和内存要求是什么,计算环境中的实例类型是什么?
如果更新作业的vCpu和内存,以便只有一个作业可以放入实例,Batch将一个接一个地安排作业,而不是尝试同时运行两个作业。
例如,如果您的Compute环境有 p3.16xlarge ( 64vCpus,488Gib )实例,并希望确保一次只在一个实例中运行一个作业,确保作业指定 vCPU> 32 和内存> 244GB
答案 1 :(得分:0)
似乎Batch的作业调度程序在容器的内存小于最大可能时会出现一些问题。有了它,有时它试图运行两个容器,其中只有一个房间,但有一些保留(例如42000/61000,我最初尝试过)。因此,解决方法是在容器中保留几乎所有机器的内存。