Utilisateur multi-projets
Sur la machine Jean Zay, chaque utilisateur dispose d'un unique login mais celui-ci peut être rattaché à plusieurs projets scientifiques.
Mes projets
Sur la machine Jean Zay, chaque projet scientifique est identifié grâce
à un groupe Unix. L'IDRIS a développé la commande idrproj vous permettant de lister vos projets et de sélectionner un projet (consulter idrproj -h). Vous avez également accès à la commande idrenv listant les variables d'environnement définies pour chaque projet (consulteridrenv -h pour plus de détails).
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
grp1etgrp2), - le numéro de projet IDRIS (ici
123456et167890), 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 sélectionné 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. Dans l'exemple précédent, la commande nécessaire pour changer le groupe par défaut de grp2 à grp1 serait:
idrproj -d grp1Password:Default project changed to grp1
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]
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.
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 et de vous reconnecter sur la machine 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 "Changer le projet actif" plus bas.
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;
- La variable d'environnement
$IDRPROJréférence le projet actif auquel vous êtes actuellement rattaché (echo $IDRPROJ). - Les variables dont les noms comportent la chaîne de caractères
CCFRsont définies dans le but d'offrir une harmonisation entre les divers centres de calcul nationaux. - Les variables dont les noms commencent par
grp1,grp2permettent 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]) pour la session de travail en cours, 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]
Dans ce cas, le changement de projet actif (ici
gpr1) est effectif uniquement pour la session de travail dans
laquelle la commande est exécutée.
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:
Remarque : La variable d'environnementecho $IDRPROJgrp2$IDRPROJréférence le projet actif auquel vous êtes actuellement rattaché; - soit via la commande IDRIS
idrproj:
Remarque : l'un de vos projets est automatiquement sélectionné par défaut (indiqué paridrproj
Available projects:------------------- grp1 (123456) grp2 (167890) [default] [active][default]).
- soit via le contenu de la variable d'environnement
-
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
- Pour un changement de projet actif uniquement valide pour la
session de travail courante :
-
Puis vérifier que le changement est bien effectué :
- soit via le contenu de la variable d'environnement
$IDRPROJ:echo $IDRPROJgrp1 - soit via la commande IDRIS
idrproj:idrproj
Available projects:------------------- grp1 (123456) [active] grp2 (167890) [default]
- soit via le contenu de la variable d'environnement
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 commandessbatch,sallocousrun, - et en prenant soin d'indiquer le bon projet (
my_project) et le type d'heures correct (cpu,v100,a100ouh100):- Ainsi pour des heures de type CPU, soit en argument des commandes
sbatch,sallocetsrun:
soit via la directive Slurm dans un job batch :sbatch ... --account=my_project@cpu job_cpu.slurm#SBATCH --account=my_project@cpu - Et pour des heures de type GPU (ici
v100), soit en argument des commandessbatch,sallocetsrun:
soit via la directive Slurm dans un job batch :sbatch ... --account=my_project@v100 job_gpu.slurm#SBATCH --account=my_project@v100
- Ainsi pour des heures de type CPU, soit en argument des commandes
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.