Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
ReadME du projet de cluster Slurm CycleCloud
Slurm est un gestionnaire de charges de travail open source hautement configurable. Pour plus d’informations, consultez la vue d’ensemble du site du projet Slurm.
Remarque
À compter de CycleCloud 8.4.0, nous réécritons l’intégration de Slurm pour prendre en charge de nouvelles fonctionnalités et fonctionnalités. Pour plus d’informations, consultez la documentation Slurm 3.0 .
Pour activer Slurm sur un cluster CycleCloud, modifiez le « run_list », disponible dans la section configuration de votre définition de cluster. Un cluster Slurm comporte deux parties principales : le nœud maître (ou planificateur), qui exécute le logiciel Slurm sur un système de fichiers partagé et les nœuds exécutés, qui montent ce système de fichiers et exécutent les travaux soumis. Par exemple, un extrait de code de modèle de cluster simple peut ressembler à ceci :
[cluster custom-slurm]
[[node master]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:master]]]
[[[configuration]]]
run_list = role[slurm_master_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A1 # 1 core
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:execute]]]
[[[configuration]]]
run_list = role[slurm_master_role]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = true
slurm.default_partition = true
Pour activer Slurm sur un cluster CycleCloud, modifiez la run_list section de configuration de votre définition de cluster. Un cluster Slurm comporte deux parties principales : le nœud du planificateur, qui fournit un système de fichiers partagé et exécute le logiciel Slurm, ainsi que les nœuds d’exécution, qui montent le système de fichiers partagé et exécutent les travaux soumis. Par exemple, un extrait de modèle de cluster simple peut ressembler à ceci :
[cluster custom-slurm]
[[node scheduler]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:scheduler]]]
[[[configuration]]]
run_list = role[slurm_scheduler_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A1 # 1 core
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:execute]]]
[[[configuration]]]
run_list = role[slurm_scheduler_role]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = true
slurm.default_partition = true
Modification de clusters Slurm existants
Les clusters Slurm s’exécutant dans cycleCloud versions 7.8 et ultérieures utilisent une version mise à jour des API de mise à l’échelle automatique qui permet aux clusters d’utiliser plusieurs tableaux de nœuds et partitions. Pour que cette fonctionnalité fonctionne dans Slurm, CycleCloud préremplit les nœuds exécutés dans le cluster. En raison de cette prépopulation, vous devez exécuter une commande sur le nœud du planificateur Slurm après avoir apporté des modifications au cluster, telles que la modification des limites de mise à l’échelle automatique ou des types de machines virtuelles.
Apporter des modifications au cluster
Le cluster Slurm déployé dans CycleCloud contient un script qui facilite les modifications. Après avoir apporté des modifications au cluster, exécutez la commande suivante en tant que racine (par exemple, en exécutant sudo -i) sur le nœud du planificateur Slurm pour reconstruire le slurm.conf fichier et mettre à jour les nœuds du cluster :
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
Remarque
Pour les versions de CycleCloud antérieures à la version 7.9.10, le cyclecloud_slurm.sh script se trouve dans /opt/cycle/jetpack/system/bootstrap/slurm.
Important
Si vous apportez des modifications qui affectent les machines virtuelles pour les nœuds d’une partition MPI (par exemple, la taille de machine virtuelle, l’image ou cloud-init), vous devez d’abord mettre fin à tous les nœuds.
La remove_nodes commande affiche un avertissement dans ce cas, mais elle ne s’arrête pas avec une erreur.
Si vous modifiez les machines virtuelles pour les nœuds dans une partition MPI (par exemple, la taille de machine virtuelle, l’image ou cloud-init) pendant que les nœuds sont en cours d’exécution, les nouveaux nœuds ne peuvent pas démarrer et vous voyez l’erreur This node doesn't match existing scaleset attribute.
/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes
Remarque
Pour CycleCloud versions < 8.2, le cyclecloud_slurm.sh script se trouve dans /opt/cycle/jetpack/system/bootstrap/slurm.
Si vous modifiez les machines virtuelles pour les nœuds dans une partition MPI (par exemple, la taille de machine virtuelle, l’image ou cloud-init) pendant que les nœuds sont en cours d’exécution, les nouveaux nœuds ne peuvent pas démarrer et vous voyez l’erreur This node doesn't match existing scaleset attribute. Pour cette raison, la apply_changes commande vérifie que les nœuds sont arrêtés. Si les nœuds ne sont pas arrêtés, la commande échoue avec ce message d’erreur : les nœuds suivants doivent être entièrement arrêtés avant d’appliquer des modifications.
Si vous apportez une modification qui n’affecte pas les propriétés de machine virtuelle pour les nœuds MPI, vous n’avez pas besoin d’arrêter d’abord les nœuds en cours d’exécution. Dans ce cas, vous pouvez apporter les modifications à l’aide de ces deux commandes :
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
Remarque
La apply_changes commande est disponible uniquement dans CycleCloud 8.3+. Dans les versions antérieures, vous devez utiliser les commandes remove_nodes et scale pour effectuer un changement. Vérifiez que la remove_nodes commande n’affiche pas d’avertissement sur les nœuds qui doivent être arrêtés.
Création de partitions supplémentaires
Le modèle par défaut fourni avec Azure CycleCloud a deux partitions (hpc et htc), et vous pouvez définir des tableaux de nœuds personnalisés qui mappent directement aux partitions Slurm. Par exemple, pour créer une partition GPU, ajoutez la section suivante à votre modèle de cluster :
[[nodearray gpu]]
MachineType = $GPUMachineType
ImageName = $GPUImageName
MaxCoreCount = $MaxGPUExecuteCoreCount
Interruptible = $GPUUseLowPrio
AdditionalClusterInitSpecs = $ExecuteClusterInitSpecs
[[[configuration]]]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = false
[[[cluster-init cyclecloud/slurm:execute:2.0.1]]]
[[[network-interface eth0]]]
AssociatePublicIpAddress = $ExecuteNodesPublic
Paramètres de mémoire
CycleCloud définit automatiquement la quantité de mémoire que Slurm peut utiliser à des fins de planification. Étant donné que la mémoire disponible peut varier légèrement en raison des options de noyau Linux et que le système d’exploitation et la machine virtuelle utilisent une petite quantité de mémoire, CycleCloud réduit automatiquement la valeur de mémoire dans la configuration Slurm. Par défaut, CycleCloud conserve 5% de la mémoire disponible signalée dans une machine virtuelle, mais vous pouvez remplacer cette valeur dans le modèle de cluster en définissant slurm.dampen_memory sur le pourcentage de mémoire à conserver. Par exemple, pour conserver 20 % de la mémoire d’une machine virtuelle :
slurm.dampen_memory=20
Désactivation de la mise à l’échelle automatique pour des nœuds ou des partitions spécifiques
Bien que la fonctionnalité « KeepAlive » intégrée de CycleCloud ne fonctionne actuellement pas pour les clusters Slurm, vous pouvez désactiver la mise à l’échelle automatique pour un cluster Slurm en cours d’exécution en modifiant directement le fichier slurm.conf. Vous pouvez exclure des nœuds individuels ou des partitions entières de la mise à l’échelle automatique.
Exclusion d’un nœud
Pour exclure un ou plusieurs nœuds de la mise à l’échelle automatique, ajoutez SuspendExcNodes=<listofnodes> au fichier de configuration Slurm. Par exemple, pour exclure les nœuds 1 et 2 de la hpc partition, ajoutez le code suivant à /sched/slurm.conf:
SuspendExcNodes=hpc-pg0-[1-2]
Redémarrez ensuite le slurmctld service pour que la nouvelle configuration prenne effet.
Exclusion d’une partition
Pour exclure des partitions entières de la mise à l’échelle automatique, utilisez un processus similaire pour exclure les nœuds. Pour exclure l’intégralité hpc de la partition, ajoutez le code suivant à /sched/slurm.conf:
SuspendExcParts=hpc
Ensuite, redémarrez le service slurmctld.
Résolution des problèmes
Conflits UID pour les utilisateurs Slurm et munge
Par défaut, ce projet utilise un UID et un GID de 11100 pour l’utilisateur Slurm et 11101 pour l’utilisateur munge. Si ces valeurs par défaut provoquent un conflit avec un autre utilisateur ou groupe, vous pouvez les remplacer.
Pour remplacer les valeurs UID et GID, sélectionnez le bouton Modifier pour les scheduler deux nœuds :
Et le tableau de nœuds execute : 
Ajoutez les attributs suivants à la section Configuration : 
slurm.user.name = slurm
slurm.user.uid = 11100
slurm.user.gid = 11100
munge.user.name = munge
munge.user.uid = 11101
munge.user.gid = 11101
Mise à l’échelle automatique
CycleCloud utilise la fonctionnalité Elastic Computing de Slurm. Pour déboguer les problèmes de mise à l’échelle automatique, vérifiez quelques journaux sur le nœud du planificateur. Tout d’abord, assurez-vous que les appels de reprise de l’économie d’alimentation se produisent en vérifiant /var/log/slurmctld/slurmctld.log. Vous devez voir des lignes comme suit :
[2019-12-09T21:19:03.400] power_save: pid 8629 waking nodes htc-1
Vérifiez /var/log/slurmctld/resume.log. Si l’étape de reprise échoue, vérifiez /var/log/slurmctld/resume_fail.log. Si vous voyez des messages concernant des noms de nœuds inconnus ou non valides, veillez à suivre les étapes décrites dans la section « Apporter des modifications au cluster » avant d’ajouter des nœuds au cluster.
Référence de configuration Slurm
Le tableau suivant décrit les options de configuration spécifiques à Slurm que vous pouvez activer pour personnaliser les fonctionnalités :
| Options de configuration spécifiques à Slurm | Descriptif |
|---|---|
| slurm.version | Par défaut : 18.08.7-1. Définit la version de Slurm à installer et exécuter. Actuellement, il s’agit de la version par défaut et uniquement disponible. D’autres versions peuvent être prises en charge à l’avenir. |
| slurm.autoscale | Par défaut : false. Paramètre par nœud qui contrôle si Slurm arrête et démarre automatiquement les nœuds dans ce tableau de nœuds. |
| slurm.hpc | Par défaut : true. Paramètre par nœud qui contrôle si les nœuds du tableau de nœuds se trouvent dans le même groupe de placement. Principalement utilisé pour les tableaux de nœuds qui utilisent des familles de machines virtuelles avec InfiniBand. S’applique uniquement lorsque slurm.autoscale est défini sur true. |
| slurm.default_partition | Par défaut : false. Paramètre par groupe de nœuds qui contrôle si le groupe de nœuds doit être la partition par défaut pour les travaux qui ne demandent pas explicitement une partition. |
| slurm.dampen_memory | Par défaut : 5. Pourcentage de mémoire à conserver pour la surcharge du système d’exploitation/machine virtuelle. |
| slurm.suspend_timeout | Par défaut : 600. Durée en secondes entre un appel de suspension et quand ce nœud peut être utilisé à nouveau. |
| slurm.resume_timeout | Par défaut : 1800. La durée en secondes à attendre pour qu'un nœud démarre avec succès. |
| slurm.install | Par défaut : true. Détermine si Slurm est installé au démarrage du nœud (true). Si vous installez Slurm dans une image personnalisée, définissez cette option false de configuration sur (proj version 2.5.0+). |
| slurm.use_pcpu | Par défaut : true. Paramètre par tableau de nœuds pour contrôler la planification avec des processeurs virtuels hyperthread. Définir false pour définir CPUs=vcpus dans cyclecloud.conf. |
| slurm.user.name | Par défaut : slurm. Nom d’utilisateur du service Slurm à utiliser. |
| slurm.user.uid | Par défaut : 11100. ID utilisateur à utiliser pour l’utilisateur Slurm. |
| slurm.user.gid | Par défaut : 11100. ID de groupe à utiliser pour l’utilisateur Slurm. |
| munge.user.name | Par défaut : munge. Nom d’utilisateur du service d’authentification MUNGE à utiliser. |
| munge.user.uid | Par défaut : 11101. ID d’utilisateur à utiliser pour l’utilisateur MUNGE. |
| munge.user.gid | Par défaut : 11101. ID de groupe de l’utilisateur MUNGE. |
CycleCloud prend en charge un ensemble standard d'attributs d'arrêt automatique pour les planificateurs
| Caractéristique | Descriptif |
|---|---|
| cyclecloud.cluster.autoscale.stop_enabled | Active l'arrêt automatique sur ce nœud. [vrai/faux] |
| cyclecloud.cluster.autoscale.idle_time_after_jobs | Temps (en secondes) pendant lequel un nœud reste inactif après avoir terminé ses tâches avant son arrêt automatique. |
| cyclecloud.cluster.autoscale.idle_time_before_jobs | Durée (en secondes) pendant laquelle un nœud reste inactif avant qu'il ne s'arrête automatiquement après avoir terminé les travaux. |