Failover rápido de capacidade insuficiente do cluster Slurm - AWS ParallelCluster

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Failover rápido de capacidade insuficiente do cluster Slurm

A partir do AWS ParallelCluster versão 3.2.0, os clusters são executados com o modo de failover rápido de capacidade insuficiente ativado por padrão. Isso minimiza o tempo gasto tentando colocar novamente um trabalho na fila quando erros de capacidade insuficiente do EC2 são detectados. Isso é particularmente eficaz quando você configura seu cluster com vários tipos de instâncias.

O EC2 detectou falhas de capacidade insuficientes:
  • InsufficientInstanceCapacity

  • InsufficientHostCapacity

  • InsufficientReservedInstanceCapacity

  • MaxSpotInstanceCountExceeded

  • SpotMaxPriceTooLow: ativado se o seu preço de solicitação spot é inferior ao preço mínimo de atendimento de solicitação spot exigido.

  • Unsupported: ativado com o uso de um tipo de instância que não é compatível com uma Região da AWS específica.

No modo rápido de failure-over de capacidade insuficiente, se um erro de capacidade insuficiente for detectado quando um trabalho for atribuído a SlurmQueues / compute resource, o AWS ParallelCluster faz o seguinte:

  1. Ele define o recurso de computação para um estado desativado (DOWN) por um período de tempo predefinido.

  2. Ele usa POWER_DOWN_FORCE para cancelar as tarefas do nó com falha do recurso de computação e para suspender o nó com falha. Ele define o nó com falha para o estado IDLE e POWER_DOWN (!) e, em seguida, para POWERING_DOWN (%).

  3. Ele enfileira o trabalho em outro recurso de computação.

Os nós estáticos e ativados do recurso de computação desativado não são afetados. Os trabalhos podem ser concluídos nesses nós.

Esse ciclo se repete até que o trabalho seja atribuído com êxito a um ou mais nós de recursos de computação. Para mais informações sobre esses estados, consulte Guia do Slurm para o modo de várias filas.

Se nenhum recurso de computação for encontrado para executar o trabalho, o trabalho será definido no estado PENDING até que o período de tempo predefinido termine. Nesse caso, você pode modificar o período de tempo predefinido conforme descrito na seção a seguir.

Parâmetro de tempo limite de capacidade insuficiente

insufficient_capacity_timeout

insufficient_capacity_timeout especifica o período de tempo (em segundos) em que o recurso de computação é mantido no estado desativado (down) quando um erro de capacidade insuficiente é detectado.

Por padrão, insufficient_capacity_timeout é habilitado.

O insufficient_capacity_timeout padrão é 600 segundos (10 minutos).

Se o valor insufficient_capacity_timeout for menor ou igual a zero, o modo de failover rápido de capacidade insuficiente será desativado.

Você pode alterar o valor de insufficient_capacity_timeout adicionando o parâmetro no arquivo de configuração clustermgtd localizado em /etc/parallelcluster/slurm_plugin/parallelcluster_clustermgtd.conf no HeadNode.

O parâmetro pode ser atualizado a qualquer momento, sem interromper a frota de computação.

Por exemplo:

  • insufficient_capacity_timeout=600:

    Se um erro de capacidade insuficiente for detectado, o recurso de computação será definido como desativado (DOWN). Após 10 minutos, seu nó com falha é definido para o estado idle~ (POWER_SAVING).

  • insufficient_capacity_timeout=60:

    Se um erro de capacidade insuficiente for detectado, o recurso de computação será definido como desativado (DOWN). Após 1 minuto, seu nó com falha é definido para o estado idle~.

  • insufficient_capacity_timeout=0:

    O modo de failover rápido de capacidade insuficiente é desativado. O recurso de computação não é desativado.

nota

Pode haver um atraso de até um minuto entre o momento em que os nós falham com erros de capacidade insuficientes e o momento em que o daemon de gerenciamento de cluster detecta as falhas do nó. Isso ocorre porque o daemon de gerenciamento de cluster verifica falhas de capacidade insuficiente do nó e define os recursos de computação para o estado down em intervalos de um minuto.

Status do modo de failover rápido de capacidade insuficiente

Quando um cluster está no modo de failover rápido e de capacidade insuficiente, você pode verificar seu status e os estados dos nós.

Estados do nó

Quando uma tarefa é enviada a um nó dinâmico de recursos de computação e um erro de capacidade insuficiente é detectado, o nó é colocado nesse estado down# com razão.

(Code:InsufficientInstanceCapacity)Failure when resuming nodes.

Depois os nós desligados (nós no estado idle~) são configurados para down~ com razão.

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

O trabalho é enfileirado para outros recursos de computação na fila.

Os nós estáticos do recurso de computação e os nós que são UP não são afetados pelo modo de failover rápido de capacidade insuficiente.

Considere os estados dos nós mostrados no exemplo a seguir.

$ 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 um trabalho para a queue1, que requer um nó.

$ 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]

O nó queue1-dy-c-1-1 é iniciado para executar o trabalho. No entanto, a instância falhou ao ser iniciada devido a um erro de capacidade insuficiente. O nó queue1-dy-c-1-1 está definido como down. O nó dinâmico desligado dentro do recurso de computação (queue2-dy-c-1) está definido como down.

Você pode verificar a razão do nó com 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]

O trabalho é enfileirado em outro tipo de instância dentro dos recursos de computação da fila.

Depois de decorrido o insufficient_capacity_timeout, os nós no recurso de computação são redefinidos para o 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]

Depois de decorrido o insufficient_capacity_timeout e os nós no recurso de computação são redefinidos para o estado idle~, o programador Slurm atribui prioridade menor aos nós. O programador continua selecionando nós de outros recursos de computação da fila com pesos maiores, a menos que ocorra uma das seguintes situações:

  • Os requisitos de envio de um trabalho correspondem ao recurso de computação recuperado.

  • Nenhum outro recurso de computação está disponível porque eles estão lotados.

  • slurmctld é reiniciado.

  • A frota de computação do AWS ParallelCluster é interrompida e começa a desligar e ligar todos os nós.

Logs relacionados

Os logs relacionados a erros de capacidade insuficiente e ao modo rápido de failover de capacidade insuficiente podem ser encontrados no log resume do Slurm e no log clustermgtd no nó principal.

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

Mensagens de erro quando um nó falha na inicialização devido à capacidade 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)

O recurso de computação c-1 em queue1 está desativado devido à capacidade 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

Depois que o tempo limite de capacidade insuficiente expirar, o recurso de computação é redefinido e os nós dentro dos recursos de computação são definidos como idle~.

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