

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

## Tamaño y actualización de la capacidad del clúster
<a name="cluster-capacity-size-and-update"></a>

La capacidad del clúster se define por la cantidad de nodos de computación que es capaz de escalar. Los nodos de cómputo están respaldados por instancias de Amazon EC2 definidas dentro de los recursos de cómputo de la AWS ParallelCluster configuración `(Scheduling/SlurmQueues/`ComputeResources`)` y están organizados en colas `(Scheduling/SlurmQueues)` que se asignan 1:1 a las particiones. Slurm 

Dentro de un recurso de cómputo, es posible configurar el número mínimo de nodos de cómputo (instancias) que deben mantenerse siempre en ejecución en el clúster (`MinCount`) y el número máximo de instancias al que el recurso de cómputo puede escalar ([`MaxCount`3](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount)).

En el momento de la creación del clúster, o tras una actualización del clúster, AWS ParallelCluster lanza tantas instancias de Amazon EC2 como estén configuradas `MinCount` para cada recurso informático (`Scheduling/SlurmQueues/ ComputeResources`) definido en el clúster. Las instancias lanzadas para cubrir la cantidad mínima de nodos de un recurso de computación del clúster se denominan ***nodos estáticos***. Una vez iniciados, los nodos estáticos deben permanecer en el clúster y el sistema no los termina a menos que se produzca un evento o una condición en particular. Estos eventos incluyen, por ejemplo, el fallo de las comprobaciones de estado de Slurm o Amazon EC2 y el cambio del estado del nodo de Slurm a DRAIN (vaciado) o DOWN (inactivo). 

Las instancias de Amazon EC2, en el rango de `1` a `‘MaxCount - MinCount’` (`MaxCount ` *menos* ` MinCount)`, publicadas bajo demanda para hacer frente al aumento de carga del clúster, se denominan ***nodos dinámicos***. Su naturaleza es efímera: se lanzan para atender trabajos pendientes y se finalizan una vez que permanecen inactivas durante un período de tiempo definido por `Scheduling/SlurmSettings/ScaledownIdletime` en la configuración del clúster (predeterminado: 10 minutos).

Los nodos estáticos y los nodos dinámicos cumplen con el siguiente esquema de nomenclatura:
+ Nodos estáticos `<Queue/Name>-st-<ComputeResource/Name>-<num>`, en los que `<num> = 1..ComputeResource/MinCount`
+ Nodos dinámicos `<Queue/Name>-dy-<ComputeResource/Name>-<num>`, donde `<num> = 1..(ComputeResource/MaxCount - ComputeResource/MinCount)`

Por ejemplo, dada la siguiente AWS ParallelCluster configuración: 

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

Los siguientes nodos se definirán en 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]
```

Cuando un recurso de cómputo lo tenga`MinCount == MaxCount`, todos los nodos de cómputo correspondientes serán estáticos y todas las instancias se lanzarán en el creation/update momento del clúster y se mantendrán en funcionamiento. Por ejemplo: 

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

## Actualización de la capacidad del clúster
<a name="cluster-capacity-update"></a>

La actualización de la capacidad del clúster incluye añadir o eliminar colas, recursos de computación o cambiar el parámetro `MinCount/MaxCount` de un recurso de computación. A partir de la AWS ParallelCluster versión 3.9.0, para reducir el tamaño de una cola es necesario detener la flota de cómputo o [QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)configurarla en TERMINATE antes de que se lleve a cabo la actualización del clúster. No es necesario detener la flota de cómputo ni configurarla en TERMINATE [QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)cuando: 
+ Adición de nuevas colas en Programación/[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)

   
+ Adición de nuevos recursos de computación `Scheduling/SlurmQueues/ComputeResources` a una cola
+ Aumento de `MaxCount` de un recurso de computación
+ Aumento MinCount de un recurso informático y aumento MaxCount del mismo recurso informático en al menos la misma cantidad

## Consideraciones y limitaciones
<a name="considerations-limitations"></a>

El objetivo de esta sección es explicar los factores, restricciones o limitaciones importantes que se deben tener en cuenta al cambiar el tamaño de la capacidad del clúster.
+ Al eliminar una cola de `Scheduling/SlurmQueues`, todos los nodos de computación con el nombre `<Queue/Name>-*`, tanto estáticos como dinámicos, se eliminarán de la configuración de Slurm y finalizarán las instancias de Amazon EC2 correspondientes.
+ Al eliminar un recurso de computación de `Scheduling/SlurmQueues/ComputeResources` de una cola, todos los nodos de computación con el nombre `<Queue/Name>-*-<ComputeResource/Name>-*`, tanto estáticos como dinámicos, se eliminarán de la configuración de Slurm y finalizarán las instancias de Amazon EC2 correspondientes.

Al cambiar el parámetro `MinCount` de un recurso de computación, podemos distinguir dos escenarios diferentes: si `MaxCount` es igual que `MinCount` (solo capacidad estática) y si `MaxCount` es mayor que `MinCount` (capacidad estática y dinámica mixta).

### Cambios en la capacidad solo con los nodos estáticos
<a name="capacity-changes-static-only"></a>
+ Si `MinCount == MaxCount`, al aumentar la `MinCount` (y la `MaxCount`), el clúster se configurará ampliando el número de nodos estáticos hasta el nuevo valor de `MinCount` `<Queue/Name>-st-<ComputeResource/Name>-<new_MinCount>` y el sistema seguirá intentando lanzar instancias de Amazon EC2 para cumplir con la nueva capacidad estática requerida.
+ Si `MinCount == MaxCount`, al disminuir la `MinCount` (y el `MaxCount`) de la cantidad N, el clúster se configurará eliminando los últimos N nodos estáticos `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<old_MinCount>]` y el sistema finalizará las instancias de Amazon EC2 correspondientes.
  + Estado inicial `MinCount = MaxCount = 100`
  + 

    ```
    $ sinfo
    PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
    queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
    ```
  + Actualización de `-30` en `MinCount` y `MaxCount: MinCount = MaxCount = 70`
  + 

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

### Cambios en la capacidad con nodos mixtos
<a name="capacity-changes-mixed-nodes"></a>

Si `MinCount < MaxCount`, al aumentar la `MinCount` de una cantidad N (suponiendo que `MaxCount` se mantenga sin cambios), el clúster se configurará ampliando el número de nodos estáticos hasta el nuevo valor de `MinCount` (`old_MinCount + N`): `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>` y el sistema seguirá intentando lanzar instancias de Amazon EC2 para cumplir con la nueva capacidad estática requerida. Además, para respetar la capacidad de `MaxCount` del recurso de computación, la configuración del clúster se actualiza *eliminando los últimos N nodos dinámicos*: `<Queue/Name>-dy-<ComputeResource/Name>-[<MaxCount - old_MinCount - N>...<MaxCount - old_MinCount>]` y el sistema finalizará las instancias de Amazon EC2 correspondientes.
+ Estado inicial: `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]
  ```
+ Actualice a \+30 en `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`, al aumentar la `MinCount` y la `MaxCount` de la misma cantidad N, el clúster se configurará ampliando el número de nodos estáticos hasta el nuevo valor de `MinCount` (`old_MinCount + N`): `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>` y el sistema seguirá intentando lanzar instancias de Amazon EC2 para cumplir con la nueva capacidad estática requerida. Además, no se realizará ningún cambio en el número de nodos dinámicos para adaptarlo al nuevo

 valor de `MaxCount`.
+ Estado inicial: `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]
  ```
+ Actualice a \+30 en `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`, al disminuir la `MinCount` de la cantidad N (suponiendo que `MaxCount` se mantenga sin cambios), el clúster se configurará eliminando los últimos N nodos estáticos `<Queue/Name>-st-<ComputeResource/Name>-[<old_MinCount - N>...<old_MinCount>` y el sistema finalizará las instancias de Amazon EC2 correspondientes. Además, para respetar la capacidad `MaxCount` del recurso de computación, la configuración del clúster se actualiza ampliando el número de nodos dinámicos para cubrir el vacío `MaxCount - new_MinCount: <Queue/Name>-dy-<ComputeResource/Name>-[1..<MazCount - new_MinCount>]`. En este caso, dado que se trata de nodos dinámicos, no se lanzará ninguna nueva instancia de Amazon EC2 a menos que el programador tenga trabajos pendientes en los nuevos nodos.
+ Estado inicial: `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]
  ```
+ Actualización de -30 en `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`, al disminuir la `MinCount` y la `MaxCount` de la misma cantidad N, el clúster se configurará eliminando los últimos N nodos estáticos `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<oldMinCount>]` y el sistema finalizará las instancias de Amazon EC2 correspondientes.

 Además, no se realizará ningún cambio en el número de nodos dinámicos para adaptarlo al nuevo valor de `MaxCount`.
+ Estado inicial: `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]
  ```
+ Actualización de -30 en `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`, al disminuir la `MaxCount` de la cantidad N (suponiendo que `MinCount` se mantenga sin cambios), el clúster se configurará eliminando los últimos N nodos dinámicos`<Queue/Name>-dy-<ComputeResource/Name>-<old_MaxCount - N...<oldMaxCount>]` y el sistema finalizará las instancias de Amazon EC2 correspondientes si se estuviesen ejecutando. No habrá ningún impacto en los nodos estáticos.
+ Estado inicial: `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]
  ```
+ Actualización de -30 en `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]
  ```

## Impactos en los trabajos
<a name="impacts-on-jobs"></a>

En todos los casos en los que se eliminen nodos y se finalicen instancias de Amazon EC2, si había un trabajo sbatch en los nodos eliminados se volverá a poner en cola, a menos que no haya otros nodos que cumplan con los requisitos del trabajo. En este último caso, el trabajo falla con el estado NODE\_FAIL y desaparece de la cola, por lo que debe volver a enviarse manualmente.

Si planea realizar una actualización de tamaño del clúster, puede impedir que los trabajos se ejecuten en nodos que se vayan a eliminar durante la actualización planificada. Esto se puede hacer configurando los nodos que se eliminarán durante el mantenimiento. Tenga en cuenta que poner un nodo en mantenimiento no afectaría a los trabajos que se estuviesen ejecutando en ese momento en el nodo.

Supongamos que con la actualización planificada para cambiar el tamaño del clúster se va a eliminar el nodo`qeueu-st-computeresource-[9-10`]. Puede crear una reserva de Slurm con el siguiente 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]
```

Esto creará una reserva de Slurm con el nombre `maint_for_update` en los nodos `qeueu-st-computeresource-[9-10]`. Desde el momento en que se crea la reserva, no se pueden ejecutar más trabajos en los nodos `qeueu-st-computeresource-[9-10]`. Tenga en cuenta que la reserva no impedirá que haya trabajos que acaben asignándose a los nodos `qeueu-st-computeresource-[9-10]`.

Tras actualizar el tamaño del clúster, si la reserva de Slurm se estableció solo en los nodos que se eliminaron durante la actualización del cambio de tamaño, se eliminará automáticamente. Si, por el contrario, ha creado una reserva de Slurm en nodos que siguen presentes tras la actualización del cambio de tamaño del clúster, es posible que quiera eliminar dicha reserva de mantenimiento de los nodos tras la actualización de tamaño mediante el siguiente comando 

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

Para obtener más información sobre la reserva de Slurm, consulte el documento oficial de SchedMD [aquí](https://slurm.schedmd.com/reservations.html).

## Proceso de actualización de un clúster con cambios de capacidad
<a name="cluster-update-process"></a>

Tras un cambio en la configuración del programador, se ejecutan los siguientes pasos durante el proceso de actualización del clúster:
+ ¡Deténgase AWS ParallelCluster `clustermgtd (supervisorctl stop clustermgtd)`
+ Se genera una configuración de particiones de Slurm actualizada a partir de la configuración de AWS ParallelCluster 
+ Se reinicia `slurmctld` (mediante la receta del servicio Chef)
+ Se comprueba el estado de `slurmctld` `(systemctl is-active --quiet slurmctld.service)`
+ Se recarga la configuración de Slurm `(scontrol reconfigure)`
+ Se inicia `clustermgtd (supervisorctl start clustermgtd)`

Para obtener más información sobre Slurm, consulte [https://slurm.schedmd.com](https://slurm.schedmd.com). Para ver las descargas, consulta [https://github.com/SchedMD/slurm/tags](https://github.com/SchedMD/slurm/tags). [Para ver el código fuente, consulte slurm. https://github.com/SchedMD/](https://github.com/SchedMD/slurm)

## Versiones de clúster y SLURM compatibles
<a name="cluster-slurm-version-table"></a>

En la siguiente tabla se enumeran las versiones compatibles AWS ParallelCluster y Slurm las versiones compatibles AWS .


| AWS ParallelCluster versión (es) | Versión de Slurm compatible | 
| --- | --- | 
| 3.13.0 | 24,05,07 | 
| 3.12.0 | 23,11,10 | 
| 3.11.0 | 23,11,10 | 
| 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**
+ [Tamaño y actualización de la capacidad del clúster](#cluster-capacity-size-and-update)
+ [Actualización de la capacidad del clúster](#cluster-capacity-update)
+ [Consideraciones y limitaciones](#considerations-limitations)
+ [Impactos en los trabajos](#impacts-on-jobs)
+ [Proceso de actualización de un clúster con cambios de capacidad](#cluster-update-process)
+ [Versiones de clúster y SLURM compatibles](#cluster-slurm-version-table)
+ [Configuración de varias colas](configuration-of-multiple-queues-v3.md)
+ [Guía de Slurm para el modo de cola múltiple](multiple-queue-mode-slurm-user-guide-v3.md)
+ [Slurm modo protegido de clúster](slurm-protected-mode-v3.md)
+ [Conmutación por error rápida de capacidad insuficiente en el clúster de Slurm](slurm-short-capacity-fail-mode-v3.md)
+ [Slurm programación basada en memoria](slurm-mem-based-scheduling-v3.md)
+ [Asignación de varios tipos de instancias con Slurm](slurm-multiple-instance-allocation-v3.md)
+ [Escalado de clústeres para nodos dinámicos](scheduler-node-allocation-v3.md)
+ [Slurmcontabilidad con AWS ParallelCluster](slurm-accounting-v3.md)
+ [Slurm personalización de la configuración](slurm-configuration-settings-v3.md)
+ [Slurm y `prolog``epilog`](slurm-prolog-epilog-v3.md)
+ [Tamaño y actualización de la capacidad del clúster](slurm-cluster-capacity-size-and-update.md)