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á.
Slurm guia para o modo de fila múltipla
Aqui você pode aprender como AWS ParallelCluster e Slurm gerencie os nós da fila (partição) e como você pode monitorar os estados da fila e do nó.
Visão geral
A arquitetura de escalabilidade é baseada em SlurmGuia de agendamento em nuvem
Ciclo de vida do nó da nuvem
Durante todo o ciclo de vida, os nós da nuvem entram em vários, se não em todos, dos seguintes estados: POWER_SAVING, POWER_UP (pow_up), ALLOCATED (alloc) e POWER_DOWN (pow_dn). Em alguns casos, um nó da nuvem pode entrar no estado OFFLINE. A lista a seguir detalha vários aspectos desses estados no ciclo de vida do nó na nuvem.
-
Um nó em um estado
POWER_SAVINGaparece com um sufixo~(por exemplo,idle~) emsinfo. Nesse estado, nenhuma EC2 instância está apoiando o nó. No entanto, Slurm ainda pode alocar trabalhos para o nó. -
Um nó em transição para um estado
POWER_UPaparece com um sufixo#(por exemplo,idle#) emsinfo. Um nó faz a transição automática para umPOWER_UPestado, quando Slurm aloca um trabalho para um nó em umPOWER_SAVINGestado.Como alternativa, você pode fazer manualmente a transição dos nós para o estado
POWER_UPcomo usuário raizsucom o comando:$scontrol update nodename=nodenamestate=power_upNesse estágio, o
ResumeProgramé invocado, as EC2 instâncias são iniciadas e configuradas e o nó faz a transição para oPOWER_UPestado. -
Um nó atualmente disponível para uso aparece sem um sufixo (por exemplo
idle) emsinfo. Depois que o nó é configurado e se une ao cluster, ele fica disponível para executar trabalhos. Nesse estágio, o nó está configurado corretamente e pronto para uso.Como regra geral, recomendamos que o número de EC2 instâncias da Amazon seja igual ao número de nós disponíveis. Na maioria dos casos, os nós estáticos ficam disponíveis após a criação do cluster.
-
Um nó em transição para um estado
POWER_DOWNaparece com um sufixo%(por exemplo,idle%) emsinfo. Os nós dinâmicos entram automaticamente no estadoPOWER_DOWNdepois do ScaledownIdletime. Por outro lado, os nós estáticos na maioria dos casos não são desligados. No entanto, você pode colocar os nós no estadoPOWER_DOWNmanualmente como usuário raizsucom o comando:$scontrol update nodename=nodenamestate=down reason="manual draining"Nesse estado, as instâncias associadas a um nó são encerradas e o nó volta ao estado
POWER_SAVINGe fica disponível para uso após o ScaledownIdletime.A ScaledownIdletimeconfiguração é salva no Slurm
SuspendTimeoutdefinição de configuração. -
Um nó que está off-line aparece com um sufixo
*(por exemplo,down*) emsinfo. Um nó fica off-line se o Slurm o controlador não pode entrar em contato com o nó ou se os nós estáticos estiverem desativados e as instâncias de apoio forem encerradas.
Considere os estados dos nós mostrados no exemplo sinfo a seguir.
$sinfoPARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa up infinite 4 idle~ efa-dy-efacompute1-[1-4] efa up infinite 1 idle efa-st-efacompute1-1 gpu up infinite 1 idle% gpu-dy-gpucompute1-1 gpu up infinite 9 idle~ gpu-dy-gpucompute1-[2-10] ondemand up infinite 2 mix# ondemand-dy-ondemandcompute1-[1-2] ondemand up infinite 18 idle~ ondemand-dy-ondemandcompute1-[3-10],ondemand-dy-ondemandcompute2-[1-10] spot* up infinite 13 idle~ spot-dy-spotcompute1-[1-10],spot-dy-spotcompute2-[1-3] spot* up infinite 2 idle spot-st-spotcompute2-[1-2]
Os nós spot-st-spotcompute2-[1-2] e efa-st-efacompute1-1 já têm instâncias de backup configuradas e estão disponíveis para uso. Os nós ondemand-dy-ondemandcompute1-[1-2] estão no estado POWER_UP e devem estar disponíveis em instantes. O nó gpu-dy-gpucompute1-1 está no estado POWER_DOWN e passa para o estado POWER_SAVING depois de ScaledownIdletime (o padrão é 10 minutos).
Todos os outros nós estão no POWER_SAVING estado sem nenhuma EC2 instância apoiando-os.
Trabalhando com um nó disponível
Um nó disponível é apoiado por uma EC2 instância da Amazon. Por padrão, o nome do nó pode ser usado para fazer SSH diretamente na instância (por exemplo, ssh
efa-st-efacompute1-1). O endereço IP privado da instância pode ser recuperado usando o comando:
$scontrol show nodesnodename
Verifique o endereço IP exibido no campo NodeAddr.
Para nós que não estão disponíveis, o NodeAddr campo não deve apontar para uma EC2 instância da Amazon em execução. Em vez disso, deve ser igual ao nome do nó.
Estados do trabalho e envio
Na maioria dos casos, os trabalhos enviados são imediatamente alocados aos nós do sistema ou colocados como pendentes se todos os nós estiverem alocados.
Se os nós alocados para um trabalho incluírem qualquer nó em um estado POWER_SAVING, o trabalho começará com um estado CF ou CONFIGURING. Nesse momento, o trabalho aguarda para que os nós no estado POWER_SAVING façam a transição para o estado POWER_UP e fiquem disponíveis.
Depois que todos os nós alocados para uma trabalho estiverem disponíveis, o trabalho entrará no estado RUNNING (R).
Por padrão, todos os trabalhos são enviados para a fila padrão (conhecida como partição em Slurm). Isso é representado por um * sufixo após o nome da fila. Você pode selecionar uma fila usando a opção de envio de trabalho -p.
Todos os nós são configurados com os seguintes recursos, que podem ser usados nos comandos de envio de tarefas:
-
Um tipo de instância (por exemplo,
c5.xlarge) -
Um tipo de nó (que pode ser
dynamicoustatic.)
Você pode ver os recursos de um determinado nó usando o comando:
$scontrol show nodesnodename
Quando retornar, confira a lista AvailableFeatures.
Considere o estado inicial do cluster, que você pode ver executando o comando sinfo.
$sinfoPARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa up infinite 4 idle~ efa-dy-efacompute1-[1-4] efa up infinite 1 idle efa-st-efacompute1-1 gpu up infinite 10 idle~ gpu-dy-gpucompute1-[1-10] ondemand up infinite 20 idle~ ondemand-dy-ondemandcompute1-[1-10],ondemand-dy-ondemandcompute2-[1-10] spot* up infinite 13 idle~ spot-dy-spotcompute1-[1-10],spot-dy-spotcompute2-[1-3] spot* up infinite 2 idle spot-st-spotcompute2-[1-2]
Observe que a lista padrão é spot. É indicada pelo sufixo *.
Envia um trabalho para um nó estático na fila padrão (spot).
$sbatch --wrap"sleep 300"-N1-Cstatic
Envia um trabalho para um nó dinâmico na fila EFA.
$sbatch --wrap"sleep 300"-pefa-Cdynamic
Envia um trabalho para oito (8) nós c5.2xlarge e dois (2) nós t2.xlarge na fila ondemand.
$sbatch --wrap"sleep 300"-pondemand-N10-C "[c5.2xlarge*8&t2.xlarge*2]"
Envia um trabalho para um nó da GPU na fila gpu.
$sbatch --wrap"sleep 300"-pgpu-G1
Considere o estado dos trabalhos usando o comando squeue.
$squeueJOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 12 ondemand wrap ubuntu CF 0:36 10 ondemand-dy-ondemandcompute1-[1-8],ondemand-dy-ondemandcompute2-[1-2] 13 gpu wrap ubuntu CF 0:05 1 gpu-dy-gpucompute1-1 7 spot wrap ubuntu R 2:48 1 spot-st-spotcompute2-1 8 efa wrap ubuntu R 0:39 1 efa-dy-efacompute1-1
Os trabalhos 7 e 8 (nas filas spot e efa) já estão em execução (R). Os trabalhos 12 e 13 ainda estão com configuração em andamento (CF), provavelmente aguardando a disponibilização das instâncias.
# Nodes states corresponds to state of running jobs$sinfoPARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa up infinite 3 idle~ efa-dy-efacompute1-[2-4] efa up infinite 1 mix efa-dy-efacompute1-1 efa up infinite 1 idle efa-st-efacompute1-1 gpu up infinite 1 mix~ gpu-dy-gpucompute1-1 gpu up infinite 9 idle~ gpu-dy-gpucompute1-[2-10] ondemand up infinite 10 mix# ondemand-dy-ondemandcompute1-[1-8],ondemand-dy-ondemandcompute2-[1-2] ondemand up infinite 10 idle~ ondemand-dy-ondemandcompute1-[9-10],ondemand-dy-ondemandcompute2-[3-10] spot* up infinite 13 idle~ spot-dy-spotcompute1-[1-10],spot-dy-spotcompute2-[1-3] spot* up infinite 1 mix spot-st-spotcompute2-1 spot* up infinite 1 idle spot-st-spotcompute2-2
Recursos e estado do nó
Na maioria dos casos, os estados dos nós são totalmente gerenciados de AWS ParallelCluster acordo com os processos específicos no ciclo de vida do nó na nuvem descritos anteriormente neste tópico.
No entanto, AWS ParallelCluster também substitui ou encerra nós não íntegros em DRAINED estados DOWN e nós que têm instâncias de backup não íntegras. Para obter mais informações, consulte clustermgtd.
Estados de partição
AWS ParallelCluster suporta os seguintes estados de partição. A Slurm partição é uma fila de entrada. AWS ParallelCluster
-
UP: indica que a partição está em um estado ativo. Esse é o valor padrão de uma partição. Nesse estado, todos os nós da partição ficam ativos e disponíveis para uso. -
INACTIVE: indica que a partição está em um estado inativo. Nesse estado, todas as instâncias de backup dos nós de uma partição inativa são encerradas. Novas instâncias não são iniciadas para nós em uma partição inativa.
cluster update-compute-fleet
-
Interromper a frota de computação - Quando o comando a seguir é executado, todas as partições passam para o
INACTIVEestado e AWS ParallelCluster os processos mantêm as partições no estado.INACTIVE$pcluster update-compute-fleet --cluster-nametestSlurm\ --regioneu-west-1--status STOP_REQUESTED -
Iniciando a frota de computação - Quando o comando a seguir é executado, todas as partições inicialmente passam para o estado
UP. No entanto, AWS ParallelCluster os processos não mantêm a partição em umUPestado. Você precisa alterar os estados das partições manualmente. Todos os nós estáticos ficam disponíveis após alguns minutos. Observe que definir uma partição comoUPnão ativa nenhuma capacidade dinâmica.$pcluster update-compute-fleet --cluster-nametestSlurm\ --regioneu-west-1--status START_REQUESTED
Quando update-compute-fleet executado, você pode verificar o estado do cluster executando o comando pcluster describe-compute-fleet e verificando Status. A seguir, listamos estados possíveis:
-
STOP_REQUESTED: a solicitação de interrupção da frota de computação é enviada ao cluster. -
STOPPING: no momento, o processopclusterestá interrompendo a frota de computação. -
STOPPED: o processopclusterfinalizou o processo de interrupção, todas as partições estão em estadoINACTIVEe todas as instâncias de computação foram encerradas. -
START_REQUESTED: a solicitação de inicialização da frota de computação é enviada ao cluster. -
STARTING: o processopclusterestá iniciando o cluster no momento. -
RUNNING: o processopclusterfinalizou o processo inicial, todas as partições estão no estadoUPe os nós estáticos ficam disponíveis após alguns minutos. -
PROTECTED: esse status indica que algumas partições têm falhas de bootstrap consistentes. As partições afetadas estão inativas. Investigue o problema e, em seguida, executeupdate-compute-fleetpara reativar a frota.
Controle manual de filas
Em alguns casos, talvez você queira ter algum controle manual sobre os nós ou a fila (conhecido como partição em Slurm) em um cluster. Você pode gerenciar nós em um cluster por meio dos seguintes procedimentos comuns usando o comando scontrol.
-
Ative os nós dinâmicos no estado
POWER_SAVINGExecute o comando como usuário raiz
su:$scontrol update nodename=nodenamestate=power_upVocê também pode enviar um
sleep 1trabalho de espaço reservado solicitando um certo número de nós e, em seguida, confiar em Slurm para alimentar o número necessário de nós. -
Desligue os nós dinâmicos antes de ScaledownIdletime
Recomendamos que você defina nós dinâmicos para
DOWNcomo usuário raizsucom o comando:$scontrol update nodename=nodenamestate=down reason="manually draining"AWS ParallelCluster encerra e redefine automaticamente os nós dinâmicos abatidos.
Em geral, não recomendamos definir os nós para
POWER_DOWNdiretamente com o comandoscontrol update nodename=. Isso porque AWS ParallelCluster gerencia automaticamente o processo de desligamento.nodenamestate=power_down -
Desativar uma fila (partição) ou interromper todos os nós estáticos em uma partição específica
Defina uma fila específica para
INACTIVEcomo usuário raizsucom o comando:$scontrol update partition=queuenamestate=inactiveIsso encerra todas as instâncias de backup de nós na partição.
-
Ativar uma fila (partição)
Defina uma fila específica para
UPcomo usuário raizsucom o comando:$scontrol update partition=queuenamestate=up
Comportamento e ajustes de escalabilidade
Veja a seguir o exemplo do fluxo de trabalho de escalabilidade normal:
-
O programador recebe um trabalho que requer dois nós.
-
O programador faz a transição de dois nós para um estado
POWER_UPe chamaResumeProgramcom os nomes dos nós (por exemplo,queue1-dy-spotcompute1-[1-2]). -
ResumePrograminicia duas EC2 instâncias da Amazon e atribui os endereços IP e nomes de host privados dequeue1-dy-spotcompute1-[1-2], aguardandoResumeTimeout(o período padrão é de 30 minutos) antes de redefinir os nós. -
As instâncias são configuradas e se unem ao cluster. Um trabalho começa a ser executado nas instâncias.
-
O trabalho é concluído e para de ser executado.
-
Depois de decorrido o
SuspendTimeconfigurado (que está definido como ScaledownIdletime), o programador define as instâncias para o estadoPOWER_SAVING. Em seguida, o programador definequeue1-dy-spotcompute1-[1-2]para o estadoPOWER_DOWNe chamaSuspendProgramcom os nomes dos nós. -
SuspendProgramé chamado para dois nós. Os nós permanecem no estadoPOWER_DOWN, por exemplo, permanecendoidle%por umSuspendTimeout(o período padrão é 120 segundos (2 minutos)). Depois declustermgtddetectar que os nós estão sendo desligados, ele encerra as instâncias de backup. Em seguida, ele passaqueue1-dy-spotcompute1-[1-2]para o estado ocioso e redefine o endereço IP privado e o nome do host para que esteja pronto para ser ativado em trabalhos futuros.
Se algo der errado e uma instância de um determinado nó não puder ser iniciada por algum motivo, acontece o seguinte:
-
O programador recebe um trabalho que requer dois nós.
-
O programador faz a transição de dois nós de expansão na nuvem para o estado
POWER_UPe chamaResumeProgramcom os nomes dos nós (por exemploqueue1-dy-spotcompute1-[1-2]). -
ResumePrograminicia somente uma (1) EC2 instância da Amazon e configuraqueue1-dy-spotcompute1-1, com uma (1) instânciaqueue1-dy-spotcompute1-2, falhando ao iniciar. -
queue1-dy-spotcompute1-1não é afetado e fica on-line depois de chegar ao estadoPOWER_UP. -
queue1-dy-spotcompute1-2faz a transição para oPOWER_DOWNestado, e o trabalho é enfileirado automaticamente porque Slurm detecta uma falha no nó. -
queue1-dy-spotcompute1-2fica disponível apósSuspendTimeout(o padrão é 120 segundos (2 minutos)). Enquanto isso, o trabalho é recolocado na fila e pode começar a ser executado em outro nó. -
O processo acima se repete até que o trabalho possa ser executado em um nó disponível sem que ocorra uma falha.
Há dois parâmetros de temporização que podem ser ajustados, se necessário:
-
ResumeTimeout(o padrão é 30 minutos):ResumeTimeoutcontrola a hora Slurm espera antes de fazer a transição do nó para o estado inativo.-
Pode ser útil estender
ResumeTimeoutse o processo de pré/pós-instalação demorar tanto assim. -
ResumeTimeouttambém é o tempo máximo que AWS ParallelCluster espera antes de substituir ou redefinir um nó se houver algum problema. Os nós de computação terminam automaticamente se ocorrer algum erro durante a inicialização ou a configuração. AWS ParallelCluster os processos substituem um nó após a detecção de uma instância encerrada.
-
-
SuspendTimeout(o padrão é 120 segundos (2 minutos)):SuspendTimeoutcontrola a rapidez com que os nós são colocados de volta no sistema e que ficam prontos para uso novamente.-
Um menor
SuspendTimeoutsignifica que os nós são redefinidos mais rapidamente e Slurm pode tentar iniciar instâncias com mais frequência. -
Um
SuspendTimeoutmais longo significa que os nós com falha são reinicializados mais lentamente. Enquanto isso, Slurm tenta usar outros nós. SeSuspendTimeoutfor mais do que alguns minutos, Slurm tenta percorrer todos os nós do sistema. Um mais longoSuspendTimeoutpode ser benéfico para sistemas de grande escala (mais de 1.000 nós) para reduzir o estresse em Slurm quando tenta reenfileirar trabalhos que falham com frequência. -
Observe que
SuspendTimeoutisso não se refere ao tempo de AWS ParallelCluster espera para encerrar uma instância de apoio para um nó. As instâncias de backup para nós dePOWER_DOWNsão encerradas imediatamente. O processo de encerramento geralmente é concluído em alguns minutos. No entanto, durante esse período, o nó permanece no estadoPOWER_DOWNe não fica disponível para uso do programador.
-
Logs para a arquitetura
A lista a seguir contém os logs chave. O nome do stream de log usado com o Amazon CloudWatch Logs tem o formato, que {hostname}.{instance_id}.{logIdentifier}logIdentifier segue os nomes dos registros.
-
ResumeProgram:/var/log/parallelcluster/slurm_resume.log(slurm_resume) -
SuspendProgram:/var/log/parallelcluster/slurm_suspend.log(slurm_suspend) -
clustermgtd:/var/log/parallelcluster/clustermgtd.log(clustermgtd) -
computemgtd:/var/log/parallelcluster/computemgtd.log(computemgtd) -
slurmctld:/var/log/slurmctld.log(slurmctld) -
slurmd:/var/log/slurmd.log(slurmd)
Problemas comuns e como depurar:
Nós que falharam ao iniciar, ativar ou ingressar no cluster
-
Nós dinâmicos:
-
Verifique o log
ResumeProgrampara ver seResumeProgramfoi chamado com o nó. Caso contrário, verifique oslurmctldregistro para determinar se Slurm tentei ligarResumeProgramcom o nó. Observe que permissões incorretas emResumeProgrampodem fazer com que ele falhe silenciosamente. -
Se
ResumeProgramfor chamado, verifique se uma instância foi executada para o nó. Se a instância não foi iniciada, deve haver uma mensagem de erro clara sobre o motivo da falha na inicialização da instância. -
Se uma instância foi iniciada, pode ter havido algum problema durante o processo de bootstrap. Encontre o endereço IP privado e o ID da instância correspondentes no
ResumeProgramregistro e veja os registros de bootstrap correspondentes para a instância específica em CloudWatch Logs.
-
-
Nós estáticos:
-
Verifique o log
clustermgtdpara ver se foram iniciadas instâncias para o nó. Se as instâncias não iniciarem, deve haver mensagens de erro claras sobre o motivo da falha na inicialização da instância. -
Se uma instância foi iniciada, houve algum problema com o processo de bootstrap. Encontre o IP privado e o ID da instância correspondentes no
clustermgtdregistro e veja os registros de bootstrap correspondentes para a instância específica em CloudWatch Logs.
-
Nódulos substituídos ou encerrados inesperadamente e falhas nos nós
-
Nós substituídos/encerrados inesperadamente:
-
Na maioria dos casos,
clustermgtdlida com todas as ações de manutenção do nó. Para verificar se um nó foiclustermgtdsubstituído ou encerrado, verifique o logclustermgtd. -
Se
clustermgtdtiver substituído ou encerrado o nó, deverá haver uma mensagem indicando o motivo da ação. Se o motivo estiver relacionado com o programador (por exemplo, o nó forDOWN), verifique o logslurmctldpara obter mais detalhes. Se o motivo estiver EC2 relacionado à Amazon, use ferramentas como a Amazon CloudWatch ou o EC2 console da Amazon, a CLI ou SDKs, para verificar o status ou os registros dessa instância. Por exemplo, você pode verificar se a instância tinha eventos programados ou falhou nas verificações de status de EC2 saúde da Amazon. -
Se
clustermgtdnão encerrou o nó, verifique se o nócomputemgtdfoi encerrado ou se a instância EC2 foi encerrada para recuperar uma instância spot.
-
-
Falhas do nó:
-
Na maioria dos casos, os trabalhos são automaticamente enfileirados se um nó falhar. Examine o log
slurmctldpara ver por que um trabalho ou um nó falhou e avalie a situação a partir daí.
-
Falha ao substituir ou encerrar instâncias, falha ao desligar os nós
-
Em geral,
clustermgtdlida com todas as ações esperadas de encerramento da instância. Examine o logclustermgtdpara ver por que ele não conseguiu substituir ou encerrar um nó. -
Se os nós dinâmicos falharem por ScaledownIdletime, consulte o log
SuspendProgrampara ver se os processosslurmctldfizeram chamadas com o nó específico como argumento. Na verdade,SuspendProgramnão executa nenhuma ação específica. Em vez disso, ele só cria logs quando é chamado. Todos os encerramentos eNodeAddrredefinições de instâncias são concluídos porclustermgtd. Slurm faz a transição dos nós paraIDLEdepoisSuspendTimeout.
Outros problemas:
-
AWS ParallelCluster não toma decisões de alocação de tarefas ou escalabilidade. Ele só tenta iniciar, encerrar e manter os recursos de acordo com Slurmdas instruções.
Para problemas relacionados à alocação de trabalhos, alocação de nós e decisão de escalabilidade, consulte o log
slurmctldem busca de erros.