Uso de GPU en Amazon ECS - Amazon Elastic Container Service

Uso de GPU en Amazon ECS

Amazon ECS admite cargas de trabajo que utilizan unidades GPU cuando crea clústeres con instancias de contenedor habilitadas para GPU. Las instancias de contenedor de Amazon EC2 basadas en GPU que utilizan los tipos de instancia p2, p3, g3, g4 y g5 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 está preconfigurada con controladores de kernel de NVIDIA y un tiempo de ejecución de GPU de Docker. Para obtener más información, consulte AMI optimizada para Amazon ECS .

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

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

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

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.2.xlarge

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

Consideraciones

Le recomendamos que tenga en cuenta lo siguiente antes de comenzar a trabajar con GPU en Amazon ECS.

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

  • Puede ejecutar cargas de trabajo de GPU en instancias externas. Cuando se registra una instancia externa en el clúster, asegúrese de que la marca --enable-gpu se incluya en el script de instalación. Para obtener más información, consulte Registro de una instancia externa en un clúster .

  • Debe establecer ECS_ENABLE_GPU_SUPPORT en true en el archivo de configuración del agente. Para obtener más información, consulte Configuración del agente de contenedor de Amazon ECS .

  • Cuando ejecuta una tarea o crea un servicio, puede utilizar los atributos de tipo de instancia al configurar las restricciones de colocación de tareas para determinar las instancias de contenedor que se lanzan en la tarea. Esto le permite utilizar sus recursos de manera más eficiente. 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
  • Para cada contenedor que tiene un requisito de recursos de GPU especificado en la definición de contenedor, Amazon ECS establece el tiempo de ejecución del contenedor en el tiempo de ejecución del contenedor de NVIDIA.

  • Para que el tiempo de ejecución del contenedor NVIDIA funcione correctamente, es preciso establecer algunas variables de entorno en el contenedor. Para obtener una lista de estas variables de entorno, consulte nvidia-container-runtime. Amazon ECS establece el valor de las variables de entorno NVIDIA_VISIBLE_DEVICES en una lista de los ID de dispositivo de GPU que Amazon ECS asigna al contenedor. Amazon ECS no establece las demás variables de entorno necesarias. Por tanto, asegúrese de que la imagen del contenedor las establezca o que estén configuradas en la definición de contenedor.

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

  • El tipo de instancias p4d.24xlarge solo funciona con CUDA 11 o posterior.

  • La AMI de Amazon ECS optimizada para GPU está habilitada para IPv6, lo que provoca problemas cuando se utiliza yum. Para resolverlo, puede configurar que yum utilice IPv4 con el siguiente comando.

    echo "ip_resolve=4" >> /etc/yum.conf
  • Cuando crea una imagen de contenedor que no utiliza las imágenes base NVIDIA/CUDA, debe establecer la variable de tiempo de ejecución de contenedor NVIDIA_DRIVER_CAPABILITIES en uno de los siguientes valores:

    • utility,compute

    • all

    Para obtener información acerca de cómo establecer la variable, consulte Control del tiempo de ejecución del contenedor NVIDIA en el sitio web de NVIDIA.

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

Para utilizar las GPU en una instancia de contenedor y el tiempo de ejecución de GPU de Docker, asegúrese de designar el número de GPU que requiere el contenedor en la definición de tareas. Cuando haya contenedores habilitados para GPU, el agente de contenedor de Amazon ECS fijará 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 puede 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 Creación de una definición de tareas mediante la nueva consola .

importante

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

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

{ "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 dos GPU, ejecuta la utilidad nvidia-smi y, luego, se cierra.

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