Partager 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. Les principales fonctionnalités 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
  • Rapports de coûts via l’interface CLI azslurm
  • azslurm l’autoscaler basé sur l’interface 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

Les clusters de Slurm dans les versions CycleCloud < 8.4.0

Pour plus d’informations, consultez Transition de la version 2.7 à la version 3.0.

Apporter des modifications au cluster

Le cluster Slurm déployé dans CycleCloud contient une interface 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 le azure.conf et mettre à jour les nœuds du cluster :

      $ sudo -i
      # azslurm scale

La commande crée les partitions avec le nombre correct de nœuds, le bon gres.conf et redémarrez le slurmctld.

Ne plus précréer les nœuds d’exécution

À compter du projet Slurm CycleCloud version 3.0.0, les nœuds ne sont pas créés au préalable. Les nœuds sont créés lorsque azslurm resume est invoqué, ou en les créant manuellement dans CycleCloud en utilisant le 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 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:3.0.1]]]
      [[[network-interface eth0]]]
      AssociatePublicIpAddress = $ExecuteNodesPublic

Partitions dynamiques

À compter de CycleCloud version 3.0.1, nous prenons en charge les partitions dynamiques. Vous pouvez mapper une nodearray à une partition dynamique en effectuant les opérations suivantes. Il myfeature peut s’agir de toute description de fonctionnalité souhaitée ou 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\""

Le snip de code partagé génère une partition dynamique comme suit :

# 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, la partition dynamique n’inclut aucun nœud. Vous pouvez démarrer des nœuds via CycleCloud ou en exécutant azslurm resume manuellement, ils rejoignent le cluster à l’aide du nom que vous avez choisi. Toutefois, étant donné que Slurm n'a pas connaissance de ces nœuds à l’avance, il ne peut pas les redimensionner automatiquement.

Au lieu de cela, vous pouvez également créer préalablement des enregistrements de nœud comme cela, ce qui permet à Slurm de les mettre à l’échelle automatiquement.

scontrol create nodename=f4-[1-10] Feature=myfeature State=CLOUD

L’un des autres avantages 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 peut distinguer la taille de machine virtuelle que vous souhaitez utiliser.

Remarque 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 tous les cas, une fois que vous avez créé ces nœuds dans un State=Cloud, ils deviennent disponibles pour la mise à l’échelle automatique comme les autres nœuds.

Pour prendre en charge plusieurs tailles de machine virtuelle dans un nœud CycleCloud, vous pouvez modifier le modèle pour autoriser plusieurs tailles de machines virtuelles 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 diminuent tout comme les autres partitions. Pour désactiver la partition dynamique, 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 indiquer les nœuds qui sont mis hors tension au lieu de compter sur l’état d’alimentation dans Slurm. Autrement dit, lorsque la mise à l’échelle automatique est activée, les nœuds désactivés sont indiqués comme idle~ dans sinfo. Lorsque la mise à l’échelle automatique est désactivée, les nœuds inactifs ne s’affichent pas 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 simplement SuspendTime=-1 à la configuration supplémentaire de Slurm 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.

Résolution des problèmes

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 se trouvent désormais dans /opt/azurehpc/slurm/logs au lieu de /var/log/slurmctld. Notez que slurmctld.log est dans ce dossier.

  3. Le cyclecloud_slurm.sh script n’est plus disponible. Un nouvel outil CLI appelé azslurm a remplacé cyclecloud_slurm.sh et peut être exécuté en tant que superutilisateur. azslurm prend en charge l’autocomplétion.

    [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 the --script to run python scripts
    suspend              - Equivalent to SuspendProgram, shuts down nodes
    wait_for_resume      - Wait for a set of nodes to converge.
    
  4. CycleCloud ne crée plus de nœuds à l’avance. Elle les crée uniquement quand elles sont nécessaires.

  5. Tous les fichiers binaires Slurm se trouvent dans le azure-slurm-install-pkg*.tar.gz fichier, sous slurm-pkgs. Ils sont extraits d’une version binaire spécifique. La version binaire actuelle est 4.0.0.

  6. Pour les travaux MPI, la seule limite réseau par défaut est la partition. Contrairement à la version 2.x, chaque partition ne contient pas plusieurs « groupes de placement ». Vous n’avez donc qu’un seul VMSS colocalisé par partition. Le plug-in de topologie n'est plus nécessaire, donc le plug-in de soumission de travaux n'est pas requis non plus. À la place, la soumission à plusieurs partitions est l’option recommandée pour les cas d’utilisation qui nécessitent la soumission de tâches à plusieurs groupes de placement.

CycleCloud prend en charge un ensemble standard d'attributs d'arrêt automatique pour les planificateurs

Caractéristique Descriptif
cyclecloud.cluster.autoscale.stop_enabled La fonction d'arrêt automatique est-elle activée sur ce nœud ? [vrai/faux]
cyclecloud.cluster.autoscale.idle_time_after_jobs Durée (en secondes) pendant laquelle un nœud reste inactif après avoir terminé les tâches avant que sa capacité ne soit réduite.
cyclecloud.cluster.autoscale.temps_d'attente_avant_les_jobs Durée (en secondes) pendant laquelle un nœud reste inactif avant de terminer les tâches, avant d'être réduit en capacité.