

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.

# Tutorial sobre el modo de cola múltiple
<a name="tutorial-mqm"></a>



## Ejecutar sus trabajos AWS ParallelCluster con el modo de cola múltiple
<a name="tutorial-mqm-running-jobs"></a>

Este tutorial te muestra cómo ejecutar tu primer trabajo AWS ParallelCluster con [Modo de Cola múltiple](queue-mode.md) Hello World.

**Requisitos previos**
+ AWS ParallelCluster [está instalado](install.md).
+  AWS CLI [está instalado y configurado.](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ Tienes un [EC2 key pair](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html).
+ Tiene un rol de IAM con los [permisos](iam.md#example-parallelcluser-policies) necesarios para ejecutar el CLI [`pcluster`](pcluster.md).

**nota**  
El modo de cola múltiple solo es compatible con la AWS ParallelCluster versión 2.9.0 o posterior.

### Configuración de su clúster
<a name="tutorial-mqm-configure-cluster"></a>

En primer lugar, compruebe que AWS ParallelCluster está correctamente instalado ejecutando el siguiente comando.

```
$ pcluster version
```

Para obtener más información acerca de `pcluster version`, consulte [`pcluster version`](pcluster.version.md).

Este comando devuelve la versión en ejecución de AWS ParallelCluster.

A continuación, ejecute `pcluster configure` para generar un archivo de configuración básico. Siga todas las instrucciones que aparecen después de este comando.

```
$ pcluster configure
```

Para obtener más información acerca del comando `pcluster configure`, consulte [`pcluster configure`](pcluster.configure.md).

Cuando realice este paso, tendrá un archivo de configuración básica en el `~/.parallelcluster/config`. Este archivo debe contener una sección de configuraciones de clúster básicas y una sección de VPC.

La siguiente parte del tutorial describe cómo modificar la configuración recién creada y lanzar un clúster con varias colas.

**nota**  
Algunas instancias utilizadas en este tutorial no son aptas para el nivel gratuito.

Para este tutorial, use la siguiente configuración.

```
[global]
update_check = true
sanity_check = true
cluster_template = multi-queue

[aws]
aws_region_name = <Your Región de AWS>

[scaling demo]
scaledown_idletime = 5              # optional, defaults to 10 minutes

[cluster multi-queue-special]
key_name = < Your key name >
base_os = alinux2                   # optional, defaults to alinux2
scheduler = slurm
master_instance_type = c5.xlarge    # optional, defaults to t2.micro
vpc_settings = <Your VPC section>
scaling_settings = demo             # optional, defaults to no custom scaling settings
queue_settings = efa,gpu

[cluster multi-queue]
key_name = <Your SSH key name>
base_os = alinux2                   # optional, defaults to alinux2
scheduler = slurm
master_instance_type = c5.xlarge    # optional, defaults to t2.micro
vpc_settings = <Your VPC section>
scaling_settings = demo
queue_settings = spot,ondemand

[queue spot]
compute_resource_settings = spot_i1,spot_i2
compute_type = spot                 # optional, defaults to ondemand

[compute_resource spot_i1]
instance_type = c5.xlarge
min_count = 0                       # optional, defaults to 0
max_count = 10                      # optional, defaults to 10

[compute_resource spot_i2]
instance_type = t2.micro
min_count = 1
initial_count = 2

[queue ondemand]
compute_resource_settings = ondemand_i1
disable_hyperthreading = true       # optional, defaults to false

[compute_resource ondemand_i1]
instance_type = c5.2xlarge
```

### Creación de su clúster
<a name="tutorial-mqm-creating-cluster"></a>

En esta sección se detalla cómo crear el clúster en modo de cola múltiple.

En primer lugar, asigne un nombre al clúster `multi-queue-hello-world` y créelo de acuerdo con la sección de `multi-queue` clúster definida en la sección anterior.

```
$ pcluster create multi-queue-hello-world -t multi-queue
```

Para obtener más información acerca de `pcluster create`, consulte [`pcluster create`](pluster.create.md).

Cuando se crea el clúster, se muestra el siguiente resultado:

```
Beginning cluster creation for cluster: multi-queue-hello-world
Creating stack named: parallelcluster-multi-queue-hello-world
Status: parallelcluster-multi-queue-hello-world - CREATE_COMPLETE
MasterPublicIP: 3.130.xxx.xx
ClusterUser: ec2-user
MasterPrivateIP: 172.31.xx.xx
```

El mensaje `CREATE_COMPLETE` muestra que el clúster se ha creado correctamente. El resultado también nos proporciona las direcciones IP públicas y privadas del nodo principal.

### Inicio de sesión en su nodo principal
<a name="tutorial-mqm-log-into-head-node"></a>

Use su archivo de clave SSH privado para iniciar sesión en tu nodo principal.

```
$ pcluster ssh multi-queue-hello-world -i ~/path/to/keyfile.pem
```

Para obtener más información acerca de `pcluster ssh`, consulte [`pcluster ssh`](pcluster.ssh.md).

Después de iniciar sesión, ejecute el comando `sinfo` para comprobar que sus colas de programador se instalan y configuran.

Para obtener más información al respecto`sinfo`, consulte [sinfo](https://slurm.schedmd.com/sinfo.html) en la *Slurm documentación. *

```
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
ondemand     up   infinite     10  idle~ ondemand-dy-c52xlarge-[1-10]
spot*        up   infinite     18  idle~ spot-dy-c5xlarge-[1-10],spot-dy-t2micro-[2-9]
spot*        up   infinite      2   idle spot-dy-t2micro-1,spot-st-t2micro-1
```

El resultado muestra que tiene dos nodos de `t2.micro` cómputo en ese `idle` estado que están disponibles en su clúster.

**nota**  
`spot-st-t2micro-1`es un nodo estático que `st` lleva su nombre. Este nodo está siempre disponible y corresponde a ``min_count` = 1` la configuración de su clúster.
`spot-dy-t2micro-1`es un nodo dinámico que `dy` lleva su nombre. Este nodo está disponible actualmente porque corresponde a ``initial_count` - `min_count` = 1` la configuración de su clúster. Este nodo se reduce verticalmente después de su [`scaledown_idletime`](scaling-section.md#scaledown-idletime) personalizado de cinco minutos.

Todos los demás nodos están en estado de ahorro de energía, lo que se muestra con el `~` sufijo en el estado de nodo, sin EC2 instancias que los respalden. La cola predeterminada se designa con un `*` sufijo después del nombre de la cola, al igual que `spot` la cola de trabajos predeterminada.

### Ejecutar el trabajo en modo de cola múltiple
<a name="tutorial-mqm-running-job-mqm"></a>

A continuación, intente ejecutar un trabajo para dormir un rato. Más adelante, el trabajo generará su propio nombre de servidor. Asegúrese de que el usuario actual pueda ejecutar este script.

```
$ cat hellojob.sh
#!/bin/bash
sleep 30
echo "Hello World from $(hostname)"

$ chmod +x hellojob.sh
$ ls -l hellojob.sh
-rwxrwxr-x 1 ec2-user ec2-user 57 Sep 23 21:57 hellojob.sh
```

Envíe el trabajo mediante el comando `sbatch`. Solicite dos nodos para este trabajo con la `-N 2` opción y compruebe que el trabajo se envía correctamente. Para obtener más información acerca de `sbatch`, consulte [.sbatch](https://slurm.schedmd.com/sbatch.html)en la documentación de *Slurm*.

```
$ sbatch -N 2 --wrap "srun hellojob.sh"
Submitted batch job 2
```

Ahora puede ver la cola y comprobar el estado del trabajo con el comando `squeue`. Tenga en cuenta que, dado que no especificó una cola específica, se utiliza la cola predeterminada (`spot`). Para obtener más información acerca de `squeue`, consulte [.squeue](https://slurm.schedmd.com/squeue.html) en la *Slurmdocumentación. *

```
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                 2      spot     wrap ec2-user  R       0:10      2 spot-dy-t2micro-1,spot-st-t2micro-1
```

El resultado muestra que el trabajo se encuentra actualmente en estado de ejecución. Espere 30 segundos a que el trabajo se termine y, a continuación, vuelva a ejecutar `squeue`.

```
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
```

Ahora que todos los trabajos de la cola han terminado, busque el archivo de salida `slurm-2.out` en su directorio actual.

```
$ cat slurm-2.out
Hello World from spot-dy-t2micro-1
Hello World from spot-st-t2micro-1
```

El resultado también muestra que nuestro trabajo se ha ejecutado correctamente en los nodos `spot-st-t2micro-1` y `spot-st-t2micro-2`.

Ahora envíe el mismo trabajo especificando las restricciones para instancias específicas con los siguientes comandos.

```
$ sbatch -N 3 -p spot -C "[c5.xlarge*1&t2.micro*2]" --wrap "srun hellojob.sh"
Submitted batch job 3
```

Ha utilizado estos parámetros para`sbatch`.
+ `-N 3`— solicita tres nodos
+ `-p spot`— envía el trabajo a la cola `spot`. También puede enviar un trabajo a la cola `ondemand` especificando `-p ondemand`.
+ `-C "[c5.xlarge*1&t2.micro*2]"`— especifica las restricciones de nodo específicas para este trabajo. Esto requiere que se utilicen un (1) `c5.xlarge` nodo y dos (2) `t2.micro` nodos para este trabajo.

Ejecute el `sinfo` comando para ver los nodos y las colas. (Las colas de entrada AWS ParallelCluster se denominan particiones en Slurm.)

```
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
ondemand     up   infinite     10  idle~ ondemand-dy-c52xlarge-[1-10]
spot*        up   infinite      1   mix# spot-dy-c5xlarge-1
spot*        up   infinite     17  idle~ spot-dy-c5xlarge-[2-10],spot-dy-t2micro-[2-9]
spot*        up   infinite      2  alloc spot-dy-t2micro-1,spot-st-t2micro-1
```

Los nodos se están encendiendo. Esto se indica con el `#` sufijo del estado del nodo. Ejecute el squeue comando para ver información sobre los trabajos del clúster.

```
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                 3      spot     wrap ec2-user CF       0:04      3 spot-dy-c5xlarge-1,spot-dy-t2micro-1,spot-st-t2micro-1
```

Su trabajo está en el `CF` (CONFIGURING), esperando a que las instancias se amplíen y se unan al clúster.

Transcurridos unos tres minutos, los nodos deberían estar disponibles y el trabajo entrará en el `R` (RUNNING) estado.

```
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
ondemand     up   infinite     10  idle~ ondemand-dy-c52xlarge-[1-10]
spot*        up   infinite     17  idle~ spot-dy-c5xlarge-[2-10],spot-dy-t2micro-[2-9]
spot*        up   infinite      1    mix spot-dy-c5xlarge-1
spot*        up   infinite      2  alloc spot-dy-t2micro-1,spot-st-t2micro-1
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                 3      spot     wrap ec2-user  R       0:04      3 spot-dy-c5xlarge-1,spot-dy-t2micro-1,spot-st-t2micro-1
```

El trabajo finaliza y los tres nodos están en ese `idle` estado.

```
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
ondemand     up   infinite     10  idle~ ondemand-dy-c52xlarge-[1-10]
spot*        up   infinite     17  idle~ spot-dy-c5xlarge-[2-10],spot-dy-t2micro-[2-9]
spot*        up   infinite      3   idle spot-dy-c5xlarge-1,spot-dy-t2micro-1,spot-st-t2micro-1
```

A continuación, cuando no quede ningún trabajo en la cola, puede buscarlo `slurm-3.out` en su directorio local.

```
$ cat slurm-3.out 
Hello World from spot-dy-c5xlarge-1
Hello World from spot-st-t2micro-1
Hello World from spot-dy-t2micro-1
```

El resultado también muestra que el trabajo se ejecutó correctamente en los nodos correspondientes.

Puede observar el proceso de reducción vertical. En la configuración de su clúster, especificó una duración [`scaledown_idletime`](scaling-section.md#scaledown-idletime) habitual de 5 minutos. Tras cinco minutos en estado inactivo, los nodos dinámicos `spot-dy-t2micro-1` se reducen automáticamente `spot-dy-c5xlarge-1` y entran en modo `POWER_DOWN`. Tenga en cuenta que el nodo estático `spot-st-t2micro-1` no se reduce.

```
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
ondemand     up   infinite     10  idle~ ondemand-dy-c52xlarge-[1-10]
spot*        up   infinite      2  idle% spot-dy-c5xlarge-1,spot-dy-t2micro-1
spot*        up   infinite     17  idle~ spot-dy-c5xlarge-[2-10],spot-dy-t2micro-[2-9]
spot*        up   infinite      1   idle spot-st-t2micro-1
```

En el código anterior, puede ver que `spot-dy-c5xlarge-1` y `spot-dy-t2micro-1` están en modo `POWER_DOWN`. Se indica mediante el sufijo `%`. Las instancias correspondientes se cierran inmediatamente, pero los nodos permanecen en ese `POWER_DOWN` estado y no están disponibles para su uso durante 120 segundos (dos minutos). Transcurrido este tiempo, los nodos vuelven a ahorrar energía y están disponibles para su uso de nuevo. Para obtener más información, consulte [Guía de Slurm para el modo de cola múltiple](multiple-queue-mode-slurm-user-guide.md).

Este debería ser el estado final del clúster:

```
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
ondemand     up   infinite     10  idle~ ondemand-dy-c52xlarge-[1-10]
spot*        up   infinite     19  idle~ spot-dy-c5xlarge-[1-10],spot-dy-t2micro-[1-9]
spot*        up   infinite      1   idle spot-st-t2micro-1
```

Cuando realice la sesión en el clúster, podrá eliminarla al abandonar el clúster `pcluster delete`. Para obtener más información sobre `pcluster list` y `pcluster delete`, consulte [`pcluster list`](pcluster.list.md) y [`pcluster delete`](pcluster.delete.md).

```
$ pcluster list
multi-queue CREATE_COMPLETE 2.11.9
$ pcluster delete multi-queue
Deleting: multi-queue
...
```

### Ejecutar trabajos en un clúster con instancias de EFA y GPU
<a name="tutorial-mqm-running-job-efa-gpu"></a>

En esta parte del tutorial se detalla cómo modificar la configuración y lanzar un clúster con varias colas que contenga instancias con recursos de GPU y redes EFA. Tenga en cuenta que las instancias utilizadas en este tutorial son instancias de mayor precio.

**Compruebe los límites de su cuenta para asegurarse de que está autorizado a usar estas instancias antes de continuar con los pasos descritos en este tutorial.**

Modifique el archivo con las siguientes configuraciones.

```
[global]
update_check = true
sanity_check = true
cluster_template = multi-queue-special

[aws]
aws_region_name = <Your Región de AWS>

[scaling demo]
scaledown_idletime = 5

[cluster multi-queue-special]
key_name = <Your SSH key name>
base_os = alinux2                   # optional, defaults to alinux2
scheduler = slurm
master_instance_type = c5.xlarge    # optional, defaults to t2.micro
vpc_settings = <Your VPC section>
scaling_settings = demo
queue_settings = efa,gpu

[queue gpu]
compute_resource_settings = gpu_i1
disable_hyperthreading = true       # optional, defaults to false

[compute_resource gpu_i1]
instance_type = g3.8xlarge

[queue efa]
compute_resource_settings = efa_i1
enable_efa = true
placement_group = DYNAMIC           # optional, defaults to no placement group settings

[compute_resource efa_i1]
instance_type = c5n.18xlarge
max_count = 5
```

Cree el clúster

```
$ pcluster create multi-queue-special -t multi-queue-special
```

Una vez creado el clúster, use su archivo de clave SSH privado para iniciar sesión en su nodo principal.

```
$ pcluster ssh multi-queue-special -i ~/path/to/keyfile.pem
```

Este debería ser el estado inicial del clúster:

```
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
efa*         up   infinite      5  idle~ efa-dy-c5n18xlarge-[1-5]
gpu          up   infinite     10  idle~ gpu-dy-g38xlarge-[1-10]
```

En esta sección se describe cómo enviar algunos trabajos para comprobar que los nodos tienen recursos de EFA o GPU.

En primer lugar, escribe los scripts de trabajo. `efa_job.sh` dormirá por 30 segundos. Después de lo cual, busque EFA en la salida del comando `lspci`. `gpu_job.sh` dormirá por 30 segundos. Después de lo cual, ejecute `nvidia-smi` para mostrar a la GPU información sobre el nodo.

```
$ cat efa_job.sh
#!/bin/bash

sleep 30
lspci | grep "EFA"

$ cat gpu_job.sh
#!/bin/bash

sleep 30
nvidia-smi

$ chmod +x efa_job.sh
$ chmod +x gpu_job.sh
```

Envíe el trabajo con `sbatch`,

```
$ sbatch -p efa --wrap "srun efa_job.sh"
Submitted batch job 2
$ sbatch -p gpu --wrap "srun gpu_job.sh" -G 1
Submitted batch job 3 
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                 2       efa     wrap ec2-user CF       0:32      1 efa-dy-c5n18xlarge-1
                 3       gpu     wrap ec2-user CF       0:20      1 gpu-dy-g38xlarge-1
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
efa*         up   infinite      1   mix# efa-dy-c5n18xlarge-1
efa*         up   infinite      4  idle~ efa-dy-c5n18xlarge-[2-5]
gpu          up   infinite      1   mix# gpu-dy-g38xlarge-1
gpu          up   infinite      9  idle~ gpu-dy-g38xlarge-[2-10]
```

Después de unos minutos, debería ver los nodos en línea y los trabajos en ejecución.

```
[ec2-user@ip-172-31-15-251 ~]$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
efa*         up   infinite      4  idle~ efa-dy-c5n18xlarge-[2-5]
efa*         up   infinite      1    mix efa-dy-c5n18xlarge-1
gpu          up   infinite      9  idle~ gpu-dy-g38xlarge-[2-10]
gpu          up   infinite      1    mix gpu-dy-g38xlarge-1
[ec2-user@ip-172-31-15-251 ~]$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                 4       gpu     wrap ec2-user  R       0:06      1 gpu-dy-g38xlarge-1
                 5       efa     wrap ec2-user  R       0:01      1 efa-dy-c5n18xlarge-1
```

Cuando se complete el trabajo, compruebe la salida. En el resultado del `slurm-2.out` archivo, puede ver que el EFA está presente en el nodo `efa-dy-c5n18xlarge-1`. En el resultado del archivo `slurm-3.out`, puede ver que el resultado de `nvidia-smi` contiene información sobre la GPU del nodo de `gpu-dy-g38xlarge-1`.

```
$ cat slurm-2.out
00:06.0 Ethernet controller: Amazon.com, Inc. Elastic Fabric Adapter (EFA)

$ cat slurm-3.out
Thu Oct  1 22:19:18 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.05    Driver Version: 450.51.05    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla M60           Off  | 00000000:00:1D.0 Off |                    0 |
| N/A   28C    P0    38W / 150W |      0MiB /  7618MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  Tesla M60           Off  | 00000000:00:1E.0 Off |                    0 |
| N/A   36C    P0    37W / 150W |      0MiB /  7618MiB |     98%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
```

Puede observar el proceso de reducción vertical. En la configuración del clúster, especificó previamente una duración habitual [`scaledown_idletime`](scaling-section.md#scaledown-idletime) de cinco minutos. Como resultado, tras cinco minutos en estado inactivo, los nodos dinámicos `spot-dy-t2micro-1` se reducen automáticamente `spot-dy-c5xlarge-1` y entran en modo `POWER_DOWN`. Finalmente, los nodos entran en el modo de ahorro de energía y están disponibles para su uso nuevamente.

```
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
efa*         up   infinite      1  idle% efa-dy-c5n18xlarge-1
efa*         up   infinite      4  idle~ efa-dy-c5n18xlarge-[2-5]
gpu          up   infinite      1  idle% gpu-dy-g38xlarge-1
gpu          up   infinite      9  idle~ gpu-dy-g38xlarge-[2-10]  

# After 120 seconds
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
efa*         up   infinite      5  idle~ efa-dy-c5n18xlarge-[1-5]
gpu          up   infinite     10  idle~ gpu-dy-g38xlarge-[1-10]
```

Cuando realice la sesión en el clúster, podrá eliminarla al abandonar el clúster ``pcluster delete` <cluster name>`.

```
$ pcluster list
multi-queue-special CREATE_COMPLETE 2.11.9
$ pcluster delete multi-queue-special
Deleting: multi-queue-special
...
```

 Para obtener más información, consulte [Guía de Slurm para el modo de cola múltiple](multiple-queue-mode-slurm-user-guide.md).