我有一些带有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。但是,无论如何,批处理似乎同时调度了多个容器,从而导致了所描述的故障。
到目前为止,我尝试使用vCPU
和memory
参数,但是Batch的调度程序似乎忽略了这些参数。
有趣的是,相关的ECS任务定义将1/--
作为Hard/Soft memory limits (MiB)
的值,因此看起来批次“作业定义”中的值不会传播到ECS“任务定义” 。
另一种选择是设置大量尝试,但是
最佳答案
作业的vCPU和内存要求是什么,计算环境中的实例类型是什么?
如果您更新作业的vCpu和内存,以便一个实例只能容纳一个作业,则Batch将一个接一个地安排您的作业,而不是尝试同时运行两个作业。
例如,如果您的Compute环境具有 p3.16xlarge ( 64vCpus,488Gib )实例,并希望确保一次仅在该实例中运行一个作业,请确保该作业指定 vCPU> 32 和内存> 244 GB