Share via


Slurm

Slurm est un gestionnaire de charge de travail open source hautement configurable. Pour obtenir une vue d’ensemble, consultez le site de projet Slurm .

Notes

Depuis CycleCloud 8.4.0, l’intégration de Slurm a été réécrite pour prendre en charge de nouvelles fonctionnalités. Pour plus d’informations, consultez la documentation Slurm 3.0 .

Slurm peut facilement être activé sur un cluster CycleCloud en modifiant le « run_list » dans la section configuration de votre définition de cluster. Les deux composants de base d’un cluster Slurm sont le nœud « master » (ou « planificateur ») qui fournit un système de fichiers partagé sur lequel le logiciel Slurm s’exécute, et les nœuds « execute » qui sont les hôtes qui montent le système de fichiers partagé et exécutent les travaux envoyés. Par exemple, un extrait 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

Slurm peut facilement être activé sur un cluster CycleCloud en modifiant le « run_list » dans la section configuration de votre définition de cluster. Les deux composants de base d’un cluster Slurm sont le nœud « planificateur », qui fournit un système de fichiers partagé sur lequel s’exécute le logiciel Slurm, et les nœuds « execute » qui sont les hôtes qui montent le système de fichiers partagé et exécutent les travaux envoyés. 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 implémentent une version mise à jour des API de mise à l’échelle automatique qui permet aux clusters d’utiliser plusieurs nodearrays et partitions. Pour faciliter cette fonctionnalité dans Slurm, CycleCloud préremplit les nœuds d’exécution dans le cluster. Pour cette raison, vous devez exécuter une commande sur le nœud du planificateur Slurm après avoir apporté des modifications au cluster, telles que les limites de mise à l’échelle automatique ou les types de machines virtuelles.

Apporter des modifications au cluster

Le cluster Slurm déployé dans CycleCloud contient un script qui facilite cette opération. 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 et slurm.conf mettre à jour les nœuds dans le cluster :

/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale

Notes

Pour CycleCloud versions < 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), les nœuds doivent tous être arrêtés en premier. La remove_nodes commande affiche un avertissement dans ce cas, mais elle ne se ferme pas avec une erreur. S’il existe des nœuds en cours d’exécution, vous obtenez une erreur indiquant This node does not match existing scaleset attribute quand les nouveaux nœuds sont démarrés.

/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes

Notes

Pour CycleCloud versions < 8.2, le cyclecloud_slurm.sh script se trouve dans /opt/cycle/jetpack/system/bootstrap/slurm.

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) et que les nœuds sont en cours d’exécution, vous obtenez une erreur indiquant This node does not match existing scaleset attribute quand les nouveaux nœuds sont démarrés. Pour cette raison, la apply_changes commande s’assure que les nœuds sont terminés et échoue avec le message d’erreur suivant si ce n’est pas le cas : Les nœuds suivants doivent être complètement arrêtés avant d’appliquer les 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 des deux commandes suivantes :

/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale

Notes

La apply_changes commande n’existe que dans CycleCloud 8.3+. La seule façon d’apporter une modification dans les versions antérieures consiste donc à utiliser les commandes ci-dessus + remove_nodesscale. Assurez-vous que la remove_nodes commande n’affiche pas d’avertissement concernant 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 nodearrays personnalisés qui sont mappés 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 disponible que Slurm doit utiliser à des fins de planification. Étant donné que la quantité de mémoire disponible peut changer légèrement en raison des différentes options de noyau Linux, et que le système d’exploitation et la machine virtuelle peuvent utiliser une petite quantité de mémoire qui serait autrement disponible pour les travaux, CycleCloud réduit automatiquement la quantité 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 cette valeur peut être remplacée dans le modèle de cluster en définissant slurm.dampen_memory sur le pourcentage de mémoire à retenir. 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é CycleCloud intégrée « KeepAlive » ne fonctionne pas actuellement pour les clusters Slurm, il est possible de 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 nœud 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 partition hpc, ajoutez les éléments suivants à /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

L’exclusion de partitions entières de la mise à l’échelle automatique est similaire à l’exclusion de nœuds. Pour exclure la partition entière hpc , ajoutez ce qui suit à /sched/slurm.conf

SuspendExcParts=hpc

Ensuite, redémarrez le service slurmctld.

Dépannage

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 cela provoque un conflit avec un autre utilisateur ou groupe, ces valeurs par défaut peuvent être remplacées.

Pour remplacer l’UID et le GID, cliquez sur le bouton Modifier pour les deux nœuds scheduler :

Modifier le planificateur

Modifier le planificateur

Et le execute nodearray : Edit Nodearray

et ajoutez les attributs suivants à la Configuration section :

Modifier la 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, vous pouvez case activée quelques journaux sur le nœud du planificateur. La première consiste à vérifier que les appels de reprise de l’économie d’énergie sont effectués en vérifiant /var/log/slurmctld/slurmctld.log. Vous devriez voir des lignes comme :

[2019-12-09T21:19:03.400] power_save: pid 8629 waking nodes htc-1

L’autre journal à case activée est /var/log/slurmctld/resume.log. Si l’étape de reprise échoue, il y aura également un /var/log/slurmctld/resume_fail.log. S’il existe des messages concernant des noms de nœuds inconnus ou non valides, vérifiez que vous n’avez pas ajouté de nœuds au cluster sans suivre les étapes décrites dans la section « Apporter des modifications au cluster » ci-dessus.

Informations de référence sur la configuration de Slurm

Voici les options de configuration spécifiques à Slurm que vous pouvez activer pour personnaliser les fonctionnalités :

Options de configuration spécifiques à Slurm Description
slurm.version Valeur par défaut : « 18.08.7-1 ». Il s’agit de la version de Slurm à installer et à exécuter. Il s’agit actuellement de l’option par défaut et uniquement . À l’avenir, d’autres versions du logiciel Slurm pourront être prises en charge.
slurm.autoscale Valeur par défaut : 'false'. Il s’agit d’un paramètre par nœudarray qui contrôle si Slurm doit arrêter et démarrer automatiquement les nœuds dans ce tableau de nœuds.
slurm.hpc Valeur par défaut : 'true'. Il s’agit d’un paramètre par nœudarray qui contrôle si les nœuds du nodearray seront placés dans le même groupe de placement. Principalement utilisé pour les nodearrays utilisant des familles de machines virtuelles avec InfiniBand. Elle s’applique uniquement lorsque slurm.autoscale est défini sur « true ».
slurm.default_partition Valeur par défaut : 'false'. Il s’agit d’un paramètre par nodearray qui contrôle si le nodearray doit être la partition par défaut pour les travaux qui ne demandent pas explicitement de partition.
slurm.dampen_memory Valeur par défaut : « 5 ». Pourcentage de mémoire à retenir pour la surcharge du système d’exploitation/machine virtuelle.
slurm.suspend_timeout Valeur par défaut : « 600 ». Durée (en secondes) entre un appel de suspension et le moment où ce nœud peut être réutilisé.
slurm.resume_timeout Valeur par défaut : « 1800 ». Durée (en secondes) d’attente d’un nœud pour démarrer correctement.
slurm.install Valeur par défaut : 'true'. Détermine si Slurm est installé au démarrage du nœud (« true »). Si Slurm est installé dans une image personnalisée, cela doit être défini sur « false ». (proj version 2.5.0+)
slurm.use_pcpu Valeur par défaut : 'true'. Il s’agit d’un paramètre par nœud pour contrôler la planification avec des vcpus hyperthreaded. Définissez sur « false » pour définir UC=vcpus dans cyclecloud.conf.
slurm.user.name Valeur par défaut : 'slurm'. Il s’agit du nom d’utilisateur que le service Slurm doit utiliser.
slurm.user.uid Valeur par défaut : « 11100 ». ID d’utilisateur à utiliser pour l’utilisateur Slurm.
slurm.user.gid Valeur par défaut : « 11100 ». ID de groupe à utiliser pour l’utilisateur Slurm.
munge.user.name Valeur par défaut : 'munge'. Il s’agit du nom d’utilisateur que le service d’authentification MUNGE doit utiliser.
munge.user.uid Valeur par défaut : « 11101 ». ID d’utilisateur à utiliser pour l’utilisateur MUNGE.
munge.user.gid Valeur par défaut : « 11101 ». ID de groupe à utiliser pour l’utilisateur MUNGE.

CycleCloud prend en charge un ensemble standard d’attributs autostop sur les planificateurs :

Attribut Description
cyclecloud.cluster.autoscale.stop_enabled L’arrêt automatique est-il activé sur ce nœud ? [true/false]
cyclecloud.cluster.autoscale.idle_time_after_jobs Durée (en secondes) pendant laquelle un nœud reste inactif après l’exécution des travaux avant sa mise à l’échelle.
cyclecloud.cluster.autoscale.idle_time_before_jobs Durée (en secondes) pendant laquelle un nœud reste inactif avant d’effectuer des travaux avant sa mise à l’échelle.