我有一些带有 GPU Tensorflow 作业的容器,如果在单个主机上同时执行其中的 2 个以上,则只有 1 个会成功(2018-05-11 13:02:19.147869: E tensorflow/core/common_runtime/direct_session.cc:171] 内部:为 CUDA 设备序号 0 初始化 StreamExecutor 失败:内部:对 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。但是,无论如何,batch 似乎同时调度多个容器,导致所描述的失败。
到目前为止,我尝试使用 vCPU
和 memory
参数,但 Batch 的调度程序似乎忽略了这些。
有趣的是,相关的 ECS 任务定义有 1/--
作为 Hard/Soft memory limits (MiB)
的值,所以看起来像 来自 Batch 的值 '作业定义”不会传播到 ECS“任务定义”。
另一种选择是设置大量尝试,但是
- 很丑
- 对于长时间运行的作业,即使数量很大也可能会耗尽
- 我对永远运行的作业失去了防御能力(例如配置错误)
- 不确定这种中断会如何影响已经运行的 Tensorflow 作业
最佳答案
您的作业对 vCPU 和内存的要求是什么,您的计算环境中的实例类型是什么?
如果您更新作业的 vCpu 和内存以便一个实例只能容纳一个作业,Batch 将一个接一个地安排您的作业,而不是尝试同时运行两个作业。
例如,如果您的计算环境有 p3.16xlarge (64vCpus,488Gib) 个实例,并且想确保一次只有一个作业在实例中运行,使确保作业指定 vCPU > 32 和 Memory > 244GB
关于amazon-web-services - AWS 批量限制单个主机上的容器数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50296155/