Conmutación por error rápida de capacidad insuficiente en el clúster de Slurm - AWS ParallelCluster

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.

Conmutación por error rápida de capacidad insuficiente en el clúster de Slurm

A partir de AWS ParallelCluster versión 3.2.0, los clústeres se ejecutan con el modo de conmutación por error rápida con capacidad insuficiente habilitado de forma predeterminada. Esto minimiza el tiempo que se tarda en volver a poner en cola un trabajo cuando se detectan errores de capacidad insuficiente de EC2. Esto resulta especialmente eficaz cuando se configura el clúster con varios tipos de instancias.

EC2 detectó fallos por capacidad insuficiente:
  • InsufficientInstanceCapacity

  • InsufficientHostCapacity

  • InsufficientReservedInstanceCapacity

  • MaxSpotInstanceCountExceeded

  • SpotMaxPriceTooLow: se activa si el precio de solicitud de spot es menor que el precio mínimo requerido de cumplimiento de la solicitud de spot.

  • Unsupported: se activa con el uso de un tipo de instancia que no sea compatible en una Región de AWS específica.

En el modo de conmutación rápida por error con capacidad insuficiente, si se detecta un error de capacidad insuficiente al asignar un trabajo a SlurmQueues/compute resource, AWS ParallelCluster hace lo siguiente:

  1. Establece el recurso de computación en un estado deshabilitado (DOWN) durante un periodo de tiempo predefinido.

  2. Utiliza POWER_DOWN_FORCE para cancelar los trabajos de los nodos fallidos del recurso de computación y para suspender el nodo fallido. Establece el nodo fallido en el estado IDLE y POWER_DOWN (!) y, después, en POWERING_DOWN (%).

  3. Vuelve a poner el trabajo en cola para enviarlo a otro recurso de computación.

Los nodos estáticos y encendidos del recurso de computación deshabilitado no se ven afectados. Los trabajos se pueden completar en estos nodos.

Este ciclo se repite hasta que el trabajo se asigne correctamente a uno o varios nodos de recursos de computación. Para obtener más información sobre los estados de los nodos, consulte Guía de Slurm para el modo de cola múltiple.

Si no se encuentra ningún recurso de computación para ejecutar el trabajo, el trabajo se establece en el estado PENDING hasta que transcurra el periodo de tiempo predefinido. En este caso, puede modificar el periodo de tiempo predefinido tal y como se describe en la siguiente sección.

Parámetro de tiempo de espera de capacidad insuficiente

insufficient_capacity_timeout

insufficient_capacity_timeout especifica el periodo de tiempo (en segundos) durante el que el recurso de computación permanece en estado deshabilitado (down) cuando se detecta un error de capacidad insuficiente.

De forma predeterminada, insufficient_capacity_timeout está habilitado.

El valor predeterminado de insufficient_capacity_timeout es 600 segundos (10 minutos).

Si el valor de insufficient_capacity_timeout es menor o igual a cero, se deshabilita el modo de conmutación por error rápida con capacidad insuficiente.

Puede cambiar el valor de insufficient_capacity_timeout añadiendo el parámetro en el archivo de configuración clustermgtd ubicado en /etc/parallelcluster/slurm_plugin/parallelcluster_clustermgtd.conf en el HeadNode.

Se puede actualizar el parámetro en cualquier momento sin detener la flota de computación.

Por ejemplo:

  • insufficient_capacity_timeout=600:

    Si se detecta un error por capacidad insuficiente, el recurso de computación se establece como deshabilitado (DOWN). Transcurridos 10 minutos, el nodo fallido se establece en el estado idle~ (POWER_SAVING).

  • insufficient_capacity_timeout=60:

    Si se detecta un error por capacidad insuficiente, el recurso de computación se establece como deshabilitado (DOWN). Transcurrido 1 minutos, su nodo fallido se establece en el estado idle~.

  • insufficient_capacity_timeout=0:

    El modo de conmutación por error rápida con capacidad insuficiente está deshabilitado. El recurso de computación no está deshabilitado.

nota

Es posible que haya un retraso de hasta un minuto entre el momento en que los nodos fallan debido a errores de capacidad insuficiente y el momento en que el daemon de administración de clústeres detecta los errores de los nodos. Esto se debe a que el daemon de administración de clústeres comprueba si hay errores de capacidad insuficiente en los nodos y establece el estado down de los recursos de computación en intervalos de un minuto.

Estado del modo de conmutación por error rápida de capacidad insuficiente

Cuando un clúster se encuentra en el modo de conmutación por error rápida con capacidad insuficiente, puede comprobar su estado y los estados de los nodos.

Estados de los nodos

Cuando se envía un trabajo a un nodo dinámico de recursos de computación y se detecta un error de capacidad insuficiente, el nodo se coloca en el estado down# con el motivo.

(Code:InsufficientInstanceCapacity)Failure when resuming nodes.

A continuación, los nodos apagados (nodos en estado idle~) se establecen en down~ con el motivo.

(Code:InsufficientInstanceCapacity)Temporarily disabling node due to insufficient capacity.

El trabajo se vuelve a poner en cola en otros recursos de computación de la cola.

Los nodos estáticos del recurso de computación y los nodos que son UP no se ven afectados por el modo de conmutación por error rápida y con capacidad insuficiente.

Observe los estados de los nodos que se muestran en el siguiente ejemplo.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 30 idle~ queue1-dy-c-1-[1-15],queue1-dy-c-2-[1-15] queue2 up infinite 30 idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]

Enviamos un trabajo a queue1 que requiere un nodo.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 1 down# queue1-dy-c-1-1 queue1* up infinite 15 idle~ queue1-dy-c-2-[1-15] queue1* up infinite 14 down~ queue1-dy-c-1-[2-15] queue2 up infinite 30 idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]

Se lanza el nodo queue1-dy-c-1-1 para ejecutar el trabajo. Sin embargo, no se pudo iniciar la instancia debido a un error de capacidad insuficiente. El nodo queue1-dy-c-1-1 está configurado en down. El nodo dinámico apagado dentro del recurso de computación (queue2-dy-c-1) está establecido en down.

Puede comprobar el motivo del nodo con scontrol show nodes.

$ scontrol show nodes queue1-dy-c-1-1 NodeName=broken-dy-c-2-1 Arch=x86_64 CoresPerSocket=1 CPUAlloc=0 CPUTot=96 CPULoad=0.00 ... ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s Reason=(Code:InsufficientInstanceCapacity)Failure when resuming nodes [root@2022-03-10T22:17:50] $ scontrol show nodes queue1-dy-c-1-2 NodeName=broken-dy-c-2-1 Arch=x86_64 CoresPerSocket=1 CPUAlloc=0 CPUTot=96 CPULoad=0.00 ... ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s Reason=(Code:InsufficientInstanceCapacity)Temporarily disabling node due to insufficient capacity [root@2022-03-10T22:17:50]

El trabajo está en cola para otro tipo de instancias dentro de los recursos de computación de la cola.

Una vez transcurrido insufficient_capacity_timeout, los nodos del recurso de computación se restablecen a su estado idle~.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 30 idle~ queue1-dy-c-1-[1-15],queue1-dy-c-2-[1-15] queue2 up infinite 30 idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]

Una vez transcurrido insufficient_capacity_timeout y que los nodos del recurso de computación se hayan restablecido al estado idle~, el programador Slurm asigna a los nodos una prioridad inferior. El programador sigue seleccionando nodos de otros recursos de computación de cola con pesos más altos, a menos que se produzca una de las siguientes situaciones:

  • Los requisitos de envío de un trabajo coinciden con el recurso de computación recuperado.

  • No hay otros recursos de computación disponibles porque están al límite de su capacidad.

  • slurmctld se reinicia.

  • La flota de computación de AWS ParallelCluster se detiene y comienza a apagar y encender todos los nodos.

Registros relacionados

Los registros relacionados con los errores de capacidad insuficiente y el modo de conmutación rápida por error con capacidad insuficiente se encuentran en el registro resume y el registro clustermgtd de Slurm del nodo principal.

Slurm resume (/var/log/parallelcluster/slurm_resume.log)

Mensajes de error cuando un nodo no se inicia debido a una capacidad insuficiente.

[slurm_plugin.instance_manager:_launch_ec2_instances] - ERROR - Failed RunInstances request: dcd0c252-90d4-44a7-9c79-ef740f7ecd87 [slurm_plugin.instance_manager:add_instances_for_nodes] - ERROR - Encountered exception when launching instances for nodes (x1) ['queue1-dy-c-1-1']: An error occurred (InsufficientInstanceCapacity) when calling the RunInstances operation (reached max retries: 1): We currently do not have sufficient p4d.24xlarge capacity in the Availability Zone you requested (us-west-2b). Our system will be working on provisioning additional capacity. You can currently get p4d.24xlarge capacity by not specifying an Availability Zone in your request or choosing us-west-2a, us-west-2c.
Slurm clustermgtd (/var/log/parallelcluster/clustermgtd)

El recurso de computación c-1 de la queue1 está deshabilitado debido a una capacidad insuficiente.

[slurm_plugin.clustermgtd:_reset_timeout_expired_compute_resources] - INFO - The following compute resources are in down state due to insufficient capacity: {'queue1': {'c-1': ComputeResourceFailureEvent(timestamp=datetime.datetime(2022, 4, 14, 23, 0, 4, 769380, tzinfo=datetime.timezone.utc), error_code='InsufficientInstanceCapacity')}}, compute resources are reset after insufficient capacity timeout (600 seconds) expired

Una vez transcurrido el tiempo de espera de capacidad insuficiente, el recurso de computación se restablece y los nodos de los recursos de computación se establecen en idle~.

[root:_reset_insufficient_capacity_timeout_expired_nodes] - INFO - Reset the following compute resources because insufficient capacity timeout expired: {'queue1': ['c-1']}