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

在 Amazon ECS 上使用 GPU

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

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

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

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

实例类型

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

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

g5.xlarge

1

24

4

16

g5.2xlarge

1

24

8

32

g5.4xlarge

1

24

16

64

g5.8xlarge

1

24

32

128

g5.16xlarge

1

24

64

256

g5.12xlarge

4

96

48

192

g5.24xlarge

4

96

96

384

g5.48xlarge

8

192

192

768

注意事项

开始在 Amazon ECS 上使用 GPU 之前,我们建议您考虑以下事项。

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

  • 您可以在外部实例上运行 GPU 工作负载。当向集群注册外部实例时,请确保安装脚本中包含 --enable-gpu 标记。有关更多信息,请参阅将外部实例注册到集群

  • 您必须在代理配置文件中将 ECS_ENABLE_GPU_SUPPORT 设置为 true。有关更多信息,请参阅Amazon ECS 容器代理配置

  • 在运行任务或创建服务时,您可以在配置任务放置约束时使用实例类型属性,以确定要在其上启动任务的容器实例。通过这样做,您可以更有效地使用您的资源。有关更多信息,请参阅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 环境变量值设置为 Amazon ECS 分配给容器的 GPU 设备 ID 列表。对于其他必需的环境变量,Amazon ECS 不会对其进行设置。因此,请确保容器映像对其进行设置,或者在容器定义中对其进行设置。

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

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

  • Amazon ECS 经 GPU 优化的 AMI 启用了 IPv6,这会导致使用 yum 时出现问题。可以通过配置 yum 将 IPv4 与以下命令结合使用。

    echo "ip_resolve=4" >> /etc/yum.conf
  • 当您构建不使用 NVIDIA/CUDA 基础映像的容器映像时,必须设置 NVIDIA_DRIVER_CAPABILITIES 容器运行时变量设置为以下值之一:

    • utility,compute

    • all

    有关如何设置变量的信息,请参阅 NVIDIA 网站上的控制 NVIDIA 容器运行时

在任务定义中指定 GPU

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

重要

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

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

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

以下示例演示了指定 GPU 要求的 Docker 容器的语法。此容器使用两个 GPU,运行 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" }