

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à.

# Tutorial sulla modalità coda multipla
<a name="tutorial-mqm"></a>



## Esecuzione dei lavori AWS ParallelCluster con la modalità a coda multipla
<a name="tutorial-mqm-running-jobs"></a>

Questo tutorial ti spiega come eseguire il tuo primo lavoro in Hello World AWS ParallelCluster con[Modalità coda multipla](queue-mode.md).

**Prerequisiti**
+ AWS ParallelCluster [è installato](install.md).
+  AWS CLI [è installato e configurato.](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ Hai una [EC2 key pair](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html).
+ Hai un ruolo IAM con le [autorizzazioni](iam.md#example-parallelcluser-policies) necessarie per eseguire la [`pcluster`](pcluster.md) CLI.

**Nota**  
La modalità di coda multipla è supportata solo per la AWS ParallelCluster versione 2.9.0 o successiva.

### Configurazione del cluster
<a name="tutorial-mqm-configure-cluster"></a>

Innanzitutto, verifica che AWS ParallelCluster sia installato correttamente eseguendo il comando seguente.

```
$ pcluster version
```

Per ulteriori informazioni su `pcluster version`, consulta [`pcluster version`](pcluster.version.md).

Questo comando restituisce la versione in esecuzione di AWS ParallelCluster.

Quindi, `pcluster configure` esegui per generare un file di configurazione di base. Segui tutte le istruzioni che seguono questo comando.

```
$ pcluster configure
```

Per ulteriori informazioni sul comando `pcluster configure`, consulta [`pcluster configure`](pcluster.configure.md).

Dopo aver completato questo passaggio, dovresti avere un file di configurazione di base sotto. `~/.parallelcluster/config` Questo file deve contenere una configurazione di base del cluster e una sezione VPC.

La parte successiva del tutorial illustra come modificare la configurazione appena creata e avviare un cluster con più code.

**Nota**  
Alcune istanze utilizzate in questo tutorial non sono idonee al livello gratuito.

Per questo tutorial, usa la seguente configurazione.

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

[aws]
aws_region_name = <Your Regione 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
```

### Creare il tuo cluster
<a name="tutorial-mqm-creating-cluster"></a>

Questa sezione descrive in dettaglio come creare il cluster in modalità coda multipla.

Innanzitutto, assegna un nome al cluster `multi-queue-hello-world` e crea il cluster in base alla sezione `multi-queue` cluster definita nella sezione precedente.

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

Per ulteriori informazioni su `pcluster create`, consulta [`pcluster create`](pluster.create.md).

Quando viene creato il cluster, viene visualizzato il seguente output:

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

Il messaggio `CREATE_COMPLETE` indica che il cluster è stato creato correttamente. L'output fornisce anche gli indirizzi IP pubblici e privati del nodo principale.

### Accesso al nodo principale
<a name="tutorial-mqm-log-into-head-node"></a>

Usa il tuo file di chiave SSH privato per accedere al tuo nodo principale.

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

Per ulteriori informazioni su `pcluster ssh`, consulta [`pcluster ssh`](pcluster.ssh.md).

Dopo aver effettuato l'accesso, esegui il `sinfo` comando per verificare che le code dello scheduler siano impostate e configurate.

[Per maggiori informazioni su`sinfo`, consulta sinfo nel](https://slurm.schedmd.com/sinfo.html) *Slurm documentazione*.

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

L'output mostra che `idle` nello stato sono presenti due nodi di `t2.micro` calcolo disponibili nel cluster.

**Nota**  
`spot-st-t2micro-1`è un nodo statico con `st` nel nome. Questo nodo è sempre disponibile e corrisponde ``min_count` = 1` alla configurazione del cluster.
`spot-dy-t2micro-1`è un nodo dinamico con `dy` nel nome. Questo nodo è attualmente disponibile perché corrisponde alla ``initial_count` - `min_count` = 1` configurazione del cluster in uso. Questo nodo si ridimensiona dopo l'abitudine [`scaledown_idletime`](scaling-section.md#scaledown-idletime) di cinque minuti.

Gli altri nodi sono tutti in stato di risparmio energetico, come indicato dal `~` suffisso nello stato del nodo, senza alcuna EC2 istanza supportata. La coda predefinita è indicata da un `*` suffisso dopo il nome della coda, così `spot` come la coda dei lavori predefinita.

### Esecuzione del processo in modalità coda multipla
<a name="tutorial-mqm-running-job-mqm"></a>

Quindi, prova a eseguire un lavoro per dormire per qualche istante. Il job produrrà successivamente il proprio nome host. Assicurati che questo script possa essere eseguito dall'utente corrente.

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

Inviate il lavoro utilizzando il `sbatch` comando. Richiedi due nodi per questo lavoro con l'`-N 2`opzione e verifica che il lavoro sia stato inviato correttamente. Per ulteriori informazioni su `sbatch`, consulta [https://slurm.schedmd.com/sbatch.html](https://slurm.schedmd.com/sbatch.html)nella documentazione di *Slurm*.

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

È possibile visualizzare la coda e controllare lo stato del lavoro con il comando. `squeue` Nota che, poiché non hai specificato una coda specifica, viene utilizzata la coda predefinita (`spot`). Per ulteriori informazioni su `squeue`, consulta [https://slurm.schedmd.com/squeue.html](https://slurm.schedmd.com/squeue.html) nella *Slurmdocumentazione. *

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

L'output indica che il processo è attualmente in un stato di esecuzione. Attendi 30 secondi per il completamento del processo, quindi esegui nuovamente `squeue`.

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

Ora che tutti i lavori in coda sono terminati, cercate il file di output `slurm-2.out` nella directory corrente.

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

L'output mostra anche che il nostro lavoro è stato eseguito correttamente sui `spot-st-t2micro-2` nodi `spot-st-t2micro-1` and.

Ora invia lo stesso lavoro specificando i vincoli per istanze specifiche con i seguenti comandi.

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

Hai usato questi parametri per. `sbatch`
+ `-N 3`— richiede tre nodi
+ `-p spot`— invia il lavoro alla `spot` coda. È inoltre possibile inviare un lavoro alla `ondemand` coda specificando. `-p ondemand`
+ `-C "[c5.xlarge*1&t2.micro*2]"`— specifica i vincoli di nodo specifici per questo lavoro. Ciò richiede l'utilizzo di un (1) `c5.xlarge` nodo e due (2) `t2.micro` nodi per questo lavoro.

Esegui il `sinfo` comando per visualizzare i nodi e le code. (Le code in entrata AWS ParallelCluster sono chiamate partizioni in 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
```

I nodi si stanno accendendo. Ciò è indicato dal `#` suffisso sullo stato del nodo. Esegui il squeue comando per visualizzare le informazioni sui lavori nel 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
```

Il tuo lavoro è in `CF` (CONFIGURING) state, in attesa che le istanze aumentino e si uniscano al cluster.

Dopo circa tre minuti, i nodi dovrebbero essere disponibili e il job entra in (`R`RUNNING) stato.

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

Il processo termina e tutti e tre i nodi sono nello `idle` stato.

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

Quindi, dopo che non ci sono lavori rimasti in coda, puoi cercarli `slurm-3.out` nella tua directory locale.

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

L'output mostra anche che il processo è stato eseguito correttamente sui nodi corrispondenti.

È possibile osservare il processo di ridimensionamento. Nella configurazione del cluster è stata specificata un'impostazione personalizzata [`scaledown_idletime`](scaling-section.md#scaledown-idletime) di 5 minuti. Dopo cinque minuti di inattività, i nodi dinamici si ridimensionano `spot-dy-t2micro-1` automaticamente `spot-dy-c5xlarge-1` ed entrano in `POWER_DOWN` modalità. Tieni presente che il nodo statico `spot-st-t2micro-1` non si ridimensiona.

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

Dal codice precedente, puoi vederlo `spot-dy-c5xlarge-1` e `spot-dy-t2micro-1` sei in `POWER_DOWN` modalità. Questo è indicato dal `%` suffisso. Le istanze corrispondenti vengono immediatamente terminate, ma i nodi rimangono nello `POWER_DOWN` stato e non sono disponibili per l'uso per 120 secondi (due minuti). Trascorso questo periodo, i nodi tornano in modalità di risparmio energetico e sono nuovamente disponibili per l'uso. Per ulteriori informazioni, consulta [Slurmguida per la modalità a coda multipla](multiple-queue-mode-slurm-user-guide.md).

Questo dovrebbe essere lo stato finale del 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
```

Dopo esserti disconnesso dal cluster, puoi ripulirlo `pcluster delete` eseguendo. Per ulteriori informazioni, su `pcluster list` e`pcluster delete`, vedere [`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
...
```

### Esecuzione di processi su cluster con istanze EFA e GPU
<a name="tutorial-mqm-running-job-efa-gpu"></a>

Questa parte del tutorial spiega come modificare la configurazione e avviare un cluster con più code che contiene istanze con risorse di rete e GPU EFA. Tieni presente che le istanze utilizzate in questo tutorial sono istanze più costose.

**Controlla i limiti del tuo account per assicurarti di essere autorizzato a utilizzare queste istanze prima di procedere con i passaggi descritti in questo tutorial.**

Modifica il file di configurazione utilizzando quanto segue.

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

[aws]
aws_region_name = <Your Regione 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
```

Creazione del cluster

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

Dopo aver creato il cluster, utilizzate il file di chiave SSH privato per accedere al nodo principale.

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

Questo dovrebbe essere lo stato iniziale del 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]
```

Questa sezione descrive come inviare alcuni lavori per verificare che i nodi dispongano di risorse EFA o GPU.

Per prima cosa, scrivi gli script di lavoro. `efa_job.sh`dormirà per 30 secondi. Dopodiché, cerca EFA nell'output del `lspci` comando. `gpu_job.sh`dormirà per 30 secondi. Dopodiché, `nvidia-smi` esegui per mostrare le informazioni sulla GPU sul 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
```

Invia il lavoro 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]
```

Dopo alcuni minuti, dovresti vedere i nodi online e i lavori in esecuzione.

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

Al termine del lavoro, controlla l'output. Dall'output del `slurm-2.out` file, puoi vedere che EFA è presente sul `efa-dy-c5n18xlarge-1` nodo. Dall'output del `slurm-3.out` file, è possibile vedere che l'`nvidia-smi`output contiene informazioni sulla GPU per il `gpu-dy-g38xlarge-1` nodo.

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

È possibile osservare il processo di ridimensionamento. Nella configurazione del cluster, in precedenza hai specificato un'impostazione personalizzata [`scaledown_idletime`](scaling-section.md#scaledown-idletime) di cinque minuti. Di conseguenza, dopo cinque minuti di inattività, i nodi dinamici si ridimensionano automaticamente ed entrano in `POWER_DOWN` modalità. `spot-dy-c5xlarge-1` `spot-dy-t2micro-1` Alla fine, i nodi entrano nella modalità di risparmio energetico e sono nuovamente disponibili per l'uso.

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

Dopo esserti disconnesso dal cluster, puoi eseguire la pulizia ``pcluster delete` <cluster name>` eseguendo.

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

 Per ulteriori informazioni, consulta [Slurmguida per la modalità a coda multipla](multiple-queue-mode-slurm-user-guide.md).