多个容器共享单个 GPU

Mik*_*ike 7 gpu amazon-ec2 amazon-web-services amazon-ecs

我已经配置了一个在具有单个 GPU 的 g4dn.xlarge 实例上运行的 ECS 服务。在任务定义中,我指定了使用一个 GPU 的容器定义资源要求,如下所示:

"resourceRequirements": [
  {
    "type":"GPU",
    "value": "1"
  }
]
Run Code Online (Sandbox Code Playgroud)

在此实例上运行一项任务和一个容器效果很好。当我将服务的所需任务计数设置为 2 时,我在服务上收到一个事件,其中指出:

服务无法放置任务,因为没有容器实例满足其所有要求。最接近的匹配容器实例没有足够的可用 GPU 资源。

根据AWS 文档

Amazon ECS 将调度可用的支持 GPU 的容器实例,并将物理 GPU 固定到适当的容器,以获得最佳性能。

是否有任何方法可以覆盖此默认行为并强制 ECS 允许多个容器实例共享单个 GPU?

我不相信我们会遇到共享性能问题,因为我们计划使用每个容器进行 H264 编码 (nvenc),这不是 CUDA。如果有人可以指导我查看有关共享 GPU 的容器上的 CUDA 性能的文档,我也将不胜感激。

小智 6

技巧是如果适合您的使用,默认为所有容器启用 nvidia docker 运行时

基于 Amazon AMI amazon/amzn2-ami-ecs-gpu-hvm-2.0.20200218-x86_64-ebs,连接到实例并添加以下配置:

sudo cat <<"EOF" > /etc/docker/daemon.json
{
  "default-runtime": "nvidia",
  "runtimes": {
      "nvidia": {
        "path": "/etc/docker-runtimes.d/nvidia"
      }
  }
}
EOF
sudo pkill -SIGHUP dockerd
tail -10 /var/log/messages
Run Code Online (Sandbox Code Playgroud)

创建新的 AMI,并且不要在 GPU 容器定义上指定任何值。