Jean Zay : guide de l'utilisateur multi-projet

Mes projets

Sur la machine Jean Zay, chaque projet scientifique est identifié grâce à un groupe Unix. L'IDRIS a développé les commandes idrproj (voir idrproj -h) et idrenv (voir idrenv -h) vous permettant de lister vos projets et/ou de sélectionner un projet.

La commande idrproj

Par défaut, la commande idrproj affiche les divers groupes Unix référençant vos divers projets. Exemple avec un login rattaché à deux projets “grp1” et “grp2” :

$ idrproj
 
Available projects:
-------------------
  grp1 (123456) 
  grp2 (167890) [default][active]

Notez que pour chaque projet, la commande indique :

  • le groupe Unix de référence (ici “grp1” et “grp2”),
  • le numéro de projet IDRIS ( ici “123456” et “167890”) lequel est différent du numéro de projet DARI,
  • quel projet est actif (signalé par [active]) : projet sous lequel vous êtes actuellement en train de travailler,
  • et quel projet est par défaut (signalé par [default]) : projet automatiquement sélectionné lors de chaque connexion sur la machine et donc actif par défaut.

Changer le projet par défaut

Pour changer de projet par défaut ([default]), utilisez l'option -d de la commande idrproj. Avec l'exemple précédent, cela donne :

$ idrproj -d grp1
Password:
Default project changed to grp1

Notez que le changement de projet par défaut nécessite le mot de passe utilisateur.

Puis vérification du projet par défaut :

$ idrproj
 
Available projects:
-------------------
  grp1 (123456) [default]
  grp2 (167890) [active]

Attention : ceci ne change pas le projet actif (ici “gpr2”) de la session courant donc vous travaillez toujours sous le même projet ! Cela dit, le changement de projet par défaut reste effectif pour les connexions ultérieures sur la machine. Par conséquent, ce nouveau projet par défaut (ici “gpr1”) sera le projet actif pour toutes les nouvelles connexions. Ainsi, après reconnexion, l'affichage de la commande idrproj pour cet exemple ressemblera à ceci :

$ idrproj
 
Available projects:
-------------------
  grp1 (123456)  [default] [active]
  grp2 (167890)

Le changement de projet par défaut est particulièrement utile pour basculer sur un autre projet si votre projet actuel n'a plus d'heures de calcul (allocation d'heures épuisée ou projet non renouvelé) ou si vous désirez calculer/travailler sur un autre projet pendant quelques temps.

Remarque : il peut arriver que vous n'ayez plus de projet par défaut (et donc plus de projet actif) si celui que vous aviez a été supprimé car non renouvelé. Les variables IDRPROJ, WORK, STORE et SCRATCH ne seront alors plus définies. Il vous suffit d'appliquer la procédure de changement de projet par défaut ci-dessus pour rétablir un environnement de calcul correct.

Notez que vous pouvez aussi activer un projet temporairement (i.e. pour une session de travail uniquement) comme indiqué dans le paragraphe ci-dessous “Changer le projet actif”.

La commande idrenv

Par défaut, la commande IDRIS idrenv affiche simplement toutes les variables d'environnement (WORK, SCRATCH, STORE, espaces “communs”, IDRPROJ) relatives au projet par défaut qui est automatiquement sélectionné et activé la connexion (dans cet exemple “grp1”) ainsi que toutes les variables d'environnement référençant les répertoires ad-hoc de vos autres projets (dans cet exemple “grp2”) :

$ idrenv
export ALL_CCFRSCRATCH=/...scratchpath.../grp1/commun; 
export ALL_CCFRSTORE=/...storepath.../grp1/commun; 
export ALL_CCFRWORK=/...workpath.../grp1/commun; 
export CCFRHOME=/...homepath.../gengrp/login; 
export CCFRSCRATCH=/...scratchpath.../grp1/login; 
export CCFRSTORE=/...storepath.../grp1/login; 
export CCFRWORK=/...workpath.../grp1/login; 
export HOME=/...homepath.../gengrp/login; 
export IDRPROJ=grp1; 
export grp1_ALL_CCFRSCRATCH=/...scratchpath.../grp1/commun; 
export grp1_ALL_CCFRSTORE=/...storepath.../grp1/commun; 
export grp1_ALL_CCFRWORK=/...workpath.../grp1/commun; 
export grp1_CCFRSCRATCH=/...scratchpath.../grp1/login; 
export grp1_CCFRSTORE=/...storepath.../grp1/login; 
export grp1_CCFRWORK=/...workpath.../grp1/login; 
export grp2_ALL_CCFRSCRATCH=/...scratchpath.../grp2/commun; 
export grp2_ALL_CCFRSTORE=/...storepath.../grp2/commun; 
export grp2_ALL_CCFRWORK=/...workpath.../grp2/commun; 
export grp2_CCFRSCRATCH=/...scratchpath.../grp2/login; 
export grp2_CCFRSTORE=/...storepath.../grp2/login; 
export grp2_CCFRWORK=/...workpath.../grp2/login; 
export SCRATCH=/...scratchpath.../grp1/login; 
export STORE=/...storepath.../grp1/login;  
export WORK=/...workpath.../grp1/login; 

Remarques :

  • La variable d'environnement IDRPROJ référence le projet actif auquel vous êtes actuellement rattaché (echo $IDRPROJ).
  • Les variables dont les noms comportent la chaîne de caractères “CCFR” sont définies dans le but d'offrir une harmonisation entre les divers centres de calcul nationaux.
  • Les variables dont les noms commencent par “grp1”, “grp2” permettent d'accéder aux données (répertoires) des projets correspondants quel que soit celui sur lequel vous êtes en train de travailler.

Changer le projet actif

Pour changer de projet actif (signalé par [active]), vous devez utiliser l'option -d de la commande IDRIS idrenv et passer le tout en argument de la commande Unix eval. Ainsi, avec l'exemple initial, pour activer le projet “grp1” :

$ eval $(idrenv -d grp1)

puis vérification du projet actif :

$ idrproj
 
Available projects:
-------------------
  grp1 (123456) [active]
  grp2 (167890) [default]

Attention : le changement de projet actif (ici “gpr1”) est effectif uniquement pour la session de travail dans laquelle la commande est exécutée.

Remarques :

  • Ceci ne change pas le projet par défaut (ici “gpr2”) qui reste alors le projet actif pour les connexions ultérieures sur la machine. Ainsi, après reconnexion, l'affichage de la commande idrproj pour cet exemple ressemblera à ceci :
    $ idrproj
     
    Available projects:
    -------------------
      grp1 (123456)
      grp2 (167890)  [default] [active]
  • Le projet par défaut n'étant pas changé lors du changement de projet actif, l'affichage de la commande idrenv (sans option) ne correspondra alors pas à celui du projet actif. Pour obtenir le bon affichage, il faut alors utiliser la commande idrenv -d $IDRPROJ.

Les bonnes pratiques en multi-projets

  • La première des choses à faire est de toujours vérifier à quel projet vous êtes actuellement rattaché :
    • soit via le contenu de la variable d'environnement IDRPROJ :
      $ echo $IDRPROJ
      grp2

      Remarque : La variable d'environnement IDRPROJ référence le projet actif auquel vous êtes actuellement rattaché;

    • soit via la commande IDRIS idrproj :
      $ idrproj
       
      Available projects:
      -------------------
        grp1 (123456) 
        grp2 (167890) [default] [active]

      Remarque : l'un de vos projets est automatiquement sélectionné par défaut (indiqué par [default]).

  • Ensuite, si nécessaire, basculer sur un autre de vos projets sur lequel vous désirez travailler :
    • Pour un changement de projet actif uniquement valide pour la session de travail courante :
      $ eval $(idrenv -d grp1)
    • Pour un changement de projet par défaut qui ne sera actif que pour les connexions suivantes donc impliquant une déconnexion/reconnexion :
      $ idrproj -d grp1
  • Puis vérifier que le changement est bien effectué :
    • soit via le contenu de la variable d'environnement IDRPROJ :
      $ echo $IDRPROJ
      grp1
    • soit via la commande IDRIS idrproj :
      $ idrproj
       
      Available projects:
      -------------------
        grp1 (123456) [active]
        grp2 (167890) [default]

Ainsi, vous vous assurez de créer vos fichiers dans les répertoires WORK, SCRATCH, STORE, espaces “communs” qui sont bien ceux rattachés au projet actuel : vous pouvez alors travailler (créer/éditer des fichiers, compiler, …) avec un environnement parfaitement défini.

Par contre, pour soumettre des travaux SLURM ou pour les exécutions interactives, vous devrez impérativement préciser l'attribution d'heures sur laquelle doit être décomptées les heures consommées par vos calculs. Sans cette précision, vous risquez de décompter les heures consommées sur un autre projet que celui sur lequel vous êtes en train de travailler.

Vous devrez donc obligatoirement ajouter :

  • soit la directive SLURM #SBATCH --account=... dans l'en-tête du script de soumission,
  • soit l'option --account=... aux commandes sbatch, salloc ou srun,
  • et en prenant soin d'indiquer le bon projet (my_project) et le type d'heures correct (cpu ou v100):
    • Ainsi pour des heures de type cpu :
      # En argument des commandes sbatch, salloc et srun :
      $ sbatch ... --account=my_project@cpu job_cpu.slurm
       
      # Ou via la directive SLURM dans un job batch :
      #SBATCH --account=my_project@cpu
    • Et pour des heures de type gpu v100 :
      # En argument des commandes sbatch, salloc et srun :
      $ sbatch ... --account=my_project@v100 job_gpu.slurm
       
      # Ou via la directive SLURM dans un job batch :
      #SBATCH --account=my_project@v100

Remarque : la valeur de my_project correspond à la valeur de la variable d'environnement IDRPROJ qui référence le projet actif auquel vous êtes actuellement rattaché : echo $IDRPROJ.