Amazon Elastic Container Service
Guía para desarrolladores (Versión de API 2014-11-13)

Uso de GPU en Amazon ECS

Amazon ECS admite cargas de trabajo que utilizan unidades GPU para que pueda crear clústeres con instancias de contenedor habilitadas para GPU. Las instancias de contenedor basadas en GPU de Amazon EC2 que utilizan los tipos de instancia p2 y p3 proporcionan acceso a las GPU NVIDIA. Para obtener más información, consulte Instancias de computación acelerada de Linux en la Guía del usuario de Amazon EC2 para instancias de Linux.

Amazon ECS proporciona una AMI optimizada para GPU que ya está preconfigurada con controladores de kernel NVIDIA y un runtime de GPU de Docker. Para obtener más información, consulte Amazon ECS-optimized AMI.

Puede designar un número de GPU en su definición de tarea para la colocación de tareas en el nivel de contenedor. Amazon ECS programará las tareas de acuerdo con las instancias de contenedor habilitadas para GPU disponibles y pondrá en marcha las GPU físicas en los contenedores correspondientes para conseguir un rendimiento óptimo.

Se admiten los siguientes tipos de instancias basadas en GPU de Amazon EC2. Para obtener más información, consulte Instancias P2 de Amazon EC2, Instancias P3 de Amazon EC2, Instancias G3 de Amazon EC2 e Instancias G4 de Amazon EC2.

importante

La familia de tipos de instancia g4 es compatible con la versión 20190913 y versiones posteriores de la AMI optimizada para GPU de Amazon ECS. Para obtener más información, consulte Versiones de la Amazon ECS GPU-optimized AMI. En este momento no se admite el flujo de trabajo Create Cluster (Crear clúster) en la consola de Amazon ECS. Para utilizar estos tipos de instancia, debe utilizar la consola de Amazon EC2, la AWS CLI o la API y registrar manualmente las instancias en el clúster.

Tipo de instancia

GPU

Memoria de GPU (GiB)

vCPU

Memoria (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

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

Consideraciones para trabajar con GPU

Antes de empezar a trabajar con GPU en Amazon ECS, tenga en cuenta las siguientes consideraciones:

  • Sus clústeres pueden contener una combinación de instancias de contenedor habilitadas para GPU y no habilitadas para GPU.

  • Cuando ejecute una tarea o cree un servicio, puede utilizar los atributos de tipo de instancia al configurar las restricciones de colocación de tareas para asegurarse de qué instancias de contenedor se lanzan en la tarea. Esto le permitirá utilizar eficazmente sus recursos. Para obtener más información, consulte Ubicación de tareas de Amazon ECS.

    El siguiente ejemplo lanza una tarea en una instancia de contenedor p2.xlarge en el clúster predeterminado.

    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
  • Cuando se utiliza la CLI de Docker, se puede usar el parámetro --runtime para especificar el runtime de NVIDIA al ejecutar un contenedor. Por ejemplo:

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

Especificación de las GPU en la definición de tarea

Para utilizar las GPU en una instancia de contenedor y el runtime de GPU de Docker, asegúrese de designar el número de GPU que requiere el contenedor en la definición de tarea. Cuando haya contenedores habilitados para GPU, el agente de contenedor de Amazon ECS activará el número deseado de GPU físicas en el contenedor correspondiente. El número de unidades GPU reservadas para todos los contenedores de una tarea no debe superar el número de GPU disponibles en la instancia de contenedor en la que se lanza la tarea. Para obtener más información, consulte Cómo crear una definición de tarea.

importante

Si los requisitos de GPU no se especifican en la definición de tarea, la tarea utilizará el runtime de Docker predeterminado.

A continuación, se muestra el formato JSON de los requisitos de GPU en una definición de tarea:

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

El ejemplo siguiente muestra la sintaxis de un contenedor Docker que especifica un requisito de GPU. Este contenedor utiliza 2 GPU, ejecuta la utilidad nvidia-smi y después termina.

{ "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" }