在 GPUs 上使用 Amazon ECS - Amazon Elastic Container Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 GPUs 上使用 Amazon ECS

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

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

您可以在任务定义GPUs中指定 以在容器级别考虑任务放置。 Amazon ECS 计划可用的启用 GPU 的容器实例,并固定物理GPUs容器到适当的容器以实现最佳性能。

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

重要

20190913 版本和更高版本的Amazon ECS 经 GPU 优化的 AMI. 支持 g4 实例类型系列。有关更多信息,请参阅经 Amazon ECS优化AMI的 Linux 版本. 它当前在 Amazon ECS 控制台中的“创建集群”工作流中不受支持。要使用这些实例类型,您必须使用 Amazon EC2 控制台、AWS CLI 或 API 并手动将实例注册到您的集群。

实例类型

GPUs

GPU 内存 (GiB)

vCPUs

内存 (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

p4d.24xlarge

8 320 96 1152

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

g4dn.xlarge

1

16

4

16

g4dn.2xlarge

1

16

8

32

g4dn.4xlarge

1

16

16

64

g4dn.8xlarge

1

16

32

128

g4dn.12xlarge

4

64

48

192

g4dn.16xlarge

1

16

64

256

Considerations

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

  • 您的集群可以包含 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
  • 对于在容器定义中指定了 GPU 资源要求的每个容器,Amazon ECS 将容器运行时设置为 NVIDIA 容器运行时。

  • NVIDIA 容器运行时需要在容器中设置一些环境变量才能工作。有关这些环境变量的列表,请参阅 nvidia-container-runtime。 将Amazon ECS环境变量值NVIDIA_VISIBLE_DEVICES设置为 IDs Amazon ECS 分配给容器的 GPU 设备的列表。对于其他必需的环境变量, Amazon ECS 不会设置这些变量,因此您应该确保容器映像设置这些变量,或者应在容器定义中设置这些变量。

  • 20190913 版本和更高版本的Amazon ECS 经 GPU 优化的 AMI. 支持 g4 实例类型系列。有关更多信息,请参阅经 Amazon ECS优化AMI的 Linux 版本. 它当前在 Amazon ECS 控制台中的“创建集群”工作流中不受支持。要使用这些实例类型,您必须使用 Amazon EC2 控制台、AWS CLI 或 API 并手动将实例注册到您的集群。

  • p4d.24xlarge 实例类型仅适用于 CUDA 11 或更高版本。

在任务定义GPUs中指定

要在容器实例和 Docker GPU 运行时GPUs上利用 ,请确保您在任务定义中指定GPUs了容器所需的数量。在放置启用 GPU 的容器时, Amazon ECS 容器代理GPUs会将所需数量的物理容器固定到适当的容器。为任务中的所有容器GPUs预留的数量不应超过启动任务的容器实例GPUs上的可用数量。有关更多信息,请参阅创建任务定义.

重要

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

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

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

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

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