Partage via


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 (hpchtcet 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

  1. Le dossier d’installation a changé/opt/cycle/slurm ->/opt/azurehpc/slurm

  2. 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.

  3. cyclecloud_slurm.sh n’existe plus. Au lieu de cela, il existe une nouvelle azslurm 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.
    
  4. Les nœuds ne sont plus préremplis dans CycleCloud. Ils ne sont créés qu’en cas de besoin.

  5. Tous les fichiers binaires slurm se trouvent à l’intérieur du azure-slurm-install-pkg*.tar.gz fichier, sous slurm-pkgs. Ils sont extraits d’une version binaire spécifique. La version binaire actuelle est 2023-03-13

  6. Pour 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.