Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Slurm guide pour le mode file d'attente multiple
Vous pouvez y apprendre comment Slurm gérer AWS ParallelCluster les nœuds de file d'attente (partition) et comment surveiller l'état de la file d'attente et des nœuds.
Vue d’ensemble
L'architecture de dimensionnement est basée sur le Slurm Cloud Scheduling Guide
Cycle de vie des nœuds cloud
Tout au long de leur cycle de vie, les nœuds cloud entrent dans plusieurs des états suivantsPOWER_SAVING, POWER_UP sinon tous :, ALLOCATED (alloc), () et POWER_DOWN (pow_dn). pow_up Dans certains cas, un nœud cloud peut entrer dans OFFLINE cet état. La liste suivante détaille plusieurs aspects de ces états dans le cycle de vie des nœuds cloud.
-
Un nœud dans un
POWER_SAVINGétat apparaît avec un~suffixe (par exempleidle~) danssinfo. Dans cet état, aucune instance EC2 ne sauvegarde le nœud. Cependant, il est toujours Slurm possible d'attribuer des tâches au nœud. -
Un nœud en transition vers un
POWER_UPétat apparaît avec un#suffixe (par exempleidle#) dans.sinfoUn nœud passe automatiquement à unPOWER_UPétat lorsqu'il Slurm attribue une tâche à un nœud dans unPOWER_SAVINGétat.Vous pouvez également faire passer les nœuds à l'
POWER_UPétat manuellement en tant qu'utilisateursuroot à l'aide de la commande :$scontrol update nodename=nodenamestate=power_upÀ ce stade, le
ResumeProgramest invoqué, les instances EC2 sont lancées et configurées, et le nœud passe àPOWER_UPcet état. -
Un nœud actuellement disponible apparaît sans suffixe (par exemple
idle) danssinfo. Une fois que le nœud est configuré et a rejoint le cluster, il devient disponible pour exécuter des tâches. À ce stade, le nœud est correctement configuré et prêt à être utilisé.En règle générale, nous recommandons que le nombre d'instances Amazon EC2 soit le même que le nombre de nœuds disponibles. Dans la plupart des cas, les nœuds statiques sont disponibles après la création du cluster.
-
Un nœud en transition vers un
POWER_DOWNétat apparaît avec un%suffixe (par exempleidle%) dans.sinfoLes nœuds dynamiques entrent automatiquement dans l'POWER_DOWNétat suivant ScaledownIdletime. En revanche, dans la plupart des cas, les nœuds statiques ne sont pas hors tension. Cependant, vous pouvez placer les nœuds dansPOWER_DOWNcet état manuellement en tant qu'utilisateursuroot à l'aide de la commande :$scontrol update nodename=nodenamestate=down reason="manual draining"Dans cet état, les instances associées à un nœud sont interrompues et le nœud est remis dans
POWER_SAVINGcet état et peut être utilisé ultérieurement ScaledownIdletime.Le ScaledownIdletime réglage est enregistré dans le
SuspendTimeoutparamètre Slurm de configuration. -
Un nœud hors ligne apparaît avec un
*suffixe (par exempledown*) danssinfo. Un nœud est mis hors ligne si le Slurm contrôleur ne peut pas le contacter ou si les nœuds statiques sont désactivés et que les instances de sauvegarde sont fermées.
Examinez les états des nœuds illustrés dans l'sinfoexemple suivant.
$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]
Les efa-st-efacompute1-1 nœuds spot-st-spotcompute2-[1-2] et ont déjà des instances de sauvegarde configurées et peuvent être utilisées. Les ondemand-dy-ondemandcompute1-[1-2] nœuds sont en POWER_UP état et devraient être disponibles d'ici quelques minutes. Le gpu-dy-gpucompute1-1 nœud est dans POWER_DOWN cet état et passe à l'POWER_SAVINGétat par la suite ScaledownIdletime (la valeur par défaut est de 10 minutes).
Tous les autres nœuds sont en POWER_SAVING état et aucune instance EC2 ne les soutient.
Utilisation d'un nœud disponible
Un nœud disponible est soutenu par une instance Amazon EC2. Par défaut, le nom du nœud peut être utilisé pour accéder directement à l'instance par SSH (par exemplessh
efa-st-efacompute1-1). L'adresse IP privée de l'instance peut être récupérée à l'aide de la commande :
$scontrol show nodesnodename
Vérifiez l'adresse IP dans le NodeAddr champ renvoyé.
Pour les nœuds qui ne sont pas disponibles, le NodeAddr champ ne doit pas pointer vers une instance Amazon EC2 en cours d'exécution. Il doit plutôt être identique au nom du nœud.
État des tâches et soumission
Dans la plupart des cas, les tâches soumises sont immédiatement attribuées aux nœuds du système, ou mises en attente si tous les nœuds sont alloués.
Si les nœuds alloués à une tâche incluent des nœuds dans un POWER_SAVING état, la tâche commence par un CF CONFIGURING état ou. À ce stade, la tâche attend que les nœuds de l'POWER_SAVINGétat passent à l'POWER_UPétat et deviennent disponibles.
Une fois que tous les nœuds alloués à une tâche sont disponibles, la tâche passe à l'état RUNNING (R).
Par défaut, toutes les tâches sont soumises à la file d'attente par défaut (appelée partition dansSlurm). Cela est indiqué par un * suffixe après le nom de la file d'attente. Vous pouvez sélectionner une file d'attente à l'aide de l'option de soumission des -p tâches.
Tous les nœuds sont configurés avec les fonctionnalités suivantes, qui peuvent être utilisées dans les commandes de soumission de tâches :
-
Un type d'instance (par exemple
c5.xlarge) -
Un type de nœud (il s'agit de l'un
dynamicou de l'autrestatic.)
Vous pouvez voir les fonctionnalités d'un nœud en particulier à l'aide de la commande :
$scontrol show nodesnodename
Dans le retour, consultez la AvailableFeatures liste.
Examinez l'état initial du cluster, que vous pouvez visualiser en exécutant la sinfo commande.
$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]
Notez qu'il s'spotagit de la file d'attente par défaut. Il est indiqué par le * suffixe.
Soumettez une tâche à un nœud statique de la file d'attente par défaut (spot).
$sbatch --wrap"sleep 300"-N1-Cstatic
Soumettez une tâche à un nœud dynamique de la EFA file d'attente.
$sbatch --wrap"sleep 300"-pefa-Cdynamic
Soumettez une tâche à huit (8) c5.2xlarge nœuds et à deux (2) t2.xlarge nœuds de la ondemand file d'attente.
$sbatch --wrap"sleep 300"-pondemand-N10-C "[c5.2xlarge*8&t2.xlarge*2]"
Soumettez une tâche à l'un des nœuds GPU de la gpu file d'attente.
$sbatch --wrap"sleep 300"-pgpu-G1
Examinez l'état des tâches à l'aide de la squeue commande.
$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
Les jobs 7 et 8 (dans les spot efa files d'attente) sont déjà en cours d'exécution (R). Les jobs 12 et 13 sont toujours en train de configurer (CF), probablement en attente de la disponibilité des instances.
# 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
État et caractéristiques du nœud
Dans la plupart des cas, les états des nœuds sont entièrement gérés AWS ParallelCluster conformément aux processus spécifiques du cycle de vie des nœuds cloud décrits plus haut dans cette rubrique.
Toutefois, remplace ou met AWS ParallelCluster également fin aux nœuds défectueux dans DOWN et DRAINED aux états et aux nœuds dont les instances de sauvegarde ne sont pas saines. Pour de plus amples informations, veuillez consulter clustermgtd.
États de partition
AWS ParallelCluster prend en charge les états de partition suivants. Une Slurm partition est une file d'attente AWS ParallelCluster.
-
UP: indique que la partition est dans un état actif. Il s'agit de l'état par défaut d'une partition. Dans cet état, tous les nœuds de la partition sont actifs et peuvent être utilisés. -
INACTIVE: indique que la partition est inactive. Dans cet état, toutes les instances qui sauvegardent les nœuds d'une partition inactive sont fermées. Aucune nouvelle instance n'est lancée pour les nœuds d'une partition inactive.
parc informatique de mise à jour de pcluster
-
Arrêt du parc informatique - Lorsque la commande suivante est exécutée, toutes les partitions passent à l'
INACTIVEétat et AWS ParallelCluster les processus les conservent dansINACTIVEcet état.$pcluster update-compute-fleet --cluster-nametestSlurm\ --regioneu-west-1--status STOP_REQUESTED -
Démarrage du parc informatique - Lorsque la commande suivante est exécutée, toutes les partitions passent initialement à l'
UPétat en question. Cependant, AWS ParallelCluster les processus ne permettent pas de conserver la partition dans unUPétat. Vous devez modifier l'état des partitions manuellement. Tous les nœuds statiques deviennent disponibles au bout de quelques minutes. Notez que la définition d'une partition surUPn'active aucune capacité dynamique.$pcluster update-compute-fleet --cluster-nametestSlurm\ --regioneu-west-1--status START_REQUESTED
Quand update-compute-fleet est exécuté, vous pouvez vérifier l'état du cluster en exécutant la pcluster describe-compute-fleet commande et en cochant la caseStatus. La liste suivante répertorie les états possibles :
-
STOP_REQUESTED: La demande d'arrêt de la flotte de calcul est envoyée au cluster. -
STOPPING: Lepclusterprocessus arrête actuellement le parc informatique. -
STOPPED: lepclusterprocessus a terminé le processus d'arrêt, toutes les partitions sont enINACTIVEétat et toutes les instances de calcul sont terminées. -
START_REQUESTED: La demande de démarrage de la flotte de calcul est envoyée au cluster. -
STARTING: lepclusterprocessus est en train de démarrer le cluster. -
RUNNING: lepclusterprocessus a terminé le processus de démarrage, toutes les partitions sont enUPétat et les nœuds statiques sont disponibles au bout de quelques minutes. -
PROTECTED: Ce statut indique que certaines partitions présentent des échecs d'amorçage constants. Les partitions concernées sont inactives. Examinez le problème, puis courezupdate-compute-fleetpour réactiver la flotte.
Contrôle manuel des files d'attente
Dans certains cas, vous souhaiterez peut-être contrôler manuellement les nœuds ou la file d'attente (appelée partition dansSlurm) d'un cluster. Vous pouvez gérer les nœuds d'un cluster via les procédures courantes suivantes à l'aide de la scontrol commande.
-
Mettez sous tension les nœuds dynamiques en
POWER_SAVINGétatExécutez la commande en tant qu'utilisateur
suroot :$scontrol update nodename=nodenamestate=power_upVous pouvez également soumettre une
sleep 1tâche fictive demandant un certain nombre de nœuds, puis compter sur celle-ci Slurm pour alimenter le nombre de nœuds requis. -
Mettez les nœuds dynamiques hors tension avant ScaledownIdletime
Nous vous recommandons de définir les nœuds dynamiques en
DOWNtant qu'utilisateursuroot à l'aide de la commande suivante :$scontrol update nodename=nodenamestate=down reason="manually draining"AWS ParallelCluster arrête et réinitialise automatiquement les nœuds dynamiques mis hors service.
En général, nous vous déconseillons de configurer les nœuds
POWER_DOWNdirectement à l'aide de lascontrol update nodename=commande. En effet, le processus de mise hors tension est géré AWS ParallelCluster automatiquement.nodenamestate=power_down -
Désactiver une file d'attente (partition) ou arrêter tous les nœuds statiques d'une partition spécifique
Définissez une file d'attente spécifique
INACTIVEen tant qu'utilisateursuroot avec la commande :$scontrol update partition=queuenamestate=inactiveCette opération met fin à toutes les instances qui soutiennent les nœuds de la partition.
-
Activer une file d'attente (partition)
Définissez une file d'attente spécifique pour
UPun utilisateursuroot à l'aide de la commande :$scontrol update partition=queuenamestate=up
Comportement de dimensionnement et ajustements
Voici un exemple du flux de travail de dimensionnement normal :
-
Le planificateur reçoit une tâche qui nécessite deux nœuds.
-
Le planificateur fait passer deux nœuds à un
POWER_UPétat et appelleResumeProgramavec les noms des nœuds (par exemplequeue1-dy-spotcompute1-[1-2]). -
ResumeProgramlance deux instances Amazon EC2 et attribue les adresses IP privées et les noms d'hôtes dequeue1-dy-spotcompute1-[1-2], en attendantResumeTimeout(la période par défaut est de 30 minutes) avant de réinitialiser les nœuds. -
Les instances sont configurées et rejoignent le cluster. Une tâche commence à s'exécuter sur des instances.
-
La tâche se termine et s'arrête de fonctionner.
-
Une fois la configuration
SuspendTimeécoulée (qui est définie sur ScaledownIdletime), le planificateur définit les instances sur cet état.POWER_SAVINGLe planificateur passe ensuitequeue1-dy-spotcompute1-[1-2]à l'POWER_DOWNétat et appelleSuspendProgramavec les noms des nœuds. -
SuspendProgramest appelé pour deux nœuds. Les nœuds restent dansPOWER_DOWNcet état, par exempleidle%pendant unSuspendTimeout(la période par défaut est de 120 secondes (2 minutes)). Après avoirclustermgtddétecté que les nœuds sont hors tension, il met fin aux instances de sauvegarde. Ensuite, il passequeue1-dy-spotcompute1-[1-2]à l'état inactif et réinitialise l'adresse IP privée et le nom d'hôte afin qu'il soit prêt à fonctionner pour les tâches futures.
Si les choses tournent mal et qu'une instance pour un nœud particulier ne peut pas être lancée pour une raison quelconque, voici ce qui se produit :
-
Le planificateur reçoit une tâche qui nécessite deux nœuds.
-
Le planificateur fait passer deux nœuds cloud bursting à l'
POWER_UPétat et appelleResumeProgramavec les noms des nœuds (par exemple).queue1-dy-spotcompute1-[1-2] -
ResumeProgramlance une (1) seule instance Amazon EC2 et configurequeue1-dy-spotcompute1-1, une (1) instance ne parvenant pas à démarrer.queue1-dy-spotcompute1-2 -
queue1-dy-spotcompute1-1n'est pas concerné et se met en ligne après avoir atteint l'POWER_UPÉtat. -
queue1-dy-spotcompute1-2passe à l'POWER_DOWNétat et la tâche est automatiquement mise en file d'attente car elle Slurm détecte une défaillance d'un nœud. -
queue1-dy-spotcompute1-2devient disponible aprèsSuspendTimeout(la valeur par défaut est de 120 secondes (2 minutes)). Entre-temps, la tâche est mise en file d'attente et peut commencer à s'exécuter sur un autre nœud. -
Le processus ci-dessus se répète jusqu'à ce que la tâche puisse être exécutée sur un nœud disponible sans échec.
Deux paramètres de synchronisation peuvent être ajustés si nécessaire :
-
ResumeTimeout(la valeur par défaut est de 30 minutes) :ResumeTimeoutcontrôle le temps d'Slurmattente avant de faire passer le nœud à l'état inactif.-
Il peut être utile de prolonger
ResumeTimeoutsi votre processus pre/post d'installation prend presque autant de temps. -
ResumeTimeoutest également le temps d' AWS ParallelCluster attente maximum avant de remplacer ou de réinitialiser un nœud en cas de problème. Les nœuds de calcul s'arrêtent automatiquement en cas d'erreur lors du lancement ou de la configuration. AWS ParallelCluster les processus remplacent un nœud lors de la détection d'une instance terminée.
-
-
SuspendTimeout(la valeur par défaut est de 120 secondes (2 minutes)) :SuspendTimeoutcontrôle la rapidité avec laquelle les nœuds sont replacés dans le système et prêts à être réutilisés.-
Une valeur plus courte
SuspendTimeoutsignifie que les nœuds sont réinitialisés plus rapidement et Slurm peuvent essayer de lancer des instances plus fréquemment. -
Une valeur plus longue
SuspendTimeoutsignifie que les nœuds défaillants sont réinitialisés plus lentement. En attendant, Slurm essaie d'utiliser d'autres nœuds. Si celaSuspendTimeoutprend plus de quelques minutes, Slurm essaie de parcourir tous les nœuds du système. Une durée plus longueSuspendTimeoutpeut être bénéfique pour les systèmes à grande échelle (plus de 1 000 nœuds) afin de réduire le stress Slurm lorsqu'ils essaient fréquemment de remettre en file d'attente les tâches défaillantes. -
Notez que
SuspendTimeoutcela ne fait pas référence au temps d' AWS ParallelCluster attente pour mettre fin à une instance de sauvegarde pour un nœud. Les instances de sauvegarde pourPOWER_DOWNles nœuds sont immédiatement interrompues. Le processus de terminaison est généralement terminé en quelques minutes. Cependant, pendant ce temps, le nœud reste dans cetPOWER_DOWNétat et n'est pas disponible pour l'utilisation du planificateur.
-
Journaux pour l'architecture
La liste suivante contient les journaux de clés. Le nom du flux de CloudWatch journaux utilisé avec Amazon Logs est au format {hostname}.{instance_id}.{logIdentifier}logIdentifier suivant les noms des journaux.
-
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)
Problèmes courants et procédure de débogage :
Nœuds qui n'ont pas pu démarrer, démarrer ou rejoindre le cluster
-
Nœuds dynamiques :
-
Consultez le
ResumeProgramjournal pour voir s'ilResumePrograma été appelé avec le nœud. Si ce n'est pas le cas, consultez leslurmctldjournal pour déterminer si vous avez Slurm essayé d'appelerResumeProgramavec le nœud. Notez que des autorisations incorrectesResumeProgrampeuvent entraîner un échec silencieux. -
S'
ResumeProgramil est appelé, vérifiez si une instance a été lancée pour le nœud. Si l'instance ne s'est pas lancée, un message d'erreur clair devrait s'afficher pour expliquer pourquoi elle n'a pas pu être lancée. -
Si une instance a été lancée, il se peut qu'un problème soit survenu pendant le processus d'initialisation. Recherchez l'adresse IP privée et l'ID d'instance correspondants dans le
ResumeProgramjournal et consultez les journaux d'amorçage correspondants pour l'instance spécifique dans CloudWatch Logs.
-
-
Nœuds statiques :
-
Consultez le
clustermgtdjournal pour voir si des instances ont été lancées pour le nœud. Si les instances ne se sont pas lancées, des erreurs claires devraient indiquer pourquoi elles n'ont pas pu être lancées. -
Si une instance a été lancée, il y a un problème avec le processus d'amorçage. Recherchez l'adresse IP privée et l'ID d'instance correspondants dans le
clustermgtdjournal et consultez les journaux d'amorçage correspondants pour l'instance spécifique dans CloudWatch Logs.
-
Nœuds remplacés ou interrompus de façon inattendue et défaillances de nœuds
-
Nœuds replaced/terminated inattendus :
-
Dans la plupart des cas,
clustermgtdgère toutes les actions de maintenance des nœuds. Pour vérifier si un nœud a étéclustermgtdremplacé ou résilié, consultez leclustermgtdjournal. -
En cas de
clustermgtdremplacement ou de fermeture du nœud, un message devrait indiquer la raison de l'action. Si la raison est liée au planificateur (par exemple, le nœud l'étaitDOWN), consultez leslurmctldjournal pour plus de détails. Si la raison est liée à Amazon EC2, utilisez des outils tels qu'Amazon CloudWatch ou la console Amazon EC2, l'interface de ligne de commande ou les kits SDK pour vérifier l'état ou les journaux de cette instance. Par exemple, vous pouvez vérifier si l'instance avait des événements planifiés ou si les contrôles de l'état de santé d'Amazon EC2 ont échoué. -
Si vous
clustermgtdn'avez pas mis fin au nœud, vérifiez s'ilcomputemgtda mis fin au nœud ou si EC2 a mis fin à l'instance pour récupérer une instance Spot.
-
-
Défaillances de nœuds :
-
Dans la plupart des cas, les tâches sont automatiquement mises en file d'attente en cas de défaillance d'un nœud. Consultez le
slurmctldjournal pour savoir pourquoi une tâche ou un nœud a échoué et évaluez la situation à partir de là.
-
Échec lors du remplacement ou de la fermeture d'instances, échec lors de la mise hors tension des nœuds
-
En général,
clustermgtdgère toutes les actions de terminaison d'instance attendues. Consultez leclustermgtdjournal pour savoir pourquoi il n'a pas réussi à remplacer ou à arrêter un nœud. -
En cas de défaillance de nœuds dynamiques ScaledownIdletime, consultez le
SuspendProgramjournal pour voir sislurmctldles processus ont effectué des appels avec le nœud spécifique comme argument. NoteSuspendProgramn'effectue aucune action spécifique. Au contraire, il ne se connecte que lorsqu'il est appelé. Toutes les terminaisons etNodeAddrréinitialisations des instances sont effectuées au plus tard.clustermgtdSlurmfait passer les nœuds à l'IDLEaprèsSuspendTimeout.
Autres problèmes :
-
AWS ParallelCluster ne prend pas de décisions en matière de répartition des tâches ou de dimensionnement. Il essaie uniquement de lancer, de terminer et de gérer les ressources conformément Slurm aux instructions.
Pour les problèmes liés à l'attribution des tâches, à l'allocation des nœuds et à la décision de dimensionnement, consultez le
slurmctldjournal pour détecter les erreurs.