

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Dimensioni e aggiornamento della capacità del cluster
<a name="slurm-cluster-capacity-size-and-update"></a>

La capacità del cluster è definita dal numero di nodi di calcolo scalabili dal cluster. I nodi di calcolo sono supportati da EC2 istanze Amazon definite all'interno delle risorse di elaborazione nella AWS ParallelCluster configurazione `(Scheduling/SlurmQueues/ ComputeResources)` e sono organizzati in code `(Scheduling/SlurmQueues)` con mappatura 1:1 a Slurm partizioni. 

[All'interno di una risorsa di calcolo è possibile configurare il numero minimo di nodi di calcolo (istanze) che devono essere sempre mantenuti in esecuzione nel cluster (`MinCount`) e il numero massimo di istanze che la risorsa di calcolo può scalare fino a (3). `MaxCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount)

Al momento della creazione del cluster o dopo un aggiornamento del cluster, AWS ParallelCluster avvia tutte le EC2 istanze Amazon configurate `MinCount` per ogni risorsa di calcolo (`Scheduling/SlurmQueues/ ComputeResources`) definita nel cluster. ***Le istanze avviate per coprire il numero minimo di nodi per le risorse di calcolo nel cluster sono chiamate nodi statici.*** Una volta avviati, i nodi statici sono pensati per essere persistenti nel cluster e non vengono terminati dal sistema, a meno che non si verifichi un evento o una condizione particolare. Tali eventi includono, ad esempio, il fallimento di Slurm o i controlli EC2 sanitari di Amazon e la modifica del Slurm stato del nodo su DRAIN o DOWN. 

***Le EC2 istanze Amazon, nell'intervallo da 0 `1` a `‘MaxCount - MinCount’` (`MaxCount `*meno*)` MinCount)`, lanciate su richiesta per gestire l'aumento del carico del cluster, vengono chiamate nodi dinamici.*** La loro natura è effimera, vengono avviate per eseguire lavori in sospeso e vengono terminate quando rimangono inattive per un periodo di tempo definito `Scheduling/SlurmSettings/ScaledownIdletime` nella configurazione del cluster (impostazione predefinita: 10 minuti).

I nodi statici e i nodi dinamici sono conformi al seguente schema di denominazione:
+ Nodi statici dove `<Queue/Name>-st-<ComputeResource/Name>-<num>` `<num> = 1..ComputeResource/MinCount`
+ Nodi dinamici `<Queue/Name>-dy-<ComputeResource/Name>-<num>` dove `<num> = 1..(ComputeResource/MaxCount - ComputeResource/MinCount)`

Ad esempio, data la seguente AWS ParallelCluster configurazione: 

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

I seguenti nodi verranno definiti in 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]
```

Quando una risorsa di elaborazione lo ha`MinCount == MaxCount`, tutti i nodi di calcolo corrispondenti saranno statici e tutte le istanze verranno avviate al momento della creazione/aggiornamento del cluster e mantenute attive e funzionanti. Per esempio: 

```
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]
```

## Aggiornamento della capacità del cluster
<a name="cluster-capacity-update-c2"></a>

L'aggiornamento della capacità del cluster include l'aggiunta o la rimozione di code, risorse di elaborazione o la modifica `MinCount/MaxCount` di una risorsa di elaborazione. A partire dalla AWS ParallelCluster versione 3.9.0, la riduzione delle dimensioni di una coda richiede che il parco di elaborazione venga interrotto o [QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)impostato su TERMINATE prima dell'aggiornamento del cluster. Non è necessario interrompere la flotta di elaborazione o impostare su TERMINATE quando: [QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 
+ Aggiungere nuove code a Scheduling/ [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)

   
+ Aggiungere nuove risorse di calcolo a una coda `Scheduling/SlurmQueues/ComputeResources`
+ Aumento della potenza `MaxCount` di una risorsa di elaborazione
+ Aumento MinCount di una risorsa di elaborazione e aumento MaxCount della stessa risorsa di elaborazione almeno della stessa quantità

## Considerazioni e limitazioni
<a name="cluster-considerations-limitations"></a>

Questa sezione ha lo scopo di delineare eventuali fattori, vincoli o limitazioni importanti da tenere in considerazione durante il ridimensionamento della capacità del cluster.
+ Quando si rimuove una coda da `Scheduling/SlurmQueues` tutti i nodi di elaborazione con nome`<Queue/Name>-*`, sia statici che dinamici, verrà rimossa dal Slurm la configurazione e le EC2 istanze Amazon corrispondenti verranno terminate.
+ Quando si rimuove una risorsa di calcolo `Scheduling/SlurmQueues/ComputeResources` da una coda, tutti i nodi di calcolo con nome`<Queue/Name>-*-<ComputeResource/Name>-*`, sia statici che dinamici, verranno rimossi dalla Slurm la configurazione e le EC2 istanze Amazon corrispondenti verranno terminate.

Quando si modifica il `MinCount` parametro di una risorsa di calcolo, possiamo distinguere due diversi scenari, se `MaxCount` viene mantenuto uguale a `MinCount` (solo capacità statica) e se `MaxCount` è maggiore di `MinCount` (capacità statica e dinamica mista).

### La capacità cambia solo con nodi statici
<a name="capacity-changes-static-nodes"></a>
+ Se`MinCount == MaxCount`, aumentando `MinCount` (e`MaxCount`), il cluster verrà configurato estendendo il numero di nodi statici al nuovo valore di `MinCount` `<Queue/Name>-st-<ComputeResource/Name>-<new_MinCount>` e il sistema continuerà a provare ad avviare EC2 istanze Amazon per soddisfare la nuova capacità statica richiesta.
+ Se`MinCount == MaxCount`, diminuendo `MinCount` (e`MaxCount`) la quantità N, il cluster verrà configurato rimuovendo gli ultimi N nodi statici `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<old_MinCount>]` e il sistema interromperà le istanze Amazon EC2 corrispondenti.
  + Stato iniziale `MinCount = MaxCount = 100`
  + 

    ```
    $ sinfo
    PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
    queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
    ```
  + Aggiornamento `-30` su `MinCount` e `MaxCount: MinCount = MaxCount = 70`
  + 

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

### Modifiche di capacità con nodi misti
<a name="mixed-node-capacity-changes"></a>

Se`MinCount < MaxCount`, aumentando `MinCount` di una quantità N (supponendo che `MaxCount` venga mantenuto invariato), il cluster verrà configurato estendendo il numero di nodi statici al nuovo valore di `MinCount` (`old_MinCount + N`): `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>` e il sistema continuerà a provare ad avviare EC2 istanze Amazon per soddisfare la nuova capacità statica richiesta. Inoltre, per rispettare la `MaxCount` capacità della risorsa di calcolo, la configurazione del cluster viene aggiornata *rimuovendo gli ultimi N nodi dinamici*: `<Queue/Name>-dy-<ComputeResource/Name>-[<MaxCount - old_MinCount - N>...<MaxCount - old_MinCount>]` e il sistema interromperà le istanze Amazon EC2 corrispondenti.
+ Stato iniziale: `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]
  ```
+ Aggiorna \+30 a `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]
  ```

Se`MinCount < MaxCount`, aumentando `MinCount` e `MaxCount` della stessa quantità N, il cluster verrà configurato estendendo il numero di nodi statici al nuovo valore di `MinCount` (`old_MinCount + N`): `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>` e il sistema continuerà a provare ad avviare EC2 istanze Amazon per soddisfare la nuova capacità statica richiesta. Inoltre, non verrà apportata alcuna modifica al numero di nodi dinamici per rispettare il nuovo

 `MaxCount` value.
+ Stato iniziale: `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]
  ```
+ Aggiorna \+30 a `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]
  ```

Se`MinCount < MaxCount`, diminuendo la `MinCount` quantità N (supponendo che `MaxCount` venga mantenuta invariata), il cluster verrà configurato rimuovendo gli ultimi N nodi statici dei nodi statici `<Queue/Name>-st-<ComputeResource/Name>-[<old_MinCount - N>...<old_MinCount>` e il sistema chiuderà le istanze Amazon corrispondenti. EC2 Inoltre, per rispettare la `MaxCount` capacità della risorsa di elaborazione, la configurazione del cluster viene aggiornata estendendo il numero di nodi dinamici per colmare il divario. `MaxCount - new_MinCount: <Queue/Name>-dy-<ComputeResource/Name>-[1..<MazCount - new_MinCount>]` In questo caso, trattandosi di nodi dinamici, non verranno lanciate nuove EC2 istanze Amazon a meno che lo scheduler non abbia lavori in sospeso sui nuovi nodi.
+ Stato iniziale: `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]
  ```
+ Aggiornamento -30 su `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]
  ```

Se`MinCount < MaxCount`, in diminuzione `MinCount` e `MaxCount` della stessa quantità N, il cluster verrà configurato rimuovendo gli ultimi N nodi statici `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<oldMinCount>]` e il sistema interromperà le istanze Amazon EC2 corrispondenti.

 Inoltre, non verrà apportata alcuna modifica al numero di nodi dinamici per rispettare il nuovo valore. `MaxCount`
+ Stato iniziale: `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]
  ```
+ Aggiornamento -30 su `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]
  ```

Se`MinCount < MaxCount`, diminuendo la `MaxCount` quantità N (supponendo che `MinCount` venga mantenuta invariata), il cluster verrà configurato rimuovendo gli ultimi N nodi dinamici `<Queue/Name>-dy-<ComputeResource/Name>-<old_MaxCount - N...<oldMaxCount>]` e il sistema interromperà le EC2 istanze Amazon corrispondenti nel caso in cui fossero in esecuzione. Non è previsto alcun impatto sui nodi statici.
+ Stato iniziale: `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]
  ```
+ Aggiornamento -30 su `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]
  ```

## Impatti sui lavori
<a name="job-impacts"></a>

In tutti i casi in cui i nodi vengono rimossi e EC2 le istanze Amazon terminate, un job sbatch in esecuzione sui nodi rimossi verrà messo nuovamente in coda, a meno che non vi siano altri nodi che soddisfino i requisiti del processo. In quest'ultimo caso, il job fallisce con lo stato NODE\_FAIL e scompare dalla coda e deve essere inviato nuovamente manualmente.

Se si prevede di eseguire un aggiornamento per il ridimensionamento del cluster, è possibile impedire l'esecuzione dei lavori nei nodi che verranno rimossi durante l'aggiornamento pianificato. Ciò è possibile impostando i nodi da rimuovere durante la manutenzione. Tieni presente che l'impostazione di un nodo in manutenzione non influirebbe sui lavori che alla fine sono già in esecuzione nel nodo.

Supponiamo che con l'aggiornamento pianificato per il ridimensionamento del cluster si voglia rimuovere il nodo`qeueu-st-computeresource-[9-10`]. È possibile creare un Slurm prenotazione con il seguente comando

```
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]
```

Questo creerà un Slurm prenotazione denominata `maint_for_update` sui nodi`qeueu-st-computeresource-[9-10]`. Dal momento in cui viene creata la prenotazione, non è possibile eseguire altri lavori nei nodi`qeueu-st-computeresource-[9-10]`. Tieni presente che la prenotazione non impedirà l'assegnazione finale dei lavori sui nodi`qeueu-st-computeresource-[9-10]`.

Dopo l'aggiornamento del ridimensionamento del cluster, se Slurm la prenotazione è stata impostata solo sui nodi che sono stati rimossi durante l'aggiornamento di ridimensionamento, la prenotazione di manutenzione verrà eliminata automaticamente. Se invece avessi creato un Slurm prenotazione sui nodi che sono ancora presenti dopo l'aggiornamento del ridimensionamento del cluster, potremmo voler rimuovere la prenotazione di manutenzione sui nodi dopo aver eseguito l'aggiornamento di ridimensionamento, utilizzando il seguente comando 

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

Per ulteriori dettagli su Slurm per prenotare, consulta il documento ufficiale di SchedMD [qui](https://slurm.schedmd.com/reservations.html).

## Processo di aggiornamento del cluster in caso di modifiche alla capacità
<a name="changes-per-process"></a>

In caso di modifica della configurazione dello scheduler, durante il processo di aggiornamento del cluster vengono eseguiti i seguenti passaggi:
+ Interrompi AWS ParallelCluster `clustermgtd (supervisorctl stop clustermgtd)`
+ Genera aggiornamenti Slurm configurazione delle partizioni dalla AWS ParallelCluster configurazione
+ Riavvio `slurmctld` (eseguito tramite la ricetta del servizio Chef)
+ Controlla `slurmctld` lo stato `(systemctl is-active --quiet slurmctld.service)`
+ Reload (Carica di nuovo) Slurm configurazione `(scontrol reconfigure)`
+ Avvia `clustermgtd (supervisorctl start clustermgtd)`