Definiciones de tareas de Amazon ECS para cargas de trabajo de GPU - Amazon Elastic Container Service

Definiciones de tareas de Amazon ECS para cargas de trabajo de GPU

Amazon ECS admite cargas de trabajo que utilizan unidades GPU cuando se crean clústeres con instancias de contenedor que admiten GPU. Las instancias de contenedor de Amazon EC2 basadas en GPU que utilizan los tipos de instancia p2, p3, p5, 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 de tipos de instancias de Amazon EC2.

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 de Linux optimizadas 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 que admiten 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 más información, consulte Instancias P2 de Amazon EC2, Instancias P3 de Amazon EC2 P3, Instancias P4d de Amazon EC2, Instancias P5 de Amazon EC2, Instancias G3 de Amazon EC2, Instancias G4 de Amazon EC2, Instancias G6 de Amazon EC2 y Amazon EC2 G6 Instances.

Tipo de instancia GPU Memoria de GPU (GiB) vCPU Memoria (GiB)

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
p5.48xlarge 8 640 192 2048

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

g6.xlarge 1 24 4 16
g6.2xlarge 1 24 8 32
g6.4xlarge 1 24 16 64
g6.8xlarge 1 24 32 128
g6.16.xlarge 1 24 64 256
g6.12xlarge 4 96 48 192
g6.24xlarge 4 96 48 192
g6.48xlarge 8 192 192 768
g6.metal 8 192 192 768
gr6.4xlarge 1 24 16 128
gr6.8xlarge 1 24 32 256

Puede recuperar el ID de Imagen de máquina de Amazon (AMI) de las AMI optimizadas para Amazon ECS al consultar la API de Parameter Store de AWS Systems Manager. Al utilizar este parámetro, no necesita buscar de manera manual los ID de la AMI optimizada para Amazon ECS. Para obtener más información acerca de la API de Systems Manager Parameter Store, consulte GetParameter. El usuario que utiliza debe tener el permiso de IAM ssm:GetParameter para recuperar los metadatos de la AMI optimizada para Amazon ECS.

aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended --region us-east-1

Consideraciones

nota

La compatibilidad con el tipo de familia de instancias g2 ha quedado obsoleta.

El tipo de familia de instancias p2 es compatible solo con versiones anteriores a 20230912 de la AMI de Amazon ECS optimizada para GPU. Si necesita seguir usando instancias p2, consulte Qué hacer si necesita una instancia P2.

Las actualizaciones locales de los controladores NVIDIA/CUDA en estos dos tipos de familia de instancias pueden provocar posibles errores en la carga de trabajo de la GPU.

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 de Amazon ECS.

  • 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 Cómo coloca Amazon ECS las tareas en las instancias de contenedor.

    El siguiente ejemplo lanza una tarea en una instancia de contenedor g4dn.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 == g4dn.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 Specialized Configurations with Docker. 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 del tipo de instancias p5 es compatible con la versión 20230929 y versiones posteriores de la AMI de Amazon ECS optimizada para GPU.

  • La familia de tipo de instancias g4 es compatible con la versión 20230913 y versiones posteriores de la AMI de Amazon ECS optimizada para GPU. Para obtener más información, consulte AMI de Linux 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.

  • Las GPU no son compatibles con los contenedores de Windows.

Uso compartido de GPU

Agregue los siguientes datos de usuario a las instancias cuando quiera que varios contenedores compartan 1 GPU. Para obtener más información acerca de los scripts de datos de usuario, consulte Ejecución de comandos al lanzar una instancia de EC2 con la entrada de datos de usuario en la Guía del usuario de Amazon EC2.

Utilizar la última AMI optimizada para GPU compatible

Puede usar la versión 20230906 de la AMI optimizada para GPU y agregar lo siguiente a los datos de usuario de la instancia.

Sustituya cluster-name por el nombre de su clúster.

const userData = ec2.UserData.forLinux(); userData.addCommands( 'sudo rm /etc/sysconfig/docker', 'echo DAEMON_MAXFILES=1048576 | sudo tee -a /etc/sysconfig/docker', 'echo OPTIONS="--default-ulimit nofile=32768:65536 --default-runtime nvidia" | sudo tee -a /etc/sysconfig/docker', 'echo DAEMON_PIDFILE_TIMEOUT=10 | sudo tee -a /etc/sysconfig/docker', 'sudo systemctl restart docker', );

Qué hacer si necesita una instancia P2

Si necesita utilizar la instancia P2, puede usar una de las siguientes opciones para continuar usando las instancias.

Debe modificar los datos de usuario de la instancia para ambas opciones. Para obtener más información acerca de los scripts de datos de usuario, consulte Ejecución de comandos al lanzar una instancia de EC2 con la entrada de datos de usuario en la Guía del usuario de Amazon EC2.

Utilizar la última AMI optimizada para GPU compatible

Puede usar la versión 20230906 de la AMI optimizada para GPU y agregar lo siguiente a los datos de usuario de la instancia.

Sustituya cluster-name por el nombre de su clúster.

#!/bin/bash echo "exclude=*nvidia* *cuda*" >> /etc/yum.conf echo "ECS_CLUSTER=cluster-name" >> /etc/ecs/ecs.config

Utilizar la última AMI optimizada para GPU y actualizar los datos de usuario

Puede agregar lo siguiente a los datos de usuario de la instancia. Esto desinstala los controladores Nvidia 535/Cuda12.2 y, a continuación, instala los controladores Nvidia 470/Cuda11.4 y corrige la versión.

#!/bin/bash yum remove -y cuda-toolkit* nvidia-driver-latest-dkms* tmpfile=$(mktemp) cat >$tmpfile <<EOF [amzn2-nvidia] name=Amazon Linux 2 Nvidia repository mirrorlist=\$awsproto://\$amazonlinux.\$awsregion.\$awsdomain/\$releasever/amzn2-nvidia/latest/\$basearch/mirror.list priority=20 gpgcheck=1 gpgkey=https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/7fa2af80.pub enabled=1 exclude=libglvnd-* EOF mv $tmpfile /etc/yum.repos.d/amzn2-nvidia-tmp.repo yum install -y system-release-nvidia cuda-toolkit-11-4 nvidia-driver-latest-dkms-470.182.03 yum install -y libnvidia-container-1.4.0 libnvidia-container-tools-1.4.0 nvidia-container-runtime-hook-1.4.0 docker-runtime-nvidia-1 echo "exclude=*nvidia* *cuda*" >> /etc/yum.conf nvidia-smi

Crear su propia AMI optimizada para GPU compatible con P2

Puede crear su propia AMI optimizada para la GPU de Amazon ECS personalizada que sea compatible con las instancias P2 y, a continuación, lanzar las instancias P2 mediante la AMI.

  1. Ejecute el siguiente comando para clonar el amazon-ecs-ami repo.

    git clone https://github.com/aws/amazon-ecs-ami
  2. Configure el agente de Amazon ECS requerido y las versiones de la AMI de Amazon Linux de origen en release.auto.pkrvars.hcl o overrides.auto.pkrvars.hcl.

  3. Ejecute el siguiente comando para crear una AMI de EC2 privada compatible con P2.

    Sustituya la región por la región de la instancia.

    REGION=region make al2keplergpu
  4. Utilice la AMI con los siguientes datos de usuario de la instancia para conectarse al clúster de Amazon ECS.

    Sustituya cluster-name por el nombre de su clúster.

    #!/bin/bash echo "ECS_CLUSTER=cluster-name" >> /etc/ecs/ecs.config