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.
Slurm guía para el modo de cola múltiple
Aquí puede aprender cómo AWS ParallelCluster y Slurm administre los nodos de colas (particiones) y cómo puede monitorear los estados de las colas y los nodos.
Información general
La arquitectura de escalado se basa en Slurmde la guía de programación en la nube
Ciclo de vida de los nodos de la nube
A lo largo de su ciclo de vida, los nodos de la nube entran en varios de los siguientes estados (o en todos): POWER_SAVING
, POWER_UP
(pow_up
), ALLOCATED
(alloc
) y POWER_DOWN
(pow_dn
). En algunos casos, un nodo de la nube puede entrar en el estado OFFLINE
. La siguiente lista detalla varios aspectos de estos estados en el ciclo de vida de los nodos de la nube.
-
Un nodo en un estado
POWER_SAVING
aparece con un sufijo~
(por ejemploidle~
) ensinfo
. En este estado, ninguna EC2 instancia respalda el nodo. Sin embargo, Slurm aún puede asignar trabajos al nodo. -
Un nodo en transición a un estado
POWER_UP
aparece con un sufijo#
(por ejemploidle#
) ensinfo
. Un nodo pasa automáticamente a unPOWER_UP
estado cuando Slurm asigna una tarea a un nodo en unPOWER_SAVING
estado.Como alternativa, puede pasar manualmente los nodos al estado
POWER_UP
como usuario raíz desu
con el comando:$
scontrol update nodename=
nodename
state=power_upEn esta etapa,
ResumeProgram
se invoca, se lanzan y configuran las EC2 instancias y el nodo pasa alPOWER_UP
estado. -
Un nodo que está actualmente disponible para su uso aparece sin sufijo (por ejemplo
idle
) ensinfo
. Una vez que el nodo se haya configurado y se haya unido al clúster, estará disponible para ejecutar trabajos. En esta etapa, el nodo está correctamente configurado y listo para su uso.Como regla general, recomendamos que el número de EC2 instancias de Amazon sea el mismo que el número de nodos disponibles. En la mayoría de los casos, los nodos estáticos están disponibles una vez creado el clúster.
-
Un nodo que está en transición a un estado
POWER_DOWN
aparece con un sufijo%
(por ejemploidle%
) ensinfo
. Los nodos dinámicos entran automáticamente en el estadoPOWER_DOWN
después de ScaledownIdletime. Por el contrario, los nodos estáticos no están apagados en la mayoría de los casos. Sin embargo, como usuario raíz dePOWER_DOWN
, puede colocar los nodos en el estadosu
manualmente con el comando:$
scontrol update nodename=
nodename
state=down reason="manual draining"En este estado, se finalizan las instancias asociadas a un nodo, y el nodo vuelve a ese estado
POWER_SAVING
y está disponible para su uso después de ScaledownIdletime.La ScaledownIdletimeconfiguración se guarda en Slurm
SuspendTimeout
ajuste de configuración. -
Un nodo que esté desconectado aparece con un sufijo
*
(por ejemplodown*
) ensinfo
. Un nodo se desconecta si Slurm el controlador no puede contactar con el nodo o si los nodos estáticos están deshabilitados y las instancias de respaldo están terminadas.
Observe los estados de nodo que se muestran en el siguiente ejemplo de sinfo
.
$
sinfo
PARTITION 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]
Los nodos spot-st-spotcompute2-[1-2]
y efa-st-efacompute1-1
ya tienen instancias de respaldo configuradas y están disponibles para su uso. Los nodos ondemand-dy-ondemandcompute1-[1-2]
se encuentran en el estado POWER_UP
y deberían estar disponibles en unos minutos. El nodo gpu-dy-gpucompute1-1
se encuentra en el estado POWER_DOWN
y pasa al estado POWER_SAVING
después de ScaledownIdletime (el valor predeterminado es 10 minutos).
Todos los demás nodos están en POWER_SAVING
estado y no hay EC2 instancias que los respalden.
Trabajo con un nodo disponible
Un nodo disponible está respaldado por una EC2 instancia de Amazon. De forma predeterminada, el nombre del nodo se puede usar SSH directamente en la instancia (por ejemplossh
efa-st-efacompute1-1
). La dirección IP privada de la instancia se puede recuperar con el comando:
$
scontrol show nodes
nodename
Compruebe la dirección IP en el campo NodeAddr
devuelto.
En el caso de los nodos que no están disponibles, el NodeAddr
campo no debe apuntar a una EC2 instancia de Amazon en ejecución. Más bien, debe ser el mismo que el nombre del nodo.
Estados y envío de los trabajos
En la mayoría de los casos, los trabajos enviados se asignan inmediatamente a los nodos del sistema o se dejan pendientes si se asignan todos los nodos.
Si los nodos asignados a un trabajo incluyen algún nodo en un estado POWER_SAVING
, el trabajo comienza con un estado CF
o CONFIGURING
. En este momento, el trabajo espera a que los nodos del estado POWER_SAVING
pasen al estado POWER_UP
y estén disponibles.
Una vez que todos los nodos asignados a un trabajo estén disponibles, el trabajo pasa al estado RUNNING
(R
).
De forma predeterminada, todos los trabajos se envían a la cola predeterminada (conocida como partición) en Slurm). Esto se indica con un *
sufijo después del nombre de la cola. Puede seleccionar una cola mediante la opción de envío de trabajos -p
.
Todos los nodos están configurados con las siguientes características, que se pueden utilizar en los comandos de envío de trabajos:
-
Un tipo de instancia (por ejemplo
c5.xlarge
) -
Un tipo de nodo (puede ser
dynamic
ostatic
)
Puede ver las características de un nodo en particular mediante el comando:
$
scontrol show nodes
nodename
En la devolución, consulte la lista AvailableFeatures
.
Tenga en cuenta el estado inicial del clúster, que puede ver ejecutando el comando sinfo
.
$
sinfo
PARTITION 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]
Tenga en cuenta que la cola predeterminada es spot
. Se indica mediante el sufijo *
.
Envíe un trabajo a un nodo estático de la cola predeterminada (spot
).
$
sbatch --wrap
"sleep 300"
-N1
-Cstatic
Envíe un trabajo a un nodo dinámico de la cola EFA
.
$
sbatch --wrap
"sleep 300"
-pefa
-Cdynamic
Envíe un trabajo a ocho (8) nodos c5.2xlarge
y dos (2) nodos t2.xlarge
de la cola ondemand
.
$
sbatch --wrap
"sleep 300"
-pondemand
-N10
-C "[c5.2xlarge*8&t2.xlarge*2
]"
Envíe un trabajo a un GPU nodo de la cola. gpu
$
sbatch --wrap
"sleep 300"
-pgpu
-G1
Tenga en cuenta el estado de los trabajos mediante el comando squeue
.
$
squeue
JOBID 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
Los trabajos 7 y 8 (en las colas spot
y efa
) ya se están ejecutando (R
). Los trabajos 12 y 13 aún se están configurando (CF
), probablemente esperando a que las instancias estén disponibles.
# Nodes states corresponds to state of running jobs
$
sinfo
PARTITION 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
Estado y características de los nodos
En la mayoría de los casos, los estados de los nodos se administran completamente de AWS ParallelCluster acuerdo con los procesos específicos del ciclo de vida de los nodos de la nube descritos anteriormente en este tema.
Sin embargo, AWS ParallelCluster también reemplaza o termina los nodos en mal estado y los DRAINED
estados DOWN
y nodos que tienen instancias de respaldo en mal estado. Para obtener más información, consulte clustermgtd.
Estados de partición
AWS ParallelCluster admite los siguientes estados de partición. A Slurm la partición es una cola en AWS ParallelCluster.
-
UP
: indica que la partición se encuentra en estado activo. Es el valor predeterminado de una partición. En este estado, todos los nodos de la partición están activos y disponibles para su uso. -
INACTIVE
: indica que la partición se encuentra en estado inactivo. En este estado, se finalizan todas las instancias que respaldan a los nodos de una partición inactiva. No se lanzan nuevas instancias para los nodos de una partición inactiva.
clúster update-compute-fleet
-
Detener la flota de procesamiento: cuando se ejecuta el siguiente comando, todas las particiones pasan al
INACTIVE
estado y AWS ParallelCluster los procesos mantienen las particiones en eseINACTIVE
estado.$
pcluster update-compute-fleet --cluster-name
testSlurm
\ --regioneu-west-1
--status STOP_REQUESTED -
Inicio de la flota de computación: cuando se ejecuta el siguiente comando, todas las particiones pasan inicialmente al estado
UP
. Sin embargo, AWS ParallelCluster los procesos no mantienen la partición en unUP
estado. Debe cambiar los estados de las particiones manualmente. Todos los nodos estáticos están disponibles al cabo de unos minutos. Tenga en cuenta que establecer una partición enUP
no activa ninguna capacidad dinámica.$
pcluster update-compute-fleet --cluster-name
testSlurm
\ --regioneu-west-1
--status START_REQUESTED
Cuando se ejecuta update-compute-fleet
, puede consultar el estado del clúster ejecutando el comando pcluster describe-compute-fleet
y comprobando el Status
. A continuación, se indican los estados posibles:
-
STOP_REQUESTED
: la solicitud de detener la flota de computación se envía al clúster. -
STOPPING
: el proceso depcluster
detiene actualmente la flota de computación. -
STOPPED
: el proceso depcluster
ha finalizado el proceso de detención, todas las particiones están en estadoINACTIVE
y todas las instancias de procesamiento han finalizado. -
START_REQUESTED
: la solicitud de iniciar la flota de computación se envía al clúster. -
STARTING
: el proceso depcluster
está iniciando actualmente el clúster. -
RUNNING
: el proceso depcluster
ha finalizado el proceso de inicio, todas las particiones están en estadoUP
y los nodos estáticos están disponibles después de unos minutos. -
PROTECTED
: este estado indica que algunas particiones tienen errores de arranque constantes. Las particiones afectadas están inactivas. Investigue el problema y, a continuación, ejecutaupdate-compute-fleet
para volver a activar la flota.
Control manual de las colas
En algunos casos, es posible que desee tener algún control manual sobre los nodos o la cola (conocida como partición) en Slurm) en un clúster. Puede administrar los nodos de un clúster mediante los siguientes procedimientos comunes usando el comando scontrol
.
-
Encienda los nodos dinámicos en estado
POWER_SAVING
Ejecute el comando como usuario raíz de
su
:$
scontrol update nodename=
nodename
state=power_upTambién puede enviar un
sleep 1
trabajo provisional solicitando un número determinado de nodos y, a continuación, confiar en Slurm para activar la cantidad requerida de nodos. -
Apague los nodos dinámicos antes de ScaledownIdletime
Se recomienda establecer los nodos dinámicos en
DOWN
como usuario raíz desu
con el comando:$
scontrol update nodename=
nodename
state=down reason="manually draining"AWS ParallelCluster termina y restablece automáticamente los nodos dinámicos caídos.
En general, no es recomendable establecer nodos en
POWER_DOWN
directamente con el comandoscontrol update nodename=
. Esto se debe a que AWS ParallelCluster administra automáticamente el proceso de apagado.nodename
state=power_down -
Deshabilite una cola (partición) o detenga todos los nodos estáticos de una partición específica
Establezca una cola específica en
INACTIVE
como usuario raíz desu
con el comando:$
scontrol update partition=
queuename
state=inactiveDe este modo, se finalizan todas las instancias que respaldan a los nodos de la partición.
-
Habilite una cola (partición)
Establezca una cola específica en
UP
como usuario raíz desu
con el comando:$
scontrol update partition=
queuename
state=up
Comportamiento y ajustes del escalado
A continuación, se muestra un ejemplo del flujo de trabajo del escalado normal:
-
El programador recibe un trabajo que requiere dos nodos.
-
El programador pasa dos nodos a un estado
POWER_UP
y llama aResumeProgram
con los nombres de los nodos (por ejemploqueue1-dy-spotcompute1-[1-2]
). -
ResumeProgram
lanza dos EC2 instancias de Amazon y asigna las direcciones IP privadas y los nombres de host dequeue1-dy-spotcompute1-[1-2]
, esperandoResumeTimeout
(el período predeterminado es de 30 minutos) antes de restablecer los nodos. -
Las instancias se configuran y se unen al clúster. Un trabajo comienza a ejecutarse en las instancias.
-
El trabajo finaliza y deja de ejecutarse.
-
Una vez transcurrido el
SuspendTime
configurado (que está establecido en ScaledownIdletime), el programador establece las instancias en el estadoPOWER_SAVING
. A continuación, el programador establecequeue1-dy-spotcompute1-[1-2]
en el estadoPOWER_DOWN
y llama aSuspendProgram
con los nombres de los nodos. -
Se llama a
SuspendProgram
para dos nodos. Los nodos permanecen en el estadoPOWER_DOWN
, por ejemplo, permaneciendoidle%
durante unSuspendTimeout
(el periodo predeterminado es de 120 segundos, es decir, 2 minutos). Cuandoclustermgtd
detecta que los nodos se están apagando, finaliza las instancias de respaldo. Luego, pasaqueue1-dy-spotcompute1-[1-2]
al estado inactivo y restablece la dirección IP privada y el nombre de host para que estén listos para funcionar en futuros trabajos.
Si algo sale mal y no se puede lanzar una instancia para un nodo concreto por algún motivo, ocurre lo siguiente:
-
El programador recibe un trabajo que requiere dos nodos.
-
El programador pasa dos nodos de ampliación en la nube al estado
POWER_UP
y llama aResumeProgram
con los nombres de los nodos (por ejemploqueue1-dy-spotcompute1-[1-2]
). -
ResumeProgram
lanza solo una (1) EC2 instancia de Amazon y configuraqueue1-dy-spotcompute1-1
, con una (1) instanciaqueue1-dy-spotcompute1-2
, al no poder lanzarse. -
queue1-dy-spotcompute1-1
no se ve afectado y entra en funcionamiento después de llegar al estadoPOWER_UP
. -
queue1-dy-spotcompute1-2
pasa alPOWER_DOWN
estado y el trabajo se vuelve a poner en cola automáticamente porque Slurm detecta un fallo en el nodo. -
queue1-dy-spotcompute1-2
pasa a estar disponible después deSuspendTimeout
(el valor predeterminado es 120 segundos, es decir, 2 minutos). Mientras tanto, el trabajo se vuelve a poner en cola y puede empezar a ejecutarse en otro nodo. -
El proceso anterior se repite hasta que el trabajo se pueda ejecutar en un nodo disponible sin que se produzca ningún error.
Hay dos parámetros de temporización que se pueden ajustar si es necesario:
-
ResumeTimeout
(el valor predeterminado es 30 minutos):ResumeTimeout
controla la hora Slurm espera antes de pasar el nodo al estado inactivo.-
Podría ser útil ampliar el
ResumeTimeout
si el proceso previo o posterior a la instalación tiene una duración similar. -
ResumeTimeout
también es el tiempo máximo que AWS ParallelCluster espera antes de reemplazar o restablecer un nodo en caso de que haya algún problema. Los nodos de cómputo se autofinalizan si se produce algún error durante el inicio o la configuración. AWS ParallelCluster los procesos sustituyen a un nodo al detectar una instancia finalizada.
-
-
SuspendTimeout
(el valor predeterminado es 120 segundos, es decir, 2 minutos):SuspendTimeout
controla la rapidez con la que los nodos se vuelven a colocar en el sistema y están listos para volver a usarse.-
Un valor más corto
SuspendTimeout
significa que los nodos se restablecen más rápidamente, y Slurm puede intentar lanzar instancias con más frecuencia. -
Un valor más alto de
SuspendTimeout
significa que los nodos que han fallado se restablecen más lento. Mientras tanto, Slurm intenta usar otros nodos. SiSuspendTimeout
son más de unos pocos minutos, Slurm intenta recorrer todos los nodos del sistema. Un tiempo más prolongadoSuspendTimeout
podría ser beneficioso para los sistemas a gran escala (más de 1000 nodos) para reducir el stress en Slurm cuando intenta volver a poner en cola con frecuencia los trabajos que no funcionan. -
Tenga en cuenta que
SuspendTimeout
esto no se refiere al tiempo de AWS ParallelCluster espera para finalizar una instancia de respaldo para un nodo. Las instancias de respaldo de los nodosPOWER_DOWN
finalizan inmediatamente. El proceso de finalización por lo general se completa en unos minutos. Sin embargo, durante este tiempo, el nodo permanece en el estadoPOWER_DOWN
y no está disponible para que lo utilice el programador.
-
Registros para la arquitectura
La siguiente lista contiene los registros clave. El nombre del flujo de registro utilizado con Amazon CloudWatch Logs tiene el formato
siguiente: {hostname}
.{instance_id}
.{logIdentifier}
logIdentifier
sigue los nombres de los 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 frecuentes y cómo depurarlos:
Nodos que no se iniciaron o encendieron o que no se unieron al clúster
-
Nodos dinámicos:
-
Compruebe el registro
ResumeProgram
para ver si se ha llamado aResumeProgram
con el nodo. Si no es así, compruebe elslurmctld
registro para determinar si Slurm intentó llamarResumeProgram
con el nodo. Tenga en cuenta que los permisos incorrectos activados enResumeProgram
pueden provocar un error silencioso. -
Si se llama a
ResumeProgram
, compruebe si se ha lanzado una instancia para el nodo. Si la instancia no se ha lanzado, debería mostrarse un mensaje de error claro que explique por qué no se ha podido lanzar la instancia. -
Si se ha lanzado una instancia, es posible que se haya producido algún problema durante el proceso de arranque. Busque la dirección IP privada y el ID de instancia correspondientes en el
ResumeProgram
registro y consulte los registros de arranque correspondientes a la instancia específica en CloudWatch los registros.
-
-
Nodos estáticos:
-
Compruebe el registro
clustermgtd
para ver si se han lanzado instancias para el nodo. Si no se han lanzado instancias, deberían mostrarse mensajes de error claros que expliquen por qué no se han podido lanzar las instancias. -
Si se ha lanzado una instancia, se ha producido algún problema en el proceso de arranque. Busca la IP privada y el ID de instancia correspondientes en el
clustermgtd
registro y busca los registros de arranque correspondientes a la instancia específica en CloudWatch Logs.
-
Los nodos se han sustituido o finalizado de forma inesperada y han fallado
-
Nodos sustituidos o finalizados de forma inesperada:
-
En la mayoría de los casos,
clustermgtd
administra todas las acciones de mantenimiento de los nodos. Para comprobar siclustermgtd
ha sustituido o finalizado un nodo, compruebe el registroclustermgtd
. -
Si
clustermgtd
sustituye o finaliza el nodo, debería mostrarse un mensaje que indique el motivo de la acción. Si el motivo está relacionado con el programador (por ejemplo, el nodo estabaDOWN
), consulte el registroslurmctld
para obtener más información. Si el motivo está EC2 relacionado con Amazon, utiliza herramientas como Amazon CloudWatch o la EC2 consola de Amazon, o bien CLISDKs, para comprobar el estado o los registros de esa instancia. Por ejemplo, puedes comprobar si la instancia tenía eventos programados o no pasó las comprobaciones de EC2 estado de Amazon. -
Si
clustermgtd
no ha cerrado el nodo, compruebe sicomputemgtd
ha terminado el nodo o si EC2 ha terminado la instancia para recuperar una instancia puntual.
-
-
Fallos de nodo:
-
En la mayoría de los casos, los trabajos se vuelven a poner en cola automáticamente si se produce un error en un nodo. Consulte el registro
slurmctld
para ver por qué ha fallado un trabajo o un nodo y evalúe la situación a partir de ahí.
-
Fallo al sustituir o finalizar instancias, error al apagar los nodos
-
En general,
clustermgtd
administra todas las acciones de finalización de instancias esperadas. Consulte el registroclustermgtd
para ver por qué no se ha podido sustituir o finalizar un nodo. -
En el caso de los nodos dinámicos que no superan el ScaledownIdletime, consulte el registro de
SuspendProgram
para ver si los procesos deslurmctld
realizaron llamadas con el nodo específico como argumento. Tenga en cuenta queSuspendProgram
no realiza ninguna acción específica. Más bien, solo se encarga de registrar cuando se le llama. La finalización y elNodeAddr
restablecimiento de todas las instancias se completan antes de.clustermgtd
Slurm hace la transición de los nodos a losIDLE
siguientes.SuspendTimeout
Otros problemas:
-
AWS ParallelCluster no toma decisiones de asignación de puestos o escalamiento. Solo intenta lanzar, finalizar y mantener los recursos de acuerdo con Slurmsus instrucciones.
Si tiene problemas relacionados con la asignación de trabajos, la asignación de nodos y la decisión de escalado, consulte el registro
slurmctld
para ver si hay errores.