CycleCloud Slurm 3.0
La prise en charge du planificateur Slurm a été réécrite dans le cadre de la version CycleCloud 8.4.0. Ses caractéristiques principales sont les suivantes :
- Prise en charge des nœuds dynamiques et des partitions dynamiques via des nodearays dynamiques, prenant en charge les tailles de machine virtuelle unique et multiple
- Nouvelles versions de slurm 23.02 et 22.05.8
- Rapport des coûts via l’interface
azslurm
CLI -
azslurm
mise à l’échelle automatique basée sur cli - Prise en charge d’Ubuntu 20
- Suppression de la nécessité d’un plug-in de topologie, et donc de tout plug-in d’envoi
Clusters Slurm dans CycleCloud versions < 8.4.0
Pour plus d’informations, consultez Transition de la version 2.7 vers la version 3.0 .
Apporter des modifications au cluster
Le cluster Slurm déployé dans CycleCloud contient une cli appelée azslurm
pour faciliter les modifications apportées au cluster. Après avoir apporté des modifications au cluster, exécutez la commande suivante en tant que racine sur le nœud du planificateur Slurm pour reconstruire et azure.conf
mettre à jour les nœuds dans le cluster :
$ sudo -i
# azslurm scale
Cela doit créer les partitions avec le nombre correct de nœuds, le approprié gres.conf
et redémarrer le slurmctld
.
Ne plus créer de nœuds d’exécution préalables
Depuis la version 3.0.0 du projet CycleCloud Slurm, nous ne précréons plus les nœuds dans CycleCloud. Les nœuds sont créés quand azslurm resume
est appelé ou en les créant manuellement dans CycleCloud via l’interface CLI.
Création de partitions supplémentaires
Le modèle par défaut fourni avec Azure CycleCloud a trois partitions (hpc
htc
et dynamic
), 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:3.0.1]]]
[[[network-interface eth0]]]
AssociatePublicIpAddress = $ExecuteNodesPublic
Partitions dynamiques
À compter de 3.0.1
, nous prenons en charge les partitions dynamiques. Vous pouvez créer un nodearray
mappage à une partition dynamique en ajoutant ce qui suit.
Notez qu’il myfeature
peut s’agir de n’importe quelle description de fonctionnalité souhaitée. Il peut également s’agir de plusieurs fonctionnalités, séparées par une virgule.
[[[configuration]]]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = false
# This is the minimum, but see slurmd --help and [slurm.conf](https://slurm.schedmd.com/slurm.conf.html) for more information.
slurm.dynamic_config := "-Z --conf \"Feature=myfeature\""
Cette opération génère une partition dynamique comme celle-ci
# Creating dynamic nodeset and partition using slurm.dynamic_config=-Z --conf "Feature=myfeature"
Nodeset=mydynamicns Feature=myfeature
PartitionName=mydynamicpart Nodes=mydynamicns
Utilisation de partitions dynamiques pour la mise à l’échelle automatique
Par défaut, nous ne définissons aucun nœud dans la partition dynamique. Au lieu de cela, vous pouvez démarrer des nœuds via CycleCloud ou en appelant azslurm resume
manuellement et ils rejoignent le cluster avec le nom que vous avez choisi. Toutefois, Slurm ne connaît pas ces nœuds et ne peut donc pas les mettre à l’échelle automatiquement.
Au lieu de cela, vous pouvez également précréer des enregistrements de nœud comme suit, ce qui permet à Slurm de les mettre à l’échelle automatiquement.
scontrol create nodename=f4-[1-10] Feature=myfeature State=CLOUD
Un autre avantage des partitions dynamiques est que vous pouvez prendre en charge plusieurs tailles de machine virtuelle dans la même partition.
Ajoutez simplement le nom de la taille de machine virtuelle en tant que fonctionnalité, puis azslurm
pouvez distinguer la taille de machine virtuelle que vous souhaitez utiliser.
Note La taille de machine virtuelle est ajoutée implicitement. Vous n’avez pas besoin de l’ajouter à slurm.dynamic_config
scontrol create nodename=f4-[1-10] Feature=myfeature,Standard_F4 State=CLOUD
scontrol create nodename=f8-[1-10] Feature=myfeature,Standard_F8 State=CLOUD
Dans les deux cas, une fois que vous avez créé ces nœuds dans un State=Cloud
, ils sont désormais disponibles pour la mise à l’échelle automatique comme les autres nœuds.
Pour prendre en charge plusieurs tailles de machine virtuelle dans un nodearray CycleCloud, vous pouvez modifier le modèle pour autoriser plusieurs tailles de machine virtuelle en ajoutant Config.Mutiselect = true
.
[[[parameter DynamicMachineType]]]
Label = Dyn VM Type
Description = The VM type for Dynamic nodes
ParameterType = Cloud.MachineType
DefaultValue = Standard_F2s_v2
Config.Multiselect = true
Scale-down dynamique
Par défaut, tous les nœuds de la partition dynamique sont mis à l’échelle comme les autres partitions. Pour désactiver cela, consultez SuspendExcParts.
Mise à l’échelle manuelle
Si cyclecloud_slurm détecte que la mise à l’échelle automatique est désactivée (SuspendTime=-1), elle utilise l’état FUTURE pour désigner les nœuds hors tension au lieu de s’appuyer sur l’état d’alimentation dans Slurm. C’est-à-dire que lorsque la mise à l’échelle automatique est activée, les nœuds sont indiqués comme idle~
étant dans sinfo. Lorsque la mise à l’échelle automatique est désactivée, les nœuds désactivés n’apparaissent pas du tout dans sinfo. Vous pouvez toujours voir leur définition avec scontrol show nodes --future
.
Pour démarrer de nouveaux nœuds, exécutez /opt/azurehpc/slurm/resume_program.sh node_list
(par exemple, htc-[1-10]).
Pour arrêter les nœuds, exécutez /opt/azurehpc/slurm/suspend_program.sh node_list
(par exemple, htc-[1-10]).
Pour démarrer un cluster dans ce mode, ajoutez SuspendTime=-1
simplement à la configuration slurm supplémentaire dans le modèle.
Pour basculer un cluster vers ce mode, ajoutez SuspendTime=-1
à slurm.conf et exécutez scontrol reconfigure
. Exécutez ensuite azslurm remove_nodes && azslurm scale
.
Dépannage
Transition de la version 2.7 à la version 3.0
Le dossier d’installation a changé
/opt/cycle/slurm
->/opt/azurehpc/slurm
Les journaux de mise à l’échelle automatique sont désormais dans
/opt/azurehpc/slurm/logs
au lieu de/var/log/slurmctld
.slurmctld.log
Notez que se trouve toujours dans ce dossier.cyclecloud_slurm.sh
n’existe plus. Au lieu de cela, il existe une nouvelleazslurm
interface cli, qui peut être exécutée en tant que racine.azslurm
prend en charge la saisie semi-automatique.[root@scheduler ~]# azslurm usage: accounting_info - buckets - Prints out autoscale bucket information, like limits etc config - Writes the effective autoscale config, after any preprocessing, to stdout connect - Tests connection to CycleCloud cost - Cost analysis and reporting tool that maps Azure costs to Slurm Job Accounting data. This is an experimental feature. default_output_columns - Output what are the default output columns for an optional command. generate_topology - Generates topology plugin configuration initconfig - Creates an initial autoscale config. Writes to stdout keep_alive - Add, remove or set which nodes should be prevented from being shutdown. limits - nodes - Query nodes partitions - Generates partition configuration refresh_autocomplete - Refreshes local autocomplete information for cluster specific resources and nodes. remove_nodes - Removes the node from the scheduler without terminating the actual instance. resume - Equivalent to ResumeProgram, starts and waits for a set of nodes. resume_fail - Equivalent to SuspendFailProgram, shuts down nodes retry_failed_nodes - Retries all nodes in a failed state. scale - shell - Interactive python shell with relevant objects in local scope. Use --script to run python scripts suspend - Equivalent to SuspendProgram, shuts down nodes wait_for_resume - Wait for a set of nodes to converge.
Les nœuds ne sont plus préremplis dans CycleCloud. Ils ne sont créés qu’en cas de besoin.
Tous les fichiers binaires slurm se trouvent à l’intérieur du
azure-slurm-install-pkg*.tar.gz
fichier, sousslurm-pkgs
. Ils sont extraits d’une version binaire spécifique. La version binaire actuelle est 2023-03-13Pour les travaux MPI, la seule limite réseau qui existe par défaut est la partition. Il n’existe pas plusieurs « groupes de placement » par partition comme 2.x. Vous n’avez donc qu’un seul VMSS colocalisé par partition. Il n’y a pas non plus d’utilisation du plug-in de topologie, ce qui a nécessité l’utilisation d’un plug-in de soumission de travaux qui n’est plus non plus nécessaire. Au lieu de cela, l’envoi à plusieurs partitions est désormais l’option recommandée pour les cas d’usage qui nécessitent l’envoi de travaux à plusieurs groupes de placement.
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. |