J'ai quelques milliers de tâches à exécuter sur un cluster Slurm avec 16 nœuds. Ces tâches ne doivent être exécutées que sur un sous-ensemble de nœuds de taille 7. Certaines tâches sont parallélisées. Par conséquent, vous utilisez toute la puissance CPU d'un seul nœud, tandis que d'autres sont à thread unique. Par conséquent, plusieurs travaux doivent être exécutés simultanément sur un même noeud. Aucune des tâches ne doit apparaître sur plusieurs nœuds.
Actuellement, je soumets chacun des emplois avec:
sbatch --nodelist=myCluster[10-16] myScript.sh
Cependant, ce paramètre oblige slurm à attendre que le travail soumis se termine et laisse donc 3 nœuds complètement inutilisés et, en fonction de la tâche (multi-thread ou mono-threaded), le nœud actuellement actif peut également être soumis à une charge faible en termes de capacité du processeur. .
Quels sont les meilleurs paramètres de sbatch
qui obligent slurm à exécuter plusieurs travaux simultanément sur les nœuds spécifiés?
Vous pouvez travailler dans l'autre sens. Plutôt que de spécifier les noeuds à utiliser, avec pour effet que chaque travail est alloué aux 7 noeuds, spécifiez les noeuds à ne pas utiliser:
sbatch --exclude=myCluster[01-09] myScript.sh
et Slurm n'allouera jamais plus de 7 nœuds à vos tâches. Assurez-vous cependant que la configuration du cluster autorise le partage de nœud et que votre myScript.sh
contient #SBATCH --ntasks=1 --cpu-per-task=n
avec n
le nombre de threads de chaque travail.
Certaines des tâches sont parallélisées. Par conséquent, utilisez toute la puissance du processeur d'un seul nœud, tandis que d'autres sont à thread unique.
Je comprends que vous souhaitiez que les tâches à un seul thread partagent un nœud, alors que les tâches parallèles devraient se voir attribuer un nœud entier exclusivement?
plusieurs travaux doivent être exécutés simultanément sur un seul nœud.
Pour ce qui est de ma compréhension de SLURM, cela implique que vous devez définir les cœurs de processeur en tant que ressources consommables (c'est-à-dire, SelectType=select/cons_res
et SelectTypeParameters=CR_Core
dans slurm.conf
).
Ensuite, pour contraindre les travaux parallèles à obtenir un nœud entier, vous pouvez utiliser --exclusive
option (mais notez que la configuration de la partition est prioritaire: vous ne pouvez pas avoir de nœuds partagés si la partition est configurée pour un accès exclusif), ou utilisez -N 1 --tasks-per-node="number_of_cores_in_a_node"
(par exemple, -N 1 --ntasks-per-node=8
).
Notez que ce dernier ne fonctionnera que si tous les nœuds ont le même nombre de cœurs.
Aucune des tâches ne doit apparaître sur plusieurs nœuds.
Ceci devrait être garanti par -N 1
.
En fait, je pense que la meilleure chose à faire est de commencer par configurer un ' reservation '. Selon cette présentation http://slurm.schedmd.com/slurm_ug_2011/Advanced_Usage_Tutorial.pdf (dernière diapositive).
Scénario: réservez dix nœuds dans la partition SLURM par défaut à partir de midi et d'une durée de 60 minutes par jour. La réservation ne sera disponible que pour les utilisateurs alan et brenda.} _
scontrol create reservation user=alan,brenda starttime=noon duration=60 flags=daily nodecnt=10
Reservation created: alan_6
scontrol show res
ReservationName=alan_6 StartTime=2009-02-05T12:00:00
EndTime=2009-02-05T13:00:00 Duration=60 Nodes=Sun[000-003,007,010-013,017] NodeCnt=10 Features=(null) PartitionName=pdebug Flags=DAILY Licenses=(null)
Users=alan,brenda Accounts=(null)
# submit job with:
sbatch --reservation=alan_6 myScript.sh
Malheureusement, je n'ai pas pu tester cette procédure, probablement à cause d'un manque de privilèges.