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.
Slurmguide pour le mode de file d'attente multiple
AWS ParallelCluster la version 2.9.0 a introduit le mode de file d'attente multiple et une nouvelle architecture de dimensionnement pour Slurm Workload Manager (Slurm).
Les sections suivantes fournissent un aperçu général de l'utilisation d'un Slurm cluster avec la nouvelle architecture de mise à l'échelle.
Aperçu
La nouvelle architecture de mise à l'échelle est basée sur le guide Slurm de planification dans le cloud
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 voire dans tous les cas :, ALLOCATED (alloc), () et POWER_DOWN (pow_dn). pow_up Dans certains cas, un nœud de 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 de cloud.
-
Un nœud dans un
POWER_SAVINGétat apparaît avec un~suffixe (par exempleidle~) danssinfo. Dans cet état, aucune EC2 instance ne soutient le nœud. Cependant, Slurm vous pouvez toujours allouer des tâches au nœud. -
Un nœud en transition vers un
POWER_UPétat apparaît avec un#suffixe (par exempleidle#) dans.sinfo -
Lorsqu'il Slurm alloue une tâche à un nœud dans un
POWER_SAVINGétat, le nœud est automatiquement transféré vers unPOWER_UPétat. Sinon, les nœuds peuvent être placés dans l'POWER_UPétat manuellement à l'aide de lascontrol update nodename=commande. À ce stade, lenodenamestate=power_upResumeProgramest invoqué, et les EC2 instances sont lancées et configurées pour sauvegarder unPOWER_UPnœud. -
Un nœud actuellement disponible apparaît sans suffixe (par exemple
idle) danssinfo. Une fois le nœud configuré et 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 EC2 soit le même que le nombre de nœuds disponibles. Dans la plupart des cas, les nœuds statiques sont toujours 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 leurPOWER_DOWNétat par la suitescaledown_idletime. En revanche, dans la plupart des cas, les nœuds statiques ne sont pas hors tension. Cependant, les nœuds peuvent être placés dans l'POWER_DOWNétat manuellement à l'aide de lascontrol update nodename=commande. Dans cet état, l'instance associée à un nœud est interrompue et le nœud est remis à sonnodenamestate=powering_downPOWER_SAVINGétat pour une utilisation future par la suitescaledown_idletime. Lescaledown-idletimeparamètre est enregistré dans la Slurm configuration en tant queSuspendTimeoutparamètre. -
Un nœud hors ligne apparaît avec un
*suffixe (par exempledown*) danssinfo. Un nœud se déconnecte si le Slurm contrôleur ne parvient pas à le contacter ou si les nœuds statiques sont désactivés et que les instances de support sont résiliées.
Examinons maintenant les états des nœuds illustrés dans l'sinfoexemple suivant.
$sinfoPARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa up infinite 4 idle~ efa-dy-c5n18xlarge-[1-4] efa up infinite 1 idle efa-st-c5n18xlarge-1 gpu up infinite 1 idle% gpu-dy-g38xlarge-1 gpu up infinite 9 idle~ gpu-dy-g38xlarge-[2-10] ondemand up infinite 2 mix# ondemand-dy-c52xlarge-[1-2] ondemand up infinite 18 idle~ ondemand-dy-c52xlarge-[3-10],ondemand-dy-t2xlarge-[1-10] spot* up infinite 13 idle~ spot-dy-c5xlarge-[1-10],spot-dy-t2large-[1-3] spot* up infinite 2 idle spot-st-t2large-[1-2]
Les efa-st-c5n18xlarge-1 nœuds spot-st-t2large-[1-2] et ont déjà des instances de sauvegarde configurées et peuvent être utilisées. Les ondemand-dy-c52xlarge-[1-2] nœuds sont en POWER_UP bon état et devraient être disponibles dans quelques minutes. Le gpu-dy-g38xlarge-1 nœud est dans l'POWER_DOWNétat, et il passera à POWER_SAVING l'état par la suite scaledown_idletime (120 secondes par défaut).
Tous les autres nœuds sont en POWER_SAVING état et aucune EC2 instance ne les soutient.
Utilisation d'un nœud disponible
Un nœud disponible est soutenu par une EC2 instance. Par défaut, le nom du nœud peut être utilisé pour accéder directement à l'instance en SSH (par exemplessh efa-st-c5n18xlarge-1). L'adresse IP privée de l'instance peut être récupérée à l'aide de la scontrol show nodes commande et en vérifiant le nodenameNodeAddr champ. Pour les nœuds qui ne sont pas disponibles, le NodeAddr champ ne doit pas pointer vers une EC2 instance 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 alloué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 soient 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 (connue sous le nom de partition inSlurm). 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) -
Type de nœud (il s'agit de l'un
dynamicoustaticde l'autre)
Vous pouvez voir toutes les fonctionnalités disponibles pour un nœud en particulier en utilisant la scontrol show nodes
commande et en consultant la nodenameAvailableFeatures liste.
Les emplois constituent un autre facteur à prendre en compte. Examinez d'abord 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-c5n18xlarge-[1-4] efa up infinite 1 idle efa-st-c5n18xlarge-1 gpu up infinite 10 idle~ gpu-dy-g38xlarge-[1-10] ondemand up infinite 20 idle~ ondemand-dy-c52xlarge-[1-10],ondemand-dy-t2xlarge-[1-10] spot* up infinite 13 idle~ spot-dy-c5xlarge-[1-10],spot-dy-t2large-[1-3] spot* up infinite 2 idle spot-st-t2large-[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" -N 1 -C static
Soumettez une tâche à un nœud dynamique de la EFA file d'attente.
$sbatch --wrap "sleep 300" -p efa -C dynamic
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" -p ondemand -N 10 -C "[c5.2xlarge*8&t2.xlarge*2]"
Soumettez une tâche à un nœud GPU de la gpu file d'attente.
$sbatch --wrap "sleep 300" -p gpu -G 1
Examinez maintenant 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-c52xlarge-[1-8],ondemand-dy-t2xlarge-[1-2] 13 gpu wrap ubuntu CF 0:05 1 gpu-dy-g38xlarge-1 7 spot wrap ubuntu R 2:48 1 spot-st-t2large-1 8 efa wrap ubuntu R 0:39 1 efa-dy-c5n18xlarge-1
Les tâches 7 et 8 (dans les efa files d'attente spot et) sont déjà en cours d'exécution (R). Les jobs 12 et 13 sont toujours en cours de configuration (CF), attendant probablement que les instances soient disponibles.
# Nodes states corresponds to state of running jobs$sinfoPARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa up infinite 3 idle~ efa-dy-c5n18xlarge-[2-4] efa up infinite 1 mix efa-dy-c5n18xlarge-1 efa up infinite 1 idle efa-st-c5n18xlarge-1 gpu up infinite 1 mix~ gpu-dy-g38xlarge-1 gpu up infinite 9 idle~ gpu-dy-g38xlarge-[2-10] ondemand up infinite 10 mix# ondemand-dy-c52xlarge-[1-8],ondemand-dy-t2xlarge-[1-2] ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[9-10],ondemand-dy-t2xlarge-[3-10] spot* up infinite 13 idle~ spot-dy-c5xlarge-[1-10],spot-dy-t2large-[1-3] spot* up infinite 1 mix spot-st-t2large-1 spot* up infinite 1 idle spot-st-t2large-2
État et fonctionnalités 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 de cloud décrits plus haut dans cette rubrique.
Toutefois, remplace ou arrête AWS ParallelCluster également les nœuds défectueux dans les DRAINED états DOWN et les nœuds dont les instances de sauvegarde ne fonctionnent pas correctement. 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 dans 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 soutiennent les nœuds d'une partition inactive sont arrêtées. Les nouvelles instances ne sont pas lancées pour les nœuds d'une partition inactive.
démarrage et arrêt de pcluster
Lorsqu'il pcluster stop est exécuté, toutes les partitions sont placées dans l'INACTIVEétat, et les AWS ParallelCluster processus les maintiennent dans INACTIVE cet état.
Lorsqu'il pcluster start est exécuté, toutes les partitions sont initialement placées dans UP cet état. Cependant, AWS ParallelCluster les processus ne maintiennent pas la partition dans un UP état. Vous devez modifier l'état des partitions manuellement. Tous les nœuds statiques sont disponibles au bout de quelques minutes. Notez que le fait de définir une partition sur UP n'augmente aucune capacité dynamique. Si initial_count cette valeur est supérieure àmax_count, elle initial_count peut ne pas être satisfaite lorsque l'état de la partition passe à l'UPétat actuel.
Lorsqu'il est pcluster start pcluster stop en cours d'exécution, vous pouvez vérifier l'état du cluster en exécutant la pcluster status commande et en vérifiant leComputeFleetStatus. La liste suivante répertorie les états possibles :
-
STOP_REQUESTED: La pcluster stop demande est envoyée au cluster. -
STOPPING: lepclusterprocessus arrête actuellement le cluster. -
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 pcluster start demande est envoyée au cluster. -
STARTING: lepclusterprocessus démarre actuellement le cluster -
RUNNING: lepclusterprocessus de démarrage est terminé, toutes les partitions sont enUPétat et les nœuds statiques seront disponibles au bout de quelques minutes.
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 (connue sous le nom de partition dansSlurm) d'un cluster. Vous pouvez gérer les nœuds d'un cluster à l'aide des procédures courantes suivantes.
-
Activez les nœuds dynamiques en
POWER_SAVINGétat : exécutez lascontrol update nodename=commande ou soumettez unenodenamestate=power_upsleep 1tâche fictive demandant un certain nombre de nœuds et comptez sur cette tâche Slurm pour alimenter le nombre de nœuds requis. -
Éteignez les nœuds dynamiques avant scaledown_idletime : définissez les nœuds dynamiques sur à l'
DOWNaide de lascontrol update nodename=commande. AWS ParallelCluster arrête et réinitialise automatiquement les nœuds dynamiques tombés en panne. En général, nous ne recommandons pas de configurer les nœuds pour qu'nodenamestate=downPOWER_DOWNils utilisent directement lascontrol update nodename=commande. Cela est dû au fait que le processus de mise hors tension est AWS ParallelCluster automatiquement géré. Aucune intervention manuelle n'est nécessaire. Par conséquent, nous vous recommandons d'essayer de définir les nœuds surnodenamestate=power_downDOWNchaque fois que cela est possible. -
Désactiver une file d'attente (partition) ou arrêter tous les nœuds statiques d'une partition spécifique : définissez la file d'attente sur
INACTIVEavec lascontrol update partition=commande. Cela met fin à toutes les instances qui soutiennent les nœuds de la partition.queue namestate=inactive -
Activer une file d'attente (partition) : définissez spécifiquement la file d'attente à l'
INACTIVEaide de lascontrol update partition=commande.queue namestate=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-c5xlarge-[1-2]). -
ResumeProgramlance deux EC2 instances et attribue les adresses IP privées et les noms d'hôte dequeue1-dy-c5xlarge-[1-2], en attendantResumeTimeout(la période par défaut est de 60 minutes (1 heure)) avant de réinitialiser les nœuds. -
Les instances sont configurées et rejoignent le cluster. Job commence à s'exécuter sur des instances.
-
Job est terminé.
-
Une fois la configuration
SuspendTimeexpirée (qui est définie surscaledown_idletime), les instances sont mises dans l'POWER_SAVINGétat par le planificateur. Le planificateur placequeue1-dy-c5xlarge-[1-2]dansPOWER_DOWNl'état et appelleSuspendProgramavec les noms des nœuds. -
SuspendProgramest appelé pour deux nœuds. Les nœuds restent dansPOWER_DOWNcet état, par exemple en restantidle%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 passe àqueue1-dy-c5xlarge-[1-2]l'état inactif et réinitialise l'adresse IP privée et le nom d'hôte afin qu'ils puissent être réalimentés pour de futures tâches.
Maintenant, 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 passe.
-
Le planificateur reçoit une tâche qui nécessite deux nœuds.
-
Le planificateur place deux nœuds éclatants dans le cloud en
POWER_UPétat et appelleResumeProgramavec les noms de nœuds (par exemple).queue1-dy-c5xlarge-[1-2] -
ResumeProgramne lance qu'une (1) EC2 instance et la configurequeue1-dy-c5xlarge-1, mais il n'a pas réussi à lancer une instance pourqueue1-dy-c5xlarge-2. -
queue1-dy-c5xlarge-1ne sera pas affecté et sera mis en ligne après avoir atteintPOWER_UPl'état. -
queue1-dy-c5xlarge-2est mis enPOWER_DOWNétat et la tâche est automatiquement mise en attente car elle Slurm détecte une défaillance du nœud. -
queue1-dy-c5xlarge-2devient disponible aprèsSuspendTimeout(la valeur par défaut est de 120 secondes (2 minutes)). Entre-temps, la tâche est mise en attente et peut commencer à s'exécuter sur un autre nœud. -
Le processus ci-dessus est répété jusqu'à ce que la tâche puisse s'exécuter sur un nœud disponible sans qu'une défaillance se produise.
Deux paramètres de chronométrage peuvent être ajustés si nécessaire.
-
ResumeTimeout(la valeur par défaut est de 60 minutes (1 heure)) :ResumeTimeoutcontrôle le temps d'Slurmattente avant de mettre le nœud en état inactif.-
Il peut être utile de l'étendre si votre processus pre/post d'installation prend presque autant de temps.
-
Il s'agit également du temps d' AWS ParallelCluster attente maximal 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. Ensuite, AWS ParallelCluster les processus remplacent également le nœud lorsqu'il constate que l'instance est terminée.
-
-
SuspendTimeout(la valeur par défaut est de 120 secondes (2 minutes)) :SuspendTimeoutcontrôle la rapidité avec laquelle les nœuds sont réinsérés dans le système et prêts à être réutilisés.-
Une valeur plus courte
SuspendTimeoutsignifierait que les nœuds seront réinitialisés plus rapidement et Slurm qu'ils pourront essayer de lancer des instances plus fréquemment. -
Une durée plus
SuspendTimeoutlongue ralentit la réinitialisation des nœuds défaillants. En attendant, essaie Slurm d'utiliser d'autres nœuds. Si celaSuspendTimeoutdure plus de quelques minutes, Slurm essaie de parcourir tous les nœuds du système. Un délai plus longSuspendTimeoutpeut être bénéfique pour les systèmes à grande échelle (plus de 1 000 nœuds) car il permet de réduire le stress en remettant fréquemment Slurm 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 résiliées. Le processus de terminaison est généralement terminé en quelques minutes. Cependant, pendant cette période, le nœud reste hors tension et n'est pas disponible pour une utilisation dans le planificateur.
-
Journaux pour une nouvelle architecture
La liste suivante contient les journaux clés de l'architecture à files d'attente multiples. Le nom du flux de journal utilisé avec Amazon CloudWatch Logs est au format {hostname}.{instance_id}.{logIdentifier}logIdentifier suivant lequel suivent les noms des journaux. Pour de plus amples informations, veuillez consulter Intégration à Amazon CloudWatch Logs.
-
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 réussi à démarrer, à démarrer ou à rejoindre le cluster :
-
Nœuds dynamiques :
-
Consultez le
ResumeProgramjournal pour voir s'ilResumePrograma déjà été appelé avec le nœud. Si ce n'est pas le cas, consultez leslurmctldjournal pour déterminer si vous avez Slurm déjà essayéResumeProgramd'appeler le nœud. Notez que des autorisations incorrectesResumeProgrampeuvent entraîner son échec silencieux. -
S'
ResumeProgramil est appelé, vérifiez si une instance a été lancée pour le nœud. Si l'instance ne peut pas être lancée, un message d'erreur clair devrait s'afficher expliquant pourquoi le lancement de l'instance n'a pas pu être lancé. -
Si une instance a été lancée, il se peut qu'il y ait eu un problème pendant le processus de démarrage. Trouvez l'adresse IP privée et l'ID d'instance correspondants dans le
ResumeProgramjournal et consultez les journaux de démarrage 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. Dans le cas contraire, il devrait y avoir des erreurs claires expliquant pourquoi les instances n'ont pas pu être lancées. -
Si une instance a été lancée, il y a un problème pendant le processus de démarrage. Trouvez l'adresse IP privée et l'ID d'instance correspondants dans le
clustermgtdjournal et consultez les journaux de démarrage correspondants pour l'instance spécifique dans CloudWatch Logs.
-
Nœuds remplacés ou interrompus de façon inattendue, défaillances de nœuds
-
Des nœuds de replaced/terminated façon inattendue
-
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 résiliation du nœud, un message doit apparaître indiquant le motif 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 EC2 liée, utilisez des outils pour vérifier le statut ou les journaux de cette instance. Par exemple, vous pouvez vérifier si l'instance a connu des événements planifiés ou si les vérifications de son état EC2 de santé ont échoué. -
Si le nœud
clustermgtdn'a pas été résilié, vérifiez s'ilcomputemgtda été résilié ou si l'instance EC2 a été résiliée 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 analysez la situation à partir de là.
-
Défaillance lors du remplacement ou de l'arrêt d'instances, défaillance lors de la mise hors tension des nœuds
-
En général,
clustermgtdgère toutes les actions de fermeture d'instance attendues. Consultez leclustermgtdjournal pour savoir pourquoi il n'a pas réussi à remplacer ou à mettre fin à un nœud. -
En cas d'échec d'un nœud dynamiquescaledown_idletime, consultez le
SuspendProgramjournal pour voir si un programmeslurmctldutilise le nœud spécifique comme argument. RemarqueSuspendProgramn'effectue en fait aucune action spécifique. Au contraire, il ne se connecte que lorsqu'il est appelé. La résiliation et laNodeAddrréinitialisation de toutes les instances sont terminées parclustermgtd. Slurmplace les nœuds dansIDLEAfterSuspendTimeout.
Autres problèmes
-
AWS ParallelCluster ne prend pas de décisions relatives à l'attribution des tâches ou à la mise à l'échelle. Il essaie simplement de lancer, de résilier et de maintenir les ressources conformément Slurm aux instructions.
Pour les problèmes liés à l'allocation des tâches, à l'allocation des nœuds et à la décision de dimensionnement, consultez le
slurmctldjournal pour détecter les erreurs.