Amazon Elastic Container Service
开发人员指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

在 Amazon ECS 上使用 GPU

Amazon ECS 通过使您能够使用支持 GPU 的容器实例创建集群来支持利用 GPU 的工作负载。使用 p2 和 p3 实例类型的基于 GPU 的 Amazon EC2 容器实例提供对 NVIDIA GPU 的访问权限。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的 Linux 加速计算实例

Amazon ECS 提供了经过 GPU 优化的 AMI,后者附带了预配置的 NVIDIA 内核驱动程序和 Docker GPU 运行时。有关更多信息,请参阅Amazon ECS-optimized AMI

您可以在任务定义中指定多个 GPU,以便在容器级别考虑任务放置。Amazon ECS 将安排可用的支持 GPU 的容器实例并将物理 GPU 固定到正确的容器以获得最佳性能。

支持以下基于 GPU 的 Amazon EC2 实例类型。有关更多信息,请参阅 Amazon EC2 P2 实例Amazon EC2 P3 实例Amazon EC2 G3 实例

实例类型

GPU

GPU 内存 (GiB)

vCPU

内存 (GiB)

p2.xlarge

1

12

4

61

p2.8xlarge

8

96

32

488

p2.16xlarge

16

192

64

732

p3.2xlarge

1

16

8

61

p3.8xlarge

4

64

32

244

p3.16xlarge

8

128

64

488

p3dn.24xlarge

8

256

96

768

g3s.xlarge

1 8 4 30.5

g3.4xlarge

1 8 16 122

g3.8xlarge

2 16 32 244

g3.16xlarge

4 32 64 488

有关使用 GPU 的注意事项

在 Amazon ECS 上使用 GPU 之前,请注意以下事项:

  • 您的集群可以包含 GPU 和非 GPU 容器实例的组合。

  • 在运行任务或创建服务时,您可以在配置任务放置约束时使用实例类型属性,以确保在适当的容器实例上启动任务。这使您能够有效地使用您的资源。有关更多信息,请参阅Amazon ECS 任务放置

    以下示例在您的默认集群中的 p2.xlarge 容器实例上启动一个任务。

    aws ecs run-task --cluster default --task-definition ecs-gpu-task-def \ --placement-constraints type=memberOf,expression="attribute:ecs.instance-type == p2.xlarge" --region us-east-2
  • 在使用 Docker CLI 时,--runtime 参数可用于在运行容器时指定 NVIDIA 运行时。例如:

    docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi

在任务定义中指定 GPU

要在容器实例和 Docker GPU 运行时上利用 GPU,请确保在任务定义中指定容器所需的 GPU 数量。由于已放置支持 GPU 的容器,因此 Amazon ECS 容器代理会将所需数量的物理 GPU 固定到相应的容器中。为某个任务中的所有容器预留的 GPU 的数量不应超过该任务在其上启动的容器实例的可用 GPU 的数量。有关更多信息,请参阅创建任务定义

重要

如果任务定义中未指定 GPU 要求,则任务将使用默认 Docker 运行时。

下面显示了任务定义中的 GPU 要求的 JSON 格式:

{ "containerDefinitions": [ { ... "resourceRequirements" : [ { "type" : "GPU", "value" : "2" } ], }, ... }

以下示例演示了指定 GPU 要求的 Docker 容器的语法。此容器使用 2 个 GPU,运行 nvidia-smi 实用程序,然后退出。

{ "containerDefinitions": [ { "memory": 80, "essential": true, "name": "gpu", "image": "nvidia/cuda:9.0-base", "resourceRequirements": [ { "type":"GPU", "value": "2" } ], "command": [ "sh", "-c", "nvidia-smi" ], "cpu": 100 } ], "family": "example-ecs-gpu" }