

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Tutorial do modo de fila múltipla
<a name="tutorial-mqm"></a>



## Executando seus trabalhos AWS ParallelCluster com o modo de várias filas
<a name="tutorial-mqm-running-jobs"></a>

Este tutorial explica como executar seu primeiro trabalho do Hello World AWS ParallelCluster com[Modo de fila múltipla](queue-mode.md).

**Pré-requisitos**
+ AWS ParallelCluster [está instalado](install.md).
+ O AWS CLI [está instalado e configurado.](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ Você tem um [par de EC2 chaves](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html).
+ Você tem um perfil do IAM com as [permissões](iam.md#example-parallelcluser-policies) necessárias para executar a CLI [`pcluster`](pcluster.md).

**nota**  
O modo de fila múltipla só é compatível com a AWS ParallelCluster versão 2.9.0 ou posterior.

### Configuração do cluster
<a name="tutorial-mqm-configure-cluster"></a>

Primeiro, verifique se AWS ParallelCluster está instalado corretamente executando o comando a seguir.

```
$ pcluster version
```

Para obter mais informações sobre o `pcluster version`, consulte [`pcluster version`](pcluster.version.md).

Esse comando retorna a versão em execução do AWS ParallelCluster.

Em seguida, execute o `pcluster configure` para gerar um arquivo de configuração básico. Siga todas as instruções que seguem esse comando.

```
$ pcluster configure
```

Para obter mais informações sobre o comando `pcluster configure`, consulte [`pcluster configure`](pcluster.configure.md).

Depois de concluir esta etapa, você deverá ter um arquivo de configuração básica em `~/.parallelcluster/config`. Esse arquivo deve conter configurações básicas de cluster e uma seção de VPC.

A próxima parte do tutorial descreve como modificar sua configuração recém-criada e iniciar um cluster com várias filas.

**nota**  
Algumas instâncias que este tutorial usa não são elegíveis para o nível gratuito.

Para este tutorial, use a seguinte configuração.

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

[aws]
aws_region_name = <Your Região da 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
```

### Como criar seu cluster
<a name="tutorial-mqm-creating-cluster"></a>

Esta seção detalha como criar o cluster no modo de fila múltipla.

Primeiro, nomeie seu cluster `multi-queue-hello-world` e crie o cluster de acordo com a seção de cluster de `multi-queue` definida na seção anterior.

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

Para obter mais informações sobre o `pcluster create`, consulte [`pcluster create`](pluster.create.md).

Quando o cluster é criado, a seguinte saída é exibida:

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

A mensagem `CREATE_COMPLETE` mostra que o cluster foi criado com êxito. A saída também fornece os endereços IP público e privado do nó principal.

### Fazer login em seu nó principal
<a name="tutorial-mqm-log-into-head-node"></a>

Use seu arquivo de chave SSH privada para fazer login no nó principal.

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

Para obter mais informações sobre o `pcluster ssh`, consulte [`pcluster ssh`](pcluster.ssh.md).

Depois de fazer login, execute o comando `sinfo` para verificar se suas filas do programador estão definidas e configuradas.

Para obter mais informações sobre`sinfo`, consulte [sinfo](https://slurm.schedmd.com/sinfo.html) no *Slurm documentação*.

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

A saída mostra que você tem dois nós de computação `t2.micro` no estado `idle` que estão disponíveis no seu cluster.

**nota**  
`spot-st-t2micro-1` é um nó estático com `st` em seu nome. Esse nó está sempre disponível e corresponde ao ``min_count` = 1` da configuração do seu cluster.
`spot-dy-t2micro-1` é um nó dinâmico com `dy` em seu nome. Esse nó está disponível no momento porque corresponde a ``initial_count` - `min_count` = 1` de acordo com a configuração do seu cluster. Esse nó é reduzido verticalmente após seu [`scaledown_idletime`](scaling-section.md#scaledown-idletime) personalizado de cinco minutos.

Outros nós estão todos no estado de economia de energia, mostrado pelo `~` sufixo no estado do nó, sem nenhuma EC2 instância apoiando-os. A fila padrão é indicada por um sufixo `*` após o nome da fila. A `spot` é sua fila de trabalhos padrão.

### Como executar o trabalho no modo de várias filas
<a name="tutorial-mqm-running-job-mqm"></a>

Em seguida, tente fazer com que o trabalho fique em latência por um tempo. Posteriormente, o trabalho gera seu próprio nome de host. Certifique-se de que esse script possa ser executado pelo usuário atual.

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

Envie o trabalho usando o comando `sbatch`. Solicite dois nós para esse trabalho com a opção `-N 2` e verifique se o trabalho foi enviado com êxito. Para obter mais informações sobre `sbatch`, consulte [https://slurm.schedmd.com/sbatch.html](https://slurm.schedmd.com/sbatch.html)na documentação do *Slurm.*

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

Agora, você pode visualizar a fila e verificar o status do trabalho com o comando `squeue`. Observe que, como você não especificou uma fila específica, a fila padrão (`spot`) é usada. Para obter mais informações sobre `squeue`, consulte [https://slurm.schedmd.com/squeue.html](https://slurm.schedmd.com/squeue.html) no *Slurmdocumentação*.

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

A saída mostra que, no momento, a tarefa está em um estado de execução. Aguarde 30 segundos para que a tarefa seja concluída e execute `squeue` novamente.

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

Agora que todos os trabalhos na fila foram concluídos, procure o arquivo de saída `slurm-2.out` em seu diretório atual.

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

A saída também mostra que o trabalho foi executado com êxito nos nós `spot-st-t2micro-1` e `spot-st-t2micro-2`.

Agora, envie o mesmo trabalho especificando restrições para instâncias específicas com os comandos a seguir.

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

Você usou esses parâmetros para `sbatch`.
+ `-N 3`— solicita três nós
+ `-p spot`— envia o trabalho para a fila `spot`. Você também pode enviar um trabalho para a fila `ondemand`, especificando `-p ondemand`.
+ `-C "[c5.xlarge*1&t2.micro*2]"`— especifica as restrições específicas do nó para esse trabalho. Isso solicita que um (1) nó `c5.xlarge` e dois (2) nós `t2.micro` sejam usados para esse trabalho.

Execute o comando `sinfo` para visualizar os nós e as filas. (As filas de entrada AWS ParallelCluster são chamadas de partições em 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
```

Os nós estão sendo ativados. Isso é indicado pelo sufixo `#` no estado do nó. Execute o squeue comando para visualizar informações sobre os trabalhos no cluster.

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

Seu trabalho está no `CF` (CONFIGURING) state, aguardando que as instâncias aumentem e se juntem ao cluster.

Após cerca de três minutos, os nós devem estar disponíveis e o trabalho entra no `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
```

O trabalho termina e todos os três nós estão no estado `idle`.

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

Então, depois que nenhum trabalho permanecer na fila, procure `slurm-3.out` no seu diretório 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
```

A saída também mostra que o trabalho foi executado com êxito nos nós correspondentes.

Você pode observar o processo de redução de escala. Em sua configuração de cluster, você especificou um [`scaledown_idletime`](scaling-section.md#scaledown-idletime) personalizado de 5 minutos. Depois de cinco minutos em estado ocioso, seus nós dinâmicos `spot-dy-c5xlarge-1` e `spot-dy-t2micro-1` são automaticamente reduzidos verticalmente e entram no modo `POWER_DOWN`. Observe que o nó estático `spot-st-t2micro-1` não é reduzido verticalmente.

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

No código acima, você pode ver que `spot-dy-c5xlarge-1` e `spot-dy-t2micro-1` estão no modo `POWER_DOWN`. Isso é indicado pelo sufixo `%`. As instâncias correspondentes são encerradas imediatamente, mas os nós permanecem no estado `POWER_DOWN` e não ficam disponíveis para uso por 120 segundos (dois minutos). Após esse período, os nós retornam economizando energia e estão disponíveis para uso novamente. Para obter mais informações, consulte [Guia do Slurm para o modo de várias filas](multiple-queue-mode-slurm-user-guide.md).

Esse deve ser o estado final do cluster:

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

Depois de se desconectar do cluster, você pode limpá-lo, executando o `pcluster delete`. Para obter mais informações sobre `pcluster list` e `pcluster delete`, consulte [`pcluster list`](pcluster.list.md) e [`pcluster delete`](pcluster.delete.md).

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

### Execução de trabalhos em cluster com instâncias EFA e GPU
<a name="tutorial-mqm-running-job-efa-gpu"></a>

Esta parte do tutorial detalha como modificar a configuração e iniciar um cluster com várias filas que contêm instâncias com rede EFA e atributos GPU. Observe que as instâncias usadas neste tutorial têm preços mais altos.

**Verifique os limites da sua conta para ter certeza de que você está autorizado a usar essas instâncias antes de prosseguir com as etapas descritas neste tutorial.**

Modifique o arquivo de configuração da seguinte forma.

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

[aws]
aws_region_name = <Your Região da 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
```

Criar um cluster

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

Depois da criação do cluster, use seu arquivo de chave SSH privada para fazer login no nó principal.

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

Esse deve ser o estado inicial do cluster:

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

Esta seção descreve como enviar alguns trabalhos para verificar se os nós têm atributos de EFA ou GPU.

Primeiro, escreva os scripts de trabalho. O `efa_job.sh` aguarda por 30 segundos. Depois disso, procure o EFA na saída do comando `lspci`. O `gpu_job.sh` aguarda por 30 segundos. Depois disso, execute `nvidia-smi` para mostrar as informações do GPU sobre o nó.

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

Envie o trabalho com `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]
```

Após alguns minutos, você deverá ver os nós on-line e os trabalhos em execução.

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

Depois que o trabalho for concluído, verifique a saída. Na saída do arquivo `slurm-2.out`, você pode ver que o EFA está presente no nó `efa-dy-c5n18xlarge-1`. Na saída do arquivo `slurm-3.out`, você pode ver que a saída `nvidia-smi` contém informações de GPU para o nó `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                                                 |
+-----------------------------------------------------------------------------+
```

Você pode observar o processo de redução de escala. Em sua configuração de cluster, você especificou um [`scaledown_idletime`](scaling-section.md#scaledown-idletime) personalizado de cinco minutos. Por isso, depois de cinco minutos em estado ocioso, seus nós dinâmicos `spot-dy-c5xlarge-1` e `spot-dy-t2micro-1` são automaticamente reduzidos verticalmente e entram no modo `POWER_DOWN`. Por fim, os nós entram no modo de economia de energia e ficam disponíveis para uso novamente.

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

Depois de se desconectar do cluster, você pode limpá-lo, executando o ``pcluster delete` <cluster name>`.

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

 Para obter mais informações, consulte [Guia do Slurm para o modo de várias filas](multiple-queue-mode-slurm-user-guide.md).