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.
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
sallocpour effectuer une réservation de ressources CPU ou GPU permettant ensuite d'effectuer plusieurs exécutions.
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
--ptypermet d'obtenir un terminal interactif et la commande passée àsrunest un shell (icibash). - L'option
--hint=nomultithreadassure 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-optionspeut 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.
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
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 à
srunest alors un exécutable. - L'option
--hint=nomultithreadassure 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-optionspeut 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
--ptypermet d'obtenir un terminal interactif et la commande passée àsrunest un shell (icibash). - L'option
--hint=nomultithreadassure 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=10permet 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=3pour 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=8pour 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=24pour 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-optionspeut 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.
MPI n'est actuellement pas utilisable dans cette configuration.
Pour quitter le mode interactif, utilisez la commande exit :
bash-4.2$ exit
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 à
srunest alors un exécutable. - L'option
--hint=nomultithreadassure 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=10permet 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=3pour 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=8pour 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=24pour 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-optionspeut 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.
- Exemple salloc CPU
- Exemple salloc GPU
salloc --ntasks=4 --hint=nomultithread [--other-options]
salloc --nodes=1 --ntasks-per-node=4 --cpus-per-task=10 --gres=gpu: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
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.
- Après avoir réservé des ressources avec
salloc, vous êtes toujours connecté sur la frontale (vous pouvez le vérifier en utilisant la commandehostname). Il est impératif d'utiliser la commandesrunpour 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