

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.

# Exécution de tâches conteneurisées avec Pyxis
<a name="tutorials_11_running-containerized-jobs-with-pyxis"></a>

Apprenez à créer un cluster capable d'exécuter des tâches conteneurisées à l'aide de Pyxis, un plugin SPANK permettant de gérer des tâches conteneurisées dans SLURM. Les conteneurs de Pyxis sont gérés par Enroot, un outil permettant de transformer des container/OS images traditionnelles en bacs à sable non privilégiés. Pour plus d'informations, consultez [NVIDIA Pyxis](https://github.com/NVIDIA/pyxis) et [NVIDIA](https://github.com/NVIDIA/enroot) Enroot.

**Note**  
Cette fonctionnalité est disponible avec la version AWS ParallelCluster 3.11.1
Les scripts de ce didacticiel déplacent (`mv`) certains fichiers, ce qui les supprime de leur emplacement d'origine. Si vous souhaitez conserver des copies de ces fichiers dans leur emplacement d'origine, modifiez les scripts pour utiliser la commande copy (`cp`) à la place.

Lors de l'utilisation AWS ParallelCluster, vous ne payez que pour les AWS ressources créées lorsque vous créez ou mettez à jour AWS ParallelCluster des images et des clusters. Pour de plus amples informations, veuillez consulter [AWS services utilisés par AWS ParallelCluster](aws-services-v3.md).

**Prérequis :**
+ Le AWS CLI est [installé et configuré.](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ Une [paire de clés Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html). .
+ Un rôle IAM doté des [autorisations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) requises pour exécuter la [CLI pcluster](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html).

## Créer le cluster
<a name="create-the-cluster"></a>

À partir de la AWS ParallelCluster version 3.11.1, toutes les versions officielles sont AMIs livrées avec Pyxis et Enroot préinstallés. En particulier, SLURM est recompilé avec le support de Pyxis et Enroot est installé sous forme de binaire dans le système. Cependant, vous devez les configurer en fonction de vos besoins spécifiques. Les dossiers utilisés par Enroot et Pyxis auront un impact critique sur les performances du cluster. Pour plus d'informations, consultez la documentation [Pyxis et la documentation](https://github.com/NVIDIA/pyxis/wiki/Setup#slurm-plugstack-configuration) [Enroot](https://github.com/NVIDIA/pyxis/wiki/Setup#enroot-configuration-example).

Pour votre commodité, vous trouverez ici des exemples de configurations pour Pyxis, Enroot et SPANK. `/opt/parallelcluster/examples/` 

Pour déployer un cluster à l'aide des exemples de configurations que nous avons fournis, suivez le didacticiel suivant. 

**Pour créer le cluster avec un exemple de configuration**

Pyxis et Enroot doivent être configurés sur le nœud principal en créant d'abord les répertoires persistants et volatils pour Enroot, puis en créant le répertoire d'exécution pour Pyxis, et enfin en activant Pyxis en tant que plugin SPANK dans l'ensemble du cluster.

1. Exécutez le script ci-dessous sous forme d'action [OnNodeConfigured](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeConfigured)personnalisée dans le nœud principal pour configurer Pyxis et Enroot sur le nœud principal.

   ```
   #!/bin/bash
   set -e
   
   echo "Executing $0"
   
   # Configure Enroot
   ENROOT_PERSISTENT_DIR="/var/enroot"
   ENROOT_VOLATILE_DIR="/run/enroot"
   
   sudo mkdir -p $ENROOT_PERSISTENT_DIR
   sudo chmod 1777 $ENROOT_PERSISTENT_DIR
   sudo mkdir -p $ENROOT_VOLATILE_DIR
   sudo chmod 1777 $ENROOT_VOLATILE_DIR
   sudo mv /opt/parallelcluster/examples/enroot/enroot.conf /etc/enroot/enroot.conf
   sudo chmod 0644 /etc/enroot/enroot.conf
   
   # Configure Pyxis
   PYXIS_RUNTIME_DIR="/run/pyxis"
   
   sudo mkdir -p $PYXIS_RUNTIME_DIR
   sudo chmod 1777 $PYXIS_RUNTIME_DIR
   
   sudo mkdir -p /opt/slurm/etc/plugstack.conf.d/
   sudo mv /opt/parallelcluster/examples/spank/plugstack.conf /opt/slurm/etc/
   sudo mv /opt/parallelcluster/examples/pyxis/pyxis.conf /opt/slurm/etc/plugstack.conf.d/
   sudo -i scontrol reconfigure
   ```

1. Pyxis et Enroot doivent être configurés sur le parc informatique en créant les répertoires persistants et volatils pour Enroot et le répertoire d'exécution pour Pyxis. Exécutez le script ci-dessous sous forme d'action [OnNodeStart](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CustomActions-OnNodeStart)personnalisée dans les nœuds de calcul pour configurer Pyxis et Enroot sur le parc informatique.

   ```
   #!/bin/bash
   set -e
   
   echo "Executing $0"
   
   # Configure Enroot
   ENROOT_PERSISTENT_DIR="/var/enroot"
   ENROOT_VOLATILE_DIR="/run/enroot"
   ENROOT_CONF_DIR="/etc/enroot"
   
   sudo mkdir -p $ENROOT_PERSISTENT_DIR
   sudo chmod 1777 $ENROOT_PERSISTENT_DIR
   sudo mkdir -p $ENROOT_VOLATILE_DIR
   sudo chmod 1777 $ENROOT_VOLATILE_DIR
   sudo mkdir -p $ENROOT_CONF_DIR
   sudo chmod 1777 $ENROOT_CONF_DIR
   sudo mv /opt/parallelcluster/examples/enroot/enroot.conf /etc/enroot/enroot.conf
   sudo chmod 0644 /etc/enroot/enroot.conf
   
   # Configure Pyxis
   PYXIS_RUNTIME_DIR="/run/pyxis"
   
   sudo mkdir -p $PYXIS_RUNTIME_DIR
   sudo chmod 1777 $PYXIS_RUNTIME_DIR 
   
   # In Ubuntu24.04 Apparmor blocks the creation of unprivileged user namespaces,
   # which is required by Enroot. So to run Enroot, it is required to disable this restriction.
   # See https://ubuntu.com/blog/ubuntu-23-10-restricted-unprivileged-user-namespaces
   source /etc/os-release
   if [ "${ID}${VERSION_ID}" == "ubuntu24.04" ]; then
       echo "kernel.apparmor_restrict_unprivileged_userns = 0" | sudo tee /etc/sysctl.d/99-pcluster-disable-apparmor-restrict-unprivileged-userns.conf
       sudo sysctl --system
   fi
   ```

## Soumettre des emplois
<a name="submit-jobs"></a>

Maintenant que Pyxis est configuré dans votre cluster, vous pouvez soumettre des tâches conteneurisées à l'aide des commandes sbatch et srun, qui sont désormais enrichies d'options spécifiques aux conteneurs.

```
# Submitting an interactive job
srun -N 2 --container-image docker://ubuntu:22.04 hostname

# Submitting a batch job
sbatch -N 2 --wrap='srun --container-image docker://ubuntu:22.04 hostname'
```