Aller au contenu principal

Exécution d'un travail en interactif

Sur Jean Zay, l'accès interactif aux ressources de calcul peut se faire de plusieurs manières.

Connexion sur la frontale

L'accès à la frontale se fait par une connexion ssh :

ssh login@jean-zay.idris.fr

Les ressources d'un nœud interactif sont partagées entre tous les utilisateurs connectés à ce nœud : l'interactif sur la frontale est donc réservé uniquement à la compilation et la mise au point des scripts.

Attention

Sur les frontales, la mémoire RAM est limitée à 5 Go qui sont partagés par l'ensemble des processus d'un utilisateur et le temps CPU par processus est limité à 30 minutes afin d'assurer un meilleur partage de ressources.

Toute exécution interactive de vos codes doit s'effectuer sur les nœuds de calcul CPU ou GPU en utilisant :

  • soit la commande srun :
    • pour obtenir un terminal sur un nœud de calcul CPU ou GPU au sein duquel vous pourrez exécuter votre code,
    • ou pour exécuter directement votre code sur la partition de votre choix.
  • soit la commande salloc pour effectuer une réservation de ressources CPU ou GPU permettant ensuite d'effectuer plusieurs exécutions.
Remarque

Il est préférable de soumettre un travail batch pour les calculs demandant des ressources importantes (en nombre de cœurs CPU ou de GPU ou durée maximale) car celui-ci ne sera pas affecté par une éventuelle perte de connexion ou plantage de la frontale.

Obtention d'un terminal sur un nœud de calcul CPU

Il est possible d'ouvrir un terminal directement sur un nœud de calcul CPU sur lequel des ressources vous sont réservées (ici 4 cœurs) en utilisant la commande suivante :

srun --pty --ntasks=1 --cpus-per-task=4 --hint=nomultithread [--other-options] bash

Remarques :

  • L'option --pty permet d'obtenir un terminal interactif et la commande passée à srun est un shell (ici bash).
  • L'option --hint=nomultithread assure la réservation des cœurs physiques (pas d'hyperthreading).
  • Par défaut, la mémoire CPU allouée est proportionnelle au nombre de cœurs réservés. Par exemple, si vous demandez 1/4 des cœurs physiques d'un nœud, vous aurez accès à 1/4 de sa mémoire. Vous pouvez consulter notre documentation à ce sujet : Allocation mémoire sur les partitions CPU.
  • --other-options peut contenir toutes les options Slurm usuelles de configuration des travaux (--time=, etc ) : voir la documentation sur les scripts batch de soumission dans la rubrique Exécution/Contrôle de travaux.
  • Les réservations ont toutes des ressources définies dans Slurm par une partition et une "Qualité de Service" QoS (Quality of Service) par défaut. Vous pouvez en modifier les limites en spécifiant une partition et/ou une QoS comme indiqué dans notre documentation détaillant les partitions et les Qos CPU.
  • Pour les comptes multi-projets ainsi que ceux ayant des heures CPU et GPU, il est indispensable de spécifier l'attribution d'heures sur laquelle décompter les heures de calcul du travail comme indiqué dans notre documentation détaillant la gestion des heures de calcul pour vous assurer que les heures consommées par vos travaux soient décomptées de la bonne attribution.

Le terminal est opérationnel après obtention de l'allocation :

$ srun --pty --ntasks=1 --cpus-per-task=4 --hint=nomultithread bash
srun: job 1365358 queued and waiting for resources
srun: job 1365358 has been allocated resources
bash-4.2$ hostname
noeud123

Vous pouvez vérifier que votre travail interactif a bien démarré grâce à la commande squeue, et obtenir des informations complètes sur l'état du travail avec la commande scontrol show job <identifiant du travail>.

Une fois le terminal opérationnel, vous pouvez lancer vos exécutables de la manière habituelle : ./votre_executable.

Exécution MPI

Si vous souhaitez démarrer un programme MPI dans cette configuration, vous devez utiliser à nouveau srun pour lancer l'exécution : srun ./votre_executable_mpi.

Attention, l'hyperthreading n'est pas utilisable via MPI dans cette configuration.

Pour quitter le mode interactif :

bash-4.2$ exit 
Attention

Si vous ne quittez pas le mode interactif vous-même, la durée d'allocation maximale (par défaut ou spécifiée avec l'option --time) est appliquée : le job reste en machine sans rien faire et les heures de calcul seront décomptées sur le projet que vous avez spécifié.

Exécution interactive sur la partition CPU

Si vous n'avez pas besoin d'ouvrir un terminal sur un nœud de calcul, il est également possible de démarrer directement depuis la frontale l'exécution interactive d'un code sur les nœuds de calcul CPU en utilisant la commande suivante (ici avec 4 tâches) :

srun --ntasks=4 --hint=nomultithread [--other-options] ./mon_executable

Remarques :

  • La commande passée à srun est alors un exécutable.
  • L'option --hint=nomultithread assure la réservation des cœurs physiques (pas d'hyperthreading).
  • Par défaut, la mémoire CPU allouée est proportionnelle au nombre de cœurs réservés. Par exemple, si vous demandez 1/4 des cœurs physiques d'un nœud, vous aurez accès à 1/4 de sa mémoire. Vous pouvez consulter notre documentation à ce sujet : Allocation mémoire avec Slurm.
  • --other-options peut contenir toutes les options Slurm usuelles de configuration des travaux (--time=, etc ) : voir la documentation sur les scripts batch de soumission dans la rubrique Exécution/Contrôle de travaux.
  • Les réservations ont toutes des ressources définies dans Slurm par une partition et une "Qualité de Service" QoS (Quality of Service) par défaut. Vous pouvez en modifier les limites en spécifiant une partition et/ou une QoS comme indiqué dans notre documentation détaillant les partitions et les Qos CPU.
  • Pour les comptes multi-projets ainsi que ceux ayant des heures CPU et GPU, il est indispensable de spécifier l'attribution d'heures sur laquelle décompter les heures de calcul du travail comme indiqué dans notre documentation détaillant la gestion des heures de calcul pour vous assurer que les heures consommées par vos travaux soient décomptées de la bonne attribution.

Obtention d'un terminal sur un nœud de calcul GPU

Il est possible d'ouvrir un terminal directement sur un nœud de calcul convergé sur lequel des ressources vous sont réservées (ici 1 GPU sur la partition GPU par défaut) en utilisant la commande suivante :

srun --pty --nodes=1 --ntasks-per-node=1 --cpus-per-task=10 --gres=gpu:1 --hint=nomultithread [--other-options] bash

Remarques :

  • L'option --pty permet d'obtenir un terminal interactif et la commande passée à srun est un shell (ici bash).
  • L'option --hint=nomultithread assure la réservation des cœurs physiques (pas d'hyperthreading).
  • La mémoire allouée pour le job est proportionnelle au nombre de cœurs/CPU demandés. Par exemple, si vous demandez 1/4 des cœurs/CPU physiques d'un nœud, vous aurez accès à 1/4 de sa mémoire. Sur la partition gpu par défaut, l'option --cpus-per-task=10 permet ainsi de réserver 1/4 de la mémoire du nœud par GPU (si 1 tache par GPU). Sur la partition gpu_p2 (--partition=gpu_p2), il faut spécifier --cpus-per-task=3 pour réserver 1/8 de la mémoire du nœud par GPU (si 1 tache par GPU). Sur la partition gpu_p5 (-C a100), il faut spécifier --cpus-per-task=8 pour réserver 1/8 de la mémoire du nœud par GPU (si 1 tache par GPU). Sur la partition gpu_p6 (-C h100), il faut spécifier --cpus-per-task=24 pour réserver 1/4 de la mémoire du nœud par GPU (si 1 tache par GPU). Ainsi vous serez cohérent avec la configuration des nœuds utilisés et éviterez une surfacturation d'heures. Vous pouvez consulter notre documentation à ce sujet : Allocation mémoire avec Slurm.
  • --other-options peut contenir toutes les options Slurm usuelles de configuration des travaux (--time=, etc ) : voir la documentation sur les scripts batch de soumission dans la rubrique Exécution/Contrôle de travaux.
  • Les réservations ont toutes des ressources définies par une partition et une "Qualité de Service" QoS (Quality of Service) positionnées par défaut dans Slurm. Vous pouvez en modifier les limites en spécifiant une partition et/ou une QoS comme indiqué dans notre documentation détaillant les partitions et les Qos GPU.
  • Pour les comptes multi-projets ainsi que ceux ayant des heures CPU et GPU, il est indispensable de spécifier l'attribution d'heures sur laquelle décompter les heures de calcul du travail comme indiqué dans notre documentation détaillant la gestion des heures de calcul pour vous assurer que les heures consommées par vos travaux soient décomptées de la bonne attribution.

Le terminal est opérationnel après obtention de l'allocation :

$ srun --pty --nodes=1 --ntasks-per-node=1 --cpus-per-task=10 --gres=gpu:1 --hint=nomultithread bash
srun: job 1369723 queued and waiting for resources
srun: job 1369723 has been allocated resources
bash-4.2$ hostname
noeud234
bash-4.2$ nvidia-smi
Fri Apr 10 19:09:08 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.14 Driver Version: 430.14 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla V100-SXM2... On | 00000000:1C:00.0 Off | 0 |
| N/A 44C P0 45W / 300W | 0MiB / 32510MiB | 0% Default |
+-------------------------------+----------------------+----------------------+

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

Vous pouvez vérifier que votre travail interactif a bien démarré grâce à la commande squeue, et obtenir des informations complètes sur l'état du travail avec la commande scontrol show job <identifiant du travail>.

Une fois le terminal opérationnel, vous pouvez lancer vos exécutables de la manière habituelle ./votre_executable.

Attention

MPI n'est actuellement pas utilisable dans cette configuration.

Pour quitter le mode interactif, utilisez la commande exit :

bash-4.2$ exit 
Attention

Si vous ne quittez pas le mode interactif vous-même, la durée d'allocation maximale (par défaut ou spécifiée avec l'option --time) est appliquée : le job reste en machine sans rien faire et autant d'heures de calcul seront décomptées sur le projet que vous avez spécifié.

Exécution interactive sur la partition GPU

Si vous n'avez pas besoin d'ouvrir un terminal sur un nœud de calcul GPU, il est également possible de démarrer directement depuis la frontale l'exécution interactive d'un code sur les nœuds de calcul convergé en utilisant la commande suivante (ici avec 4 GPU sur la partition GPU par défaut) :

srun --nodes=1 --ntasks-per-node=4 --cpus-per-task=10 --gres=gpu:4 --hint=nomultithread [--other-options] ./mon_executable

Remarques :

  • La commande passée à srun est alors un exécutable.
  • L'option --hint=nomultithread assure la réservation des cœurs physiques (pas d'hyperthreading).
  • La mémoire allouée pour le job est proportionnelle au nombre de cœurs/CPU demandés. Par exemple, si vous demandez 1/4 des cœurs/CPU physiques d'un nœud, vous aurez accès à 1/4 de sa mémoire. Sur la partition gpu par défaut, l'option --cpus-per-task=10 permet ainsi de réserver 1/4 de la mémoire du nœud par GPU (si 1 tache par GPU). Sur la partition gpu_p2 (--partition=gpu_p2), il faut spécifier --cpus-per-task=3 pour réserver 1/8 de la mémoire du nœud par GPU (si 1 tache par GPU). Sur la partition gpu_p5 (-C a100), il faut spécifier --cpus-per-task=8 pour réserver 1/8 de la mémoire du nœud par GPU (si 1 tache par GPU). Sur la partition gpu_p6 (-C h100), il faut spécifier --cpus-per-task=24 pour réserver 1/4 de la mémoire du nœud par GPU (si 1 tache par GPU). Ainsi vous serez cohérent avec la configuration des nœuds utilisés et éviterez une surfacturation d'heures. Vous pouvez consulter notre documentation à ce sujet : Allocation mémoire avec Slurm.
  • --other-options peut contenir toutes les options Slurm usuelles de configuration des travaux (--time=, etc ) : voir la documentation sur les scripts batch de soumission dans la rubrique Exécution/Contrôle de travaux.
  • Les réservations ont toutes des ressources définies par une partition et une "Qualité de Service" QoS (Quality of Service) positionnées par défaut dans Slurm. Vous pouvez en modifier les limites en spécifiant une autre partition et/ou une QoS comme indiqué dans notre documentation détaillant les partitions et les Qos GPU.
  • Pour les comptes multi-projets ainsi que ceux ayant des heures CPU et GPU, il est indispensable de spécifier l'attribution d'heures sur laquelle décompter les heures de calcul du travail comme indiqué dans notre documentation détaillant la gestion des heures de calcul pour vous assurer que les heures consommées par vos travaux soient décomptées de la bonne attribution.

Réservation de ressources réutilisables pour plusieurs exécutions interactives

Chaque exécution interactive démarrée comme décrit dans les sections précédentes correspond à un travail différent. Comme tous les travaux, ils sont susceptibles d'être placés en attente pendant un temps plus ou moins long si les ressources de calcul ne sont pas disponibles.

Si vous souhaitez enchaîner plusieurs exécutions interactives, il peut être pertinent de préalablement réserver des ressources qui pourront être réutilisées pour plusieurs exécutions. Vous devrez alors attendre que les ressources soient disponibles une seule fois au moment de la réservation et non pour chaque exécution.

La réservation des ressources se fait via la commande salloc comme illustré ci-dessous pour 4 tâches.

salloc --ntasks=4 --hint=nomultithread [--other-options]

Les options sont les mêmes que pour la commande srun (cf. sections ci-dessus).

La réservation devient utilisable après l'allocation des ressources :

salloc: Pending job allocation 1367065
salloc: job 1367065 queued and waiting for resources
salloc: job 1367065 has been allocated resources
salloc: Granted job allocation 1367065

Vous pouvez vérifier que votre réservation est bien active grâce à la commande squeue, et obtenir des informations complètes sur l'état du travail avec la commande scontrol show job <identifiant du travail>.

Vous pouvez alors démarrer des exécutions interactives en utilisant la commande srun :

$ srun [--other-options] ./code
Remarque

Si vous ne précisez aucune option pour la commande srun, les options utilisées pour le salloc (par exemple le nombre de tâches) seront utilisées par défaut.

Attention
  • Après avoir réservé des ressources avec salloc, vous êtes toujours connecté sur la frontale (vous pouvez le vérifier en utilisant la commande hostname). Il est impératif d'utiliser la commande srun pour que vos exécutions utilisent les ressources réservées.
  • Si vous oubliez de libérer la réservation, la durée d'allocation maximale (par défaut ou spécifiée avec l'option --time) est appliquée et autant d'heures de calcul sont décomptées sur le projet que vous avez spécifié. Il est donc nécessaire de le faire explicitement :
$ exit
exit
salloc: Relinquishing job allocation 1367065