

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Tutoriel en mode file d'attente multiple
<a name="tutorial-mqm"></a>



## Exécution de vos tâches AWS ParallelCluster en mode file d'attente multiple
<a name="tutorial-mqm-running-jobs"></a>

Ce didacticiel vous explique comment exécuter votre première tâche Hello World AWS ParallelCluster avec[Mode de file d'attente multiple](queue-mode.md).

**Prérequis**
+ AWS ParallelCluster [est installé](install.md).
+ Le AWS CLI [est installé et configuré.](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ Vous avez une [paire de EC2 clés](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html).
+ Vous disposez d'un rôle IAM doté des [autorisations](iam.md#example-parallelcluser-policies) requises pour exécuter la [`pcluster`](pcluster.md) CLI.

**Note**  
Le mode de file d'attente multiple n'est pris en charge que pour AWS ParallelCluster la version 2.9.0 ou ultérieure.

### Configuration de votre cluster
<a name="tutorial-mqm-configure-cluster"></a>

Tout d'abord, vérifiez qu' AWS ParallelCluster il est correctement installé en exécutant la commande suivante.

```
$ pcluster version
```

Pour plus d’informations sur `pcluster version`, consultez [`pcluster version`](pcluster.version.md).

Cette commande renvoie la version en cours d'exécution de AWS ParallelCluster.

Exécutez ensuite `pcluster configure` pour générer un fichier de configuration de base. Suivez toutes les instructions qui suivent cette commande.

```
$ pcluster configure
```

Pour plus d'informations sur la commande `pcluster configure`, consultez [`pcluster configure`](pcluster.configure.md).

Une fois cette étape terminée, vous devriez avoir un fichier de configuration de base sous`~/.parallelcluster/config`. Ce fichier doit contenir une configuration de base du cluster et une section VPC.

La partie suivante du didacticiel explique comment modifier la configuration que vous venez de créer et lancer un cluster avec plusieurs files d'attente.

**Note**  
Certaines instances utilisées dans ce didacticiel ne sont pas éligibles au niveau gratuit.

Pour ce didacticiel, utilisez la configuration suivante.

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

[aws]
aws_region_name = <Your Région 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
```

### Création de votre cluster
<a name="tutorial-mqm-creating-cluster"></a>

Cette section explique comment créer le cluster en mode files d'attente multiples.

Tout d'abord, nommez votre cluster `multi-queue-hello-world` et créez-le conformément à la section du `multi-queue` cluster définie dans la section précédente.

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

Pour plus d’informations sur `pcluster create`, consultez [`pcluster create`](pluster.create.md).

Lorsque le cluster est créé, le résultat suivant s'affiche :

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

Le message `CREATE_COMPLETE` indique que le cluster a été créé avec succès. La sortie fournit également les adresses IP publiques et privées du nœud principal.

### Connexion à votre nœud principal
<a name="tutorial-mqm-log-into-head-node"></a>

Utilisez votre fichier de clé SSH privée pour vous connecter à votre nœud principal.

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

Pour plus d’informations sur `pcluster ssh`, consultez [`pcluster ssh`](pcluster.ssh.md).

Une fois connecté, exécutez la `sinfo` commande pour vérifier que les files d'attente de votre planificateur sont installées et configurées.

Pour plus d'informations sur`sinfo`, voir [sinfo](https://slurm.schedmd.com/sinfo.html) dans le *Slurm documentation*.

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

La sortie indique que vous disposez de deux nœuds de `t2.micro` calcul dans l'`idle`état qui sont disponibles dans votre cluster.

**Note**  
`spot-st-t2micro-1`est un nœud statique dont le nom `st` figure dans son nom. Ce nœud est toujours disponible et correspond ``min_count` = 1` à la configuration de votre cluster.
`spot-dy-t2micro-1`est un nœud dynamique dont le nom `dy` figure dans son nom. Ce nœud est actuellement disponible car il correspond à ``initial_count` - `min_count` = 1` la configuration de votre cluster. Ce nœud est réduit au bout [`scaledown_idletime`](scaling-section.md#scaledown-idletime) de cinq minutes, comme vous le souhaitez.

Les autres nœuds sont tous en état d'économie d'énergie, comme le montre le `~` suffixe dans l'état du nœud, sans qu'aucune EC2 instance ne les sauvegarde. La file d'attente par défaut est désignée par un `*` suffixe après son nom, tout comme votre file d'attente de tâches par défaut. `spot`

### Exécution d'une tâche en mode file d'attente multiple
<a name="tutorial-mqm-running-job-mqm"></a>

Ensuite, essayez d'exécuter une tâche pour dormir pendant un moment. La tâche produira ultérieurement son propre nom d'hôte. Assurez-vous que ce script peut être exécuté par l'utilisateur actuel.

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

Soumettez le travail à l'aide de la `sbatch` commande. Demandez deux nœuds pour cette tâche avec l'`-N 2`option, et vérifiez que la tâche est correctement soumise. Pour plus d'informations sur `sbatch`, consultez [.sbatch](https://slurm.schedmd.com/sbatch.html)dans la documentation de *Slurm.*

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

Vous pouvez consulter votre file d'attente et vérifier l'état de la tâche à l'aide de la `squeue` commande. Notez que, comme vous n'avez pas spécifié de file d'attente spécifique, la file d'attente par défaut (`spot`) est utilisée. Pour plus d'informations sur `squeue`, consultez [.squeue](https://slurm.schedmd.com/squeue.html) dans le *.Slurmdocumentation*.

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

La sortie indique que la tâche est actuellement en cours d'exécution. Attendez 30 secondes que la tâche se termine et exécutez `squeue` à nouveau.

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

Maintenant que les tâches de la file d'attente sont toutes terminées, recherchez le fichier de sortie `slurm-2.out` dans votre répertoire actuel.

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

Le résultat indique également que notre tâche s'est exécutée avec succès sur les `spot-st-t2micro-2` nœuds `spot-st-t2micro-1` et.

Soumettez maintenant le même travail en spécifiant des contraintes pour des instances spécifiques à l'aide des commandes suivantes.

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

Vous avez utilisé ces paramètres pour`sbatch`.
+ `-N 3`— demande trois nœuds
+ `-p spot`— soumet la tâche à la `spot` file d'attente. Vous pouvez également soumettre une tâche à la `ondemand` file d'attente en spécifiant`-p ondemand`.
+ `-C "[c5.xlarge*1&t2.micro*2]"`— spécifie les contraintes de nœud spécifiques pour cette tâche. Cela demande qu'un (1) `c5.xlarge` nœud et deux (2) `t2.micro` nœuds soient utilisés pour cette tâche.

Exécutez la `sinfo` commande pour afficher les nœuds et les files d'attente. (Les files d'attente AWS ParallelCluster sont appelées partitions dans 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
```

Les nœuds s'allument. Cela est indiqué par le `#` suffixe sur l'état du nœud. Exécutez le squeue commande pour afficher les informations relatives aux tâches du 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
```

Votre travail est dans le `CF` (CONFIGURING), en attente de la montée en puissance des instances et de leur intégration au cluster.

Au bout de trois minutes environ, les nœuds devraient être disponibles et la tâche devrait entrer dans le champ `R` (RUNNING) état.

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

La tâche est terminée et les trois nœuds sont dans l'`idle`état.

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

Ensuite, une fois qu'il ne reste aucune tâche dans la file d'attente, vous pouvez la rechercher `slurm-3.out` dans votre répertoire 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
```

La sortie indique également que la tâche s'est exécutée avec succès sur les nœuds correspondants.

Vous pouvez observer le processus de réduction. Dans la configuration de votre cluster, vous avez spécifié une durée personnalisée [`scaledown_idletime`](scaling-section.md#scaledown-idletime) de 5 minutes. Après cinq minutes d'inactivité, vos nœuds `spot-dy-c5xlarge-1` dynamiques `spot-dy-t2micro-1` sont automatiquement réduits et passent en `POWER_DOWN` mode. Notez que le nœud statique `spot-st-t2micro-1` n'est pas réduit.

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

D'après le code ci-dessus, vous pouvez le voir `spot-dy-c5xlarge-1` et vous `spot-dy-t2micro-1` êtes en `POWER_DOWN` mode. Cela est indiqué par le `%` suffixe. Les instances correspondantes sont immédiatement mises hors service, mais les nœuds restent dans `POWER_DOWN` cet état et ne peuvent pas être utilisés pendant 120 secondes (deux minutes). Passé ce délai, les nœuds recommencent à économiser de l'énergie et peuvent être réutilisés. Pour de plus amples informations, veuillez consulter [Slurmguide pour le mode de file d'attente multiple](multiple-queue-mode-slurm-user-guide.md).

Cela devrait être l'état final du 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
```

Après vous être déconnecté du cluster, vous pouvez le nettoyer en exécutant`pcluster delete`. Pour plus d'informations, sur `pcluster list` et`pcluster delete`, voir [`pcluster list`](pcluster.list.md) et[`pcluster delete`](pcluster.delete.md).

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

### Exécution de tâches sur un cluster avec des instances EFA et GPU
<a name="tutorial-mqm-running-job-efa-gpu"></a>

Cette partie du didacticiel explique comment modifier la configuration et lancer un cluster avec plusieurs files d'attente contenant des instances dotées d'un réseau EFA et de ressources GPU. Notez que les instances utilisées dans ce didacticiel sont des instances dont le prix est plus élevé.

**Vérifiez les limites de votre compte pour vous assurer que vous êtes autorisé à utiliser ces instances avant de suivre les étapes décrites dans ce didacticiel.**

Modifiez le fichier de configuration à l'aide de ce qui suit.

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

[aws]
aws_region_name = <Your Région 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
```

Créer le cluster

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

Une fois le cluster créé, utilisez votre fichier de clé SSH privé pour vous connecter à votre nœud principal.

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

Il doit s'agir de l'état initial du 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]
```

Cette section décrit comment soumettre certaines tâches pour vérifier que les nœuds disposent de ressources EFA ou GPU.

Rédigez d'abord les scripts de travail. `efa_job.sh`dormira pendant 30 secondes. Ensuite, recherchez EFA dans la sortie de la `lspci` commande. `gpu_job.sh`dormira pendant 30 secondes. Ensuite, exécutez `nvidia-smi` pour afficher les informations du GPU sur le nœud.

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

Soumettez l'offre d'emploi avec`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]
```

Au bout de quelques minutes, vous devriez voir les nœuds en ligne et les tâches en cours d'exécution.

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

Une fois le travail terminé, vérifiez le résultat. À partir de la sortie du `slurm-2.out` fichier, vous pouvez voir que l'EFA est présent sur le `efa-dy-c5n18xlarge-1` nœud. À partir de la sortie du `slurm-3.out` fichier, vous pouvez voir que la `nvidia-smi` sortie contient des informations GPU pour le `gpu-dy-g38xlarge-1` nœud.

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

Vous pouvez observer le processus de réduction. Dans la configuration du cluster, vous avez précédemment spécifié une durée [`scaledown_idletime`](scaling-section.md#scaledown-idletime) maximale de cinq minutes. Par conséquent, après cinq minutes d'inactivité, vos nœuds dynamiques diminuent automatiquement et passent en `POWER_DOWN` mode. `spot-dy-c5xlarge-1` `spot-dy-t2micro-1` Finalement, les nœuds passent en mode économie d'énergie et peuvent être réutilisés.

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

Après vous être déconnecté du cluster, vous pouvez le nettoyer en exécutant``pcluster delete` <cluster name>`.

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

 Pour de plus amples informations, veuillez consulter [Slurmguide pour le mode de file d'attente multiple](multiple-queue-mode-slurm-user-guide.md).