Trabajos paralelos de varios nodos - AWS Batch

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Trabajos paralelos de varios nodos

Los trabajos paralelos de varios nodos le permiten ejecutar trabajos individuales que abarcan varias instancias de Amazon EC2. Los trabajos paralelos de varios nodos de AWS Batch le permiten ejecutar aplicaciones informáticas de alto rendimiento a gran escala estrechamente acopladas y entrenar modelos de GPU distribuida sin necesidad de lanzar, configurar y administrar los recursos de Amazon EC2 directamente. Un trabajo paralelo de AWS Batch varios nodos es compatible con cualquier marco que admita la comunicación entre nodos basada en IP. Algunos ejemplos son Apache MXNet TensorFlow, Caffe2 o Message Passing Interface (MPI).

Los trabajos paralelos de varios nodos se envían como un único trabajo. Sin embargo, la definición de trabajo (o las anulaciones de nodos de envío de trabajos) especifica el número de nodos que se deben crear para el trabajo y qué grupos de nodos deben crearse. Cada trabajo paralelo de varios nodos contiene un nodo principal, que se lanza en primer lugar. Una vez que el nodo principal está en marcha, se lanzan e inician los nodos secundarios. El trabajo finaliza solo si sale el nodo principal. A continuación, se detienen todos los nodos secundarios. Para obtener más información, consulte Grupos de nodos.

Los nodos de trabajo paralelos de varios nodos son de un solo inquilino. Esto significa que solo se ejecuta un contenedor de trabajos en cada instancia de Amazon EC2.

El estado final del trabajo (SUCCEEDED o FAILED) lo determina el estado final del trabajo del nodo principal. Para obtener el estado de un trabajo paralelo de varios nodos, puede describir el trabajo utilizando el ID de trabajo obtenido al enviar el trabajo. Si necesita los detalles de los nodos secundarios, deberá describir cada nodo secundario por separado. Puede direccionar los nodos mediante la notación #N (empezando por 0). Por ejemplo, para acceder a los detalles del segundo nodo de un trabajo, describa aws_batch_job_id #1 mediante la operación de API. AWS Batch DescribeJobs La información started, stoppedAt, statusReason y exit de un trabajo paralelo de varios nodos se rellena desde el nodo principal.

Si especifica los reintentos de trabajo, un error en el nodo principal provocará otro intento. Los errores en los nodos secundarios no provocan que se produzcan más intentos. Cada nuevo intento de un trabajo paralelo de varios nodos actualiza el intento correspondiente de sus nodos secundarios asociados.

Para ejecutar trabajos paralelos de varios nodos AWS Batch, el código de la aplicación debe contener los marcos y las bibliotecas necesarios para la comunicación distribuida.

Variables de entorno

En tiempo de ejecución, cada nodo tiene configuradas las variables de entorno estándar que reciben todos los AWS Batch trabajos. Además, los nodos se configuran con las siguientes variables de entorno que son específicas para los trabajos paralelos de varios nodos:

AWS_BATCH_JOB_MAIN_NODE_INDEX

Esta variable se establece en el número de índice del nodo principal del trabajo. El código de la aplicación puede comparar AWS_BATCH_JOB_MAIN_NODE_INDEX con AWS_BATCH_JOB_NODE_INDEX en un nodo individual para determinar si es el nodo principal.

AWS_BATCH_JOB_MAIN_NODE_PRIVATE_IPV4_ADDRESS

Esta variable solo se establece en los trabajos paralelos de varios nodos. Esta variable no está presente en el nodo principal. Esta variable se establece en la dirección IPv4 privada del nodo principal del trabajo. El código de la aplicación del nodo secundario puede utilizar esta dirección para comunicarse con el nodo principal.

AWS_BATCH_JOB_NODE_INDEX

Esta variable se establece en el número de índice del nodo. El índice del nodo comienza a partir de 0 y cada nodo recibe un número de índice único. Por ejemplo, un trabajo paralelo de varios nodos con 10 elementos secundarios tiene valores de índice comprendidos entre 0 y 9.

AWS_BATCH_JOB_NUM_NODES

Esta variable se establece en el número de nodos solicitados para el trabajo en paralelo de varios nodos.

Grupos de nodos

Un grupo de nodos es un conjunto de nodos de trabajo idénticos que comparten las mismas propiedades de contenedor. Se puede utilizar AWS Batch para especificar hasta cinco grupos de nodos distintos para cada trabajo.

Cada grupo puede tener sus propias imágenes de contenedor, comandos, variables de entorno, etc. Por ejemplo, puede enviar un trabajo que requiera una sola instancia c5.xlarge para el nodo principal y cinco nodos secundarios de la instancia c5.xlarge. Cada uno de estos grupos de nodos distintos puede especificar diferentes imágenes de contenedor o comandos para ejecutarlos en cada trabajo.

Como alternativa, todos los nodos de su trabajo pueden usar un único grupo de nodos. Además, el código de su aplicación puede diferenciar las funciones de los nodos, como el nodo principal y el nodo secundario. Para ello, compara la variable de entorno AWS_BATCH_JOB_MAIN_NODE_INDEX con su propio valor para AWS_BATCH_JOB_NODE_INDEX. Puede tener un máximo de 1000 nodos en un solo trabajo. Este es el límite predeterminado de las instancias de un clúster de Amazon ECS. Puede solicitar un aumento de este límite.

nota

En la actualidad, todos los grupos de nodos de un trabajo paralelo de varios nodos deben utilizar el mismo tipo de instancia.

Ciclo de vida del trabajo

Al enviar un trabajo paralelo de varios nodos, el trabajo entra en el estado SUBMITTED. A continuación, el trabajo espera a que finalicen todas las dependencias del trabajo. El trabajo también pasa al estado RUNNABLE. Por último, AWS Batch aprovisiona la capacidad de instancia necesaria para ejecutar el trabajo y lanza estas instancias.

Cada trabajo paralelo de varios nodos contiene un nodo principal. El nodo principal es una subtarea única que AWS Batch supervisa para determinar el resultado del trabajo de varios nodos enviado. El nodo principal se lanza en primer lugar y pasa a tener el estado STARTING. El valor de tiempo de espera especificado en el parámetro attemptDurationSeconds se aplica a todo el trabajo y no a los nodos.

Cuando el nodo principal alcanza el estado RUNNING (después de que el contenedor del nodo se esté ejecutando), los nodos secundarios se lanzan y pasan al estado STARTING. Los nodos secundarios aparecen en orden aleatorio. No hay ninguna garantía sobre la sincronización o el orden del lanzamiento de los nodos secundarios. Para asegurarse de que todos los nodos de los trabajos están en el estado RUNNING después de que el contenedor del nodo se está ejecutando, el código de la aplicación puede consultar la API de AWS Batch para obtener información sobre el nodo principal y los nodos secundarios. Como alternativa, el código de la aplicación puede esperar hasta que todos los nodos estén en línea antes de iniciar cualquier tarea de procesamiento distribuido. La dirección IP privada del nodo principal está disponible en la variable de entorno AWS_BATCH_JOB_MAIN_NODE_PRIVATE_IPV4_ADDRESS de cada nodo secundario. El código de la aplicación puede utilizar esta información para coordinar y comunicar datos entre cada una de las tareas.

A medida que finalizan los nodos individuales, pasan al estado SUCCEEDED o FAILED, en función de su código de salida. Si finaliza el nodo principal, se considera que el trabajo ha finalizado y todos los nodos secundarios se detienen. Si un nodo secundario muere, AWS Batch no realiza ninguna acción en los demás nodos del trabajo. Si no desea que el trabajo continúe con una cantidad reducida de nodos, debe tenerlo en cuenta en el código de la aplicación. De este modo, se termina o se cancela el trabajo.

Consideraciones del entorno de computación

Hay varios aspectos que es preciso tener en cuenta al configurar entornos de computación para ejecutar trabajos paralelos de varios nodos con AWS Batch.

  • Los trabajos paralelos de varios nodos no se admiten en entornos de computación UNMANAGED.

  • Si va a enviar trabajos paralelos de varios nodos a un entorno de computación, considere la posibilidad de crear un grupo con ubicación en clúster en una única zona de disponibilidad y asociarlo a los recursos de computación. Esto mantiene los trabajos paralelos de varios nodos en una agrupación lógica de instancias muy próxima al alto potencial de flujo de la red. Para obtener más información, consulte Grupos de ubicación en la Guía del usuario de Amazon EC2.

  • Los trabajos paralelos de varios nodos no se admiten en entornos de computación que utilicen instancias de spot.

  • AWS Batch los trabajos paralelos de varios nodos utilizan el modo de awsvpc red Amazon ECS, que proporciona a los contenedores de trabajos paralelos de varios nodos las mismas propiedades de red que las instancias de Amazon EC2. Cada contenedor de trabajos paralelos de varios nodos obtiene su propia interfaz de red elástica, una dirección IP privada principal y un nombre de host DNS interno. La interfaz de red se crea en la misma subred de VPC como su recurso de computación de host. Los grupos de seguridad que se hayan aplicado a los recursos de computación se aplicarán también a ella. Para obtener más información, consulte Integración en red de las tareas con el modo de red awsvpc en la Guía para desarrolladores de Amazon Elastic Container Service.

  • El entorno de computación no puede tener asociados más de cinco grupos de seguridad.

  • El modo de red awsvpc no proporciona las interfaces de red elásticas para los trabajos paralelos de varios nodos con direcciones IP públicas. Para obtener acceso a Internet, los recursos de computación deben lanzarse en una subred privada configurada para utilizar una puerta de enlace NAT. Para obtener más información, consulte Gateways NAT en la Guía del usuario de Amazon VPC. La comunicación entre nodos debe utilizar la dirección IP privada o el nombre de host DNS para el nodo. Los trabajos paralelos de varios nodos que se ejecutan en recursos de computación dentro de subredes públicas no disponen de acceso de red saliente. Para crear una VPC con subredes privadas y una gateway NAT, consulte Creación de una nube virtual privada (VPC) .

  • Las interfaces de red elásticas que se crean y asocian a los recursos de computación no se pueden separar manualmente ni la cuenta puede modificarlas. De este modo, se evita la eliminación accidental de una interfaz de red elástica que esté asociada a un trabajo en ejecución. Para liberar las interfaces de red elásticas de una tarea, termine el trabajo.

  • El entorno de computación debe tener un número máximo de CPU virtuales suficiente para admitir el trabajo paralelo de varios nodos.

  • Su cuota de instancias de Amazon EC2 incluye la cantidad de instancias necesarias para ejecutar su trabajo. Por ejemplo, si el trabajo requiere 30 instancias, pero la cuenta solo puede ejecutar 20 en una región. Entonces, su trabajo se quedará estancado en el estado RUNNABLE.

  • Si especifica un tipo de instancia para un grupo de nodos en un trabajo paralelo de varios nodos, el entorno de computación debe ser capaz de lanzar ese tipo de instancia.