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
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
entrue
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 queyum
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.
-
Ejecute el siguiente comando para clonar el
amazon-ecs-ami repo
.git clone https://github.com/aws/amazon-ecs-ami
-
Configure el agente de Amazon ECS requerido y las versiones de la AMI de Amazon Linux de origen en
release.auto.pkrvars.hcl
ooverrides.auto.pkrvars.hcl
. -
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 -
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