

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Slurm Workload Manager (`slurm`)
<a name="slurm-workload-manager-v3"></a>

## Taille et mise à jour de la capacité du cluster
<a name="cluster-capacity-size-and-update"></a>

La capacité du cluster est définie par le nombre de nœuds de calcul que le cluster peut dimensionner. Les nœuds de calcul sont soutenus par des instances Amazon EC2 définies dans les ressources de calcul de la AWS ParallelCluster configuration`(Scheduling/SlurmQueues/`ComputeResources`)`, et sont organisés en files d'attente `(Scheduling/SlurmQueues)` qui mappent 1:1 aux partitions. Slurm 

Au sein d'une ressource de calcul, il est possible de configurer le nombre minimum de nœuds de calcul (instances) qui doivent toujours continuer à fonctionner dans le cluster (`MinCount`), ainsi que le nombre maximum d'instances que la ressource de calcul peut atteindre ([`MaxCount`3](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount)).

Au moment de la création du cluster, ou lors d'une mise à jour du cluster, AWS ParallelCluster lance autant d'instances Amazon EC2 que configuré `MinCount` pour chaque ressource de calcul (`Scheduling/SlurmQueues/ ComputeResources`) définie dans le cluster. Les instances lancées pour couvrir le nombre minimal de nœuds pour les ressources de calcul du cluster sont appelées ***nœuds statiques**.* Une fois démarrés, les nœuds statiques sont censés être persistants dans le cluster et le système ne les arrête pas, sauf si un événement ou une condition spécifique se produit. Ces événements incluent, par exemple, l'échec des tests de Slurm santé d'Amazon EC2 et le changement de l'état du Slurm nœud en DRAIN ou DOWN. 

Les instances Amazon EC2, de l'ordre de 1 `1` à `‘MaxCount - MinCount’` (`MaxCount `*moins*)` MinCount)`, lancées à la demande pour faire face à l'augmentation de la charge du cluster, sont appelées nœuds ***dynamiques***. Leur nature est éphémère, ils sont lancés pour exécuter des tâches en attente et sont interrompus une fois qu'ils restent inactifs pendant une période définie `Scheduling/SlurmSettings/ScaledownIdletime` dans la configuration du cluster (par défaut : 10 minutes).

Les nœuds statiques et les nœuds dynamiques sont conformes au schéma de dénomination suivant :
+ Nœuds statiques `<Queue/Name>-st-<ComputeResource/Name>-<num>` où `<num> = 1..ComputeResource/MinCount`
+ Nœuds dynamiques `<Queue/Name>-dy-<ComputeResource/Name>-<num>` où `<num> = 1..(ComputeResource/MaxCount - ComputeResource/MinCount)`

Par exemple, étant donné la AWS ParallelCluster configuration suivante : 

```
Scheduling:  
    Scheduler: Slurm  
    SlurmQueues:    
        - Name: queue1      
            ComputeResources:        
                - Name: c5xlarge          
                    Instances:            
                        - InstanceType: c5.xlarge          
                        MinCount: 100          
                        MaxCount: 150
```

Les nœuds suivants seront définis dans Slurm

```
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
```

Lorsqu'une ressource de calcul l'est`MinCount == MaxCount`, tous les nœuds de calcul correspondants seront statiques et toutes les instances seront lancées au creation/update moment du cluster et maintenues opérationnelles. Par exemple : 

```
Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - Name: queue1
      ComputeResources:
        - Name: c5xlarge
          Instances:
            - InstanceType: c5.xlarge
          MinCount: 100
          MaxCount: 100
```

```
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
```

## Mise à jour des capacités du cluster
<a name="cluster-capacity-update"></a>

La mise à jour de la capacité du cluster inclut l'ajout ou la suppression de files d'attente, de ressources de calcul ou la modification `MinCount/MaxCount` d'une ressource de calcul. À partir de AWS ParallelCluster la version 3.9.0, la réduction de la taille d'une file d'attente nécessite que le parc de calcul soit arrêté ou [QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)défini sur TERMINATE avant qu'une mise à jour du cluster n'ait lieu. Il n'est pas nécessaire d'arrêter le parc informatique ou de le [QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)configurer sur TERMINATE lorsque : 
+ Ajouter de nouvelles files d'attente à la planification/ [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)

   
+ Ajouter de nouvelles ressources de calcul `Scheduling/SlurmQueues/ComputeResources` à une file d'attente
+ Augmenter la valeur `MaxCount` d'une ressource de calcul
+ Augmentation MinCount d'une ressource de calcul et augmentation MaxCount de la même ressource de calcul d'au moins la même quantité

## Considérations et restrictions
<a name="considerations-limitations"></a>

Cette section vise à décrire tous les facteurs, contraintes ou limitations importants à prendre en compte lors du redimensionnement de la capacité du cluster.
+ Lors de la suppression d'une file d'attente de `Scheduling/SlurmQueues` tous les nœuds de calcul portant un nom`<Queue/Name>-*`, statique ou dynamique, seront supprimés de la Slurm configuration et les instances Amazon EC2 correspondantes seront résiliées.
+ Lorsque vous supprimez une ressource `Scheduling/SlurmQueues/ComputeResources` de calcul d'une file d'attente, tous les nœuds de calcul portant un nom`<Queue/Name>-*-<ComputeResource/Name>-*`, qu'ils soient statiques ou dynamiques, sont supprimés de la Slurm configuration et les instances Amazon EC2 correspondantes sont mises hors service.

Lorsque vous modifiez le `MinCount` paramètre d'une ressource de calcul, nous pouvons distinguer deux scénarios différents, s'il `MaxCount` est maintenu égal à `MinCount` (capacité statique uniquement) et s'il `MaxCount` est supérieur à `MinCount` (capacité statique et dynamique mixte).

### Changements de capacité avec des nœuds statiques uniquement
<a name="capacity-changes-static-only"></a>
+ Si`MinCount == MaxCount`, lors de l'augmentation `MinCount` (et`MaxCount`), le cluster est configuré en étendant le nombre de nœuds statiques à la nouvelle valeur de `MinCount` `<Queue/Name>-st-<ComputeResource/Name>-<new_MinCount>` et que le système continue d'essayer de lancer des instances Amazon EC2 pour atteindre la nouvelle capacité statique requise.
+ Si`MinCount == MaxCount`, lors de la diminution `MinCount` (et`MaxCount`) du montant N, le cluster est configuré en supprimant les N derniers nœuds statiques `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<old_MinCount>]` et le système met fin aux instances Amazon EC2 correspondantes.
  + État initial `MinCount = MaxCount = 100`
  + 

    ```
    $ sinfo
    PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
    queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
    ```
  + Mise à jour `-30` sur `MinCount` et `MaxCount: MinCount = MaxCount = 70`
  + 

    ```
    $ sinfo
    PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
    queue1*      up   infinite     70   idle queue1-st-c5xlarge-[1-70]
    ```

### Changements de capacité avec des nœuds mixtes
<a name="capacity-changes-mixed-nodes"></a>

Si`MinCount < MaxCount`, lors d'une augmentation `MinCount` d'un montant N (en supposant que `MaxCount` cela restera inchangé), le cluster sera configuré en étendant le nombre de nœuds statiques à la nouvelle valeur de `MinCount` (`old_MinCount + N`) : `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>` et le système continuera d'essayer de lancer des instances Amazon EC2 pour atteindre la nouvelle capacité statique requise. De plus, pour respecter la `MaxCount` capacité de la ressource de calcul, la configuration du cluster est mise à jour en *supprimant les N derniers nœuds dynamiques* : `<Queue/Name>-dy-<ComputeResource/Name>-[<MaxCount - old_MinCount - N>...<MaxCount - old_MinCount>]` et le système mettra fin aux instances Amazon EC2 correspondantes.
+ État initial : `MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ Mettre à jour \+30 vers `MinCount : MinCount = 130 (MaxCount = 150)`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     20  idle~ queue1-dy-c5xlarge-[1-20]
  queue1*      up   infinite    130   idle queue1-st-c5xlarge-[1-130]
  ```

Si`MinCount < MaxCount`, lors de l'augmentation `MinCount` et `MaxCount` de la même quantité N, le cluster est configuré en étendant le nombre de nœuds statiques à la nouvelle valeur de `MinCount` (`old_MinCount + N`) : `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>` et le système continuera d'essayer de lancer des instances Amazon EC2 pour atteindre la nouvelle capacité statique requise. De plus, aucune modification ne sera apportée au nombre de nœuds dynamiques pour honorer le nouveau

 Valeur `MaxCount`.
+ État initial : `MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ Mettre à jour \+30 vers `MinCount : MinCount = 130 (MaxCount = 180)`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     20  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    130   idle queue1-st-c5xlarge-[1-130]
  ```

Si`MinCount < MaxCount`, lors de la diminution `MinCount` du montant N (en supposant qu'il `MaxCount` restera inchangé), le cluster sera configuré en supprimant les N derniers nœuds statiques (nœuds statiques) `<Queue/Name>-st-<ComputeResource/Name>-[<old_MinCount - N>...<old_MinCount>` et le système mettra fin aux instances Amazon EC2 correspondantes. De plus, pour respecter la `MaxCount` capacité de la ressource de calcul, la configuration du cluster est mise à jour en augmentant le nombre de nœuds dynamiques afin de combler le vide. `MaxCount - new_MinCount: <Queue/Name>-dy-<ComputeResource/Name>-[1..<MazCount - new_MinCount>]` Dans ce cas, comme il s'agit de nœuds dynamiques, aucune nouvelle instance Amazon EC2 ne sera lancée à moins que le planificateur n'ait des tâches en attente sur les nouveaux nœuds.
+ État initial : `MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ Mise à jour -30 le `MinCount : MinCount = 70 (MaxCount = 120)`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     80  idle~ queue1-dy-c5xlarge-[1-80]
  queue1*      up   infinite     70   idle queue1-st-c5xlarge-[1-70]
  ```

Si`MinCount < MaxCount`, lors de la diminution `MinCount` et `MaxCount` de la même quantité N, le cluster sera configuré en supprimant les N derniers nœuds statiques `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<oldMinCount>]` et le système mettra fin aux instances Amazon EC2 correspondantes.

 De plus, aucune modification ne sera apportée au nombre de nœuds dynamiques pour respecter la nouvelle `MaxCount` valeur.
+ État initial : `MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ Mise à jour -30 le `MinCount : MinCount = 70 (MaxCount = 120)`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     80  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite     70   idle queue1-st-c5xlarge-[1-70]
  ```

Si`MinCount < MaxCount`, lors de la diminution `MaxCount` du montant N (en supposant `MinCount` qu'il reste inchangé), le cluster est configuré en supprimant les N derniers nœuds dynamiques `<Queue/Name>-dy-<ComputeResource/Name>-<old_MaxCount - N...<oldMaxCount>]` et le système arrête les instances Amazon EC2 correspondantes dans le cas où elles étaient en cours d'exécution. Aucun impact n'est attendu sur les nœuds statiques.
+ État initial : `MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ Mise à jour -30 le `MaxCount : MinCount = 100 (MaxCount = 120)`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     20  idle~ queue1-dy-c5xlarge-[1-20]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```

## Impacts sur les emplois
<a name="impacts-on-jobs"></a>

Dans tous les cas où des nœuds sont supprimés et des instances Amazon EC2 résiliées, une tâche sbatch exécutée sur les nœuds supprimés sera remise en file d'attente, sauf si aucun autre nœud ne répond aux exigences de la tâche. Dans ce dernier cas, la tâche échoue avec le statut NODE\_FAIL, disparaît de la file d'attente et doit être soumise à nouveau manuellement.

Si vous prévoyez d'effectuer une mise à jour de redimensionnement du cluster, vous pouvez empêcher les tâches de s'exécuter sur les nœuds qui seront supprimés lors de la mise à jour planifiée. Cela est possible en configurant les nœuds à supprimer lors de la maintenance. Sachez que le fait de configurer un nœud en maintenance n'aura aucune incidence sur les tâches qui sont déjà en cours d'exécution sur le nœud.

Supposons qu'avec la mise à jour prévue pour le redimensionnement du cluster, vous allez supprimer le `qeueu-st-computeresource-[9-10` [nœud]. Vous pouvez créer une Slurm réservation à l'aide de la commande suivante

```
sudo -i scontrol create reservation ReservationName=maint_for_update user=root starttime=now duration=infinite flags=maint,ignore_jobs nodes=qeueu-st-computeresource-[9-10]
```

Cela créera une Slurm réservation nommée `maint_for_update` sur les nœuds`qeueu-st-computeresource-[9-10]`. À partir du moment où la réservation est créée, aucune autre tâche ne peut être exécutée sur les nœuds`qeueu-st-computeresource-[9-10]`. Sachez que la réservation n'empêchera pas l'attribution éventuelle de tâches sur les nœuds`qeueu-st-computeresource-[9-10]`.

Après la mise à jour du redimensionnement du cluster, si la Slurm réservation a été définie uniquement sur les nœuds supprimés lors de la mise à jour du redimensionnement, la réservation de maintenance sera automatiquement supprimée. Si vous avez plutôt créé une Slurm réservation sur les nœuds qui sont toujours présents après la mise à jour du redimensionnement du cluster, nous souhaiterons peut-être supprimer la réservation de maintenance sur les nœuds une fois la mise à jour du redimensionnement effectuée, à l'aide de la commande suivante 

```
sudo -i scontrol delete ReservationName=maint_for_update
```

[Pour plus de détails sur la Slurm réservation, consultez le document officiel de SchedMD ici.](https://slurm.schedmd.com/reservations.html)

## Processus de mise à jour du cluster en cas de modification de capacité
<a name="cluster-update-process"></a>

Lors d'un changement de configuration du planificateur, les étapes suivantes sont exécutées pendant le processus de mise à jour du cluster :
+ Arrêtez AWS ParallelCluster `clustermgtd (supervisorctl stop clustermgtd)`
+ Générer une configuration de Slurm partitions mise à jour depuis AWS ParallelCluster la configuration
+ Redémarrage `slurmctld` (effectué via la recette du service Chef)
+ Vérifier le `slurmctld` statut `(systemctl is-active --quiet slurmctld.service)`
+ Recharger la configuration Slurm `(scontrol reconfigure)`
+ Démarrage de `clustermgtd (supervisorctl start clustermgtd)`

Pour plus d’informations sur Slurm, consultez [https://slurm.schedmd.com](https://slurm.schedmd.com). Pour les téléchargements, voir [https://github.com/SchedMD/slurm/tags](https://github.com/SchedMD/slurm/tags). Pour le code source, voir [https://github.com/SchedMD/slurm](https://github.com/SchedMD/slurm).

## Versions de cluster et de SLURM prises en charge
<a name="cluster-slurm-version-table"></a>

Le tableau suivant répertorie les Slurm versions AWS ParallelCluster et prises en AWS charge.


| AWS ParallelCluster version (s) | Version Slurm prise en charge | 
| --- | --- | 
| 3,13,0 | 24/05/07 | 
| 3.12.0 | 23,1,110 | 
| 3.11.0 | 23,1,110 | 
| 3,9.2, 3,9.3, 3.10.0 | 23,11.7 | 
| 3.9.0, 3.9.1 | 23,11.4 | 
| 3.8.0 | 23,02,7 | 
| 3.7.2 | 23,02,6 | 
| 3.7.1 | 23,02,5 | 
| 3.7.0 | 23,02,4 | 
| 3.6.0, 3.6.1 | 23,02,2 | 
| 3.5.0, 3.5.1 | 22,05,8 | 
| 3.4.0, 3.4.1 | 22,05,7 | 
| 3.3.0, 3.3.1 | 22,05,5 | 
| 3.1.4, 3.1.5, 3.2.0, 3.2.1 | 21.08.8-2 | 
| 3.1.2, 3.1.3 | 21,08,6 | 
| 3.1.1 | 21,08,5 | 
| 3.0.0 | 20,11,8 | 

**Topics**
+ [Taille et mise à jour de la capacité du cluster](#cluster-capacity-size-and-update)
+ [Mise à jour des capacités du cluster](#cluster-capacity-update)
+ [Considérations et restrictions](#considerations-limitations)
+ [Impacts sur les emplois](#impacts-on-jobs)
+ [Processus de mise à jour du cluster en cas de modification de capacité](#cluster-update-process)
+ [Versions de cluster et de SLURM prises en charge](#cluster-slurm-version-table)
+ [Configuration de plusieurs files d'attente](configuration-of-multiple-queues-v3.md)
+ [Slurmguide pour le mode de file d'attente multiple](multiple-queue-mode-slurm-user-guide-v3.md)
+ [Slurm mode protégé par cluster](slurm-protected-mode-v3.md)
+ [Slurmbasculement rapide d'une capacité insuffisante du cluster](slurm-short-capacity-fail-mode-v3.md)
+ [Slurm planification basée sur la mémoire](slurm-mem-based-scheduling-v3.md)
+ [Allocation de plusieurs types d'instances avec Slurm](slurm-multiple-instance-allocation-v3.md)
+ [Mise à l'échelle du cluster pour les nœuds dynamiques](scheduler-node-allocation-v3.md)
+ [Slurmcomptabilité avec AWS ParallelCluster](slurm-accounting-v3.md)
+ [Slurm personnalisation de la configuration](slurm-configuration-settings-v3.md)
+ [Slurm et `prolog` `epilog`](slurm-prolog-epilog-v3.md)
+ [Taille et mise à jour de la capacité du cluster](slurm-cluster-capacity-size-and-update.md)