amazon-web-services - AWS 批量限制单个主机上的容器数量

标签 amazon-web-services tensorflow aws-batch

我有一些带有 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 似乎同时调度多个容器,导致所描述的失败。

到目前为止,我尝试使用 vCPUmemory 参数,但 Batch 的调度程序似乎忽略了这些。

有趣的是,相关的 ECS 任务定义有 1/-- 作为 Hard/Soft memory limits (MiB) 的值,所以看起来像 来自 Batch 的值 '作业定义”不会传播到 ECS“任务定义”

另一种选择是设置大量尝试,但是

  • 很丑
  • 对于长时间运行的作业,即使数量很大也可能会耗尽
  • 我对永远运行的作业失去了防御能力(​​例如配置错误)
  • 不确定这种中断会如何影响已经运行的 Tensorflow 作业

最佳答案

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

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

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

关于amazon-web-services - AWS 批量限制单个主机上的容器数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50296155/

相关文章:

python - Tensorflow支持在线训练吗?

amazon-web-services - AWS Batch 故障转移策略

amazon-web-services - AWS : How is CPU utilization calculated for auto scaling group

python - 如何通过 python (boto for AWS) 在交互式 shell 中运行命令

node.js - 亚马逊网络服务 : Delete item on DynamoDB Database from Lambda Function

amazon-web-services - 如何定期提交AWS Batch作业

amazon-web-services - 如何在 AWS cloudformation 模板中将 Batch 作业队列配置为 AWS::Events::Rule 的目标

amazon-web-services - 是否可以使用一个 AWS Lambda 函数附加多个计划/cron 事件?

tensorflow - 在 Tensorflow 中,如何生成标量摘要?

python - TensorFlow对象检测API仅在框架的指定区域内(在输入框架中定义ROI)