un manuel

Transcription

un manuel
Utilisation de la grappe de serveurs de la FSB
dernière mise à jour le 28 avril 2016
1 Lancer une tâche
Une fois la connexion terminée, on travaille à partir du répertoire data et non pas dans le dossier home, qui est
le dossier par défaut quand on se connecte. On rappelle que pour se déplacer dans le répertoire data depuis le
répertoire home, on exécute
cd /data-malc1/username
cd /srv/share/malc1/data/username
Pour lancer un job (simulation, calculs), il faut créer un fichier shell, habituellement avec l’extension .sh.
On lance le script sub.sh en exécutant sbatch sub.sh , ce dernier contenant typiquement :
#!/bin/bash
#SBATCH
#SBATCH
#SBATCH
#SBATCH
#SBATCH
#SBATCH
#SBATCH
#SBATCH
#SBATCH
#SBATCH
#SBATCH
#SBATCH
#SBATCH
-o job-%N-%j.out
-e job-%N-%j.error
-J mySim
-N 1
-n 1
-c 1
-A ma2
-p ma2
--qos hp1m
-t 0-20:00:00
--mem-per-cpu=2048
--mail-type=ALL
[email protected]
#source /software/ENV/set_R-***-gnu-base.sh
SIM_ID="mySim058"
R="/software/base/R-*.*.*-gnu/bin/R"
DAT="/data-malc1/username/Simulations_GEV/$SIM_ID"
SCR="/scratch/username/$SIM_ID"
# 1 - creation du dossier scratch et copie des fichiers
2
mkdir -p $SCR
cp -rp $DAT/* $SCR/.
# 2 - compilation du code C
cd $SCR
$R CMD SHLIB src/GEV_MCMC.c
# 3 - simulation
$R CMD BATCH --vanilla MAIN.R MAIN.Rout
# 4 - copie des resultats et nettoyage
cp MAIN.Rout $DAT
cp Result.RData $DAT
rm -rf $SCR
L’en-tête est constitué des commandes qui mettent en place les paramètres pour le cluster : la première ligne
est un préambule, suivie des options
-o : fichier de sortie où sont écrits tous les messages issus du système et de R ;
-e : fichier de sortie où sont écrits tous les messages d’erreurs du système ;
-J : nom du job ;
-N : nombre de nœuds sur lesquels lancer le job (généralement 1) ;
-n : nombre de tâches à lancer (généralement 1) ;
-c : nombre de processeurs par tâche : 1, sauf si le job est parallélisé ;
-A : compte sur lequel lancer le job (identique au nom de la partition -p) ;
-p : partition sur laquelle lancer le job ;
--qos : priorité du job dans la file d’attente ;
-t : temps maximal reservé pour le job ;
--mem-per-cpu : mémoire allouée par processeur ;
--mail-type : (optionnel) type d’alertes e-mail envoyées ;
--mail-user : adresse e-mail pour les alertes.
Suivent le chargement des resources R et la définition de variables, utilisées en les préfixant avec $. Au point 3,
on a ajouté l’option --vanilla pour indiquer à R de ne pas sauvegarder l’espace de travail ni l’historique des
commandes, ni lire les fichiers d’environnement et ne pas charger l’environnement de travail précédent ; on
spécifie MAIN.Rout comme fichier de sortie, si bien que le fichier indiqué sous l’option -o ne contiendra que
les sorties système. Au point 4, on peut aussi considérer l’alternative consistant à copier l’entier du répertoire
scratch :
cp -r $SCR $DAT
La gestion de la priorité dépend de la nature du job : si celui-ci est envoyé sur un nœud sur lequel on est prioritaire, alors on peut imposer une priorité haute (hp1m) ou moyenne (mp1m) pour l’exécution du job ; en envoyant
le job sur la partition batch, c’est-à-dire lorsqu’on veut utiliser le maximum de ressources du cluster, les valeurs
de --qos sont q1w (standard) et r1w, pour relancer automatiquement les jobs tués par des jobs prioritaires.
Après le temps maximal -t alloué au job, celui-ci est tué. On conseille de prévoir une fois et demie à deux fois
le temps estimé sur notre ordinateur. La syntaxe est j-hh:mm:ss, avec une valeur maximale 31-00:00:00.
3
Le maximum de mémoire allouée par CPU est la mémoire totale disponible divisée par le nombre de CPUs utilisées. Attention ! chaque partition possède ses propres caractéristiques (cf. ci-dessous la description de la commande sinfo). Une tâche est refusée si ses prétentions excèdent la capacité disponible (en temps, en nombre
de CPUs ou en mémoire).
Les alertes courriel que le job peut envoyer sont de plusieurs sortes : lorsqu’il débute (BEGIN), quand il est
terminé (END), quand il a rencontré une erreur fatale (FAIL), quand il retourne dans la queue (REQUEUE). Pour
recevoir tout type d’alerte, on peut imposer ALL.
Pour lancer un code R, on exécute Rscript Sim.R, ou comme ci-dessus, $R Sim.R, en ayant défini la variable
R convenablement, en faisant suivre l’une ou l’autre commande de ses options.
Plusieurs commandes peuvent également être utiles pour obtenir des informations sur le cluster :
— sinfo donne des informations sur le cluster et les différents nœuds. Des informations plus complètes
peuvent être trouvées en ajoutant les options
-e --format="%20N %.5D %9P %11T %.4c %.8z %.10m %.8d %.6w %26f %15R"
— squeue donne la liste des jobs qui ont été envoyés sur le cluster. P signifie pending, autrement dit que le
job est en attente, et R signifie running, le job tourne. On obtient plus de détails avec
squeue -lu username
qui donne des informations sur les jobs lancés par username.
— scancel jobID pour annuler un job lancé, où jobID est le numéro du job qui se trouve dans la liste
(première colonne).
Pour finir, on peut se déplacer dans le nœud sur lequel le job est en train d’être exécuté en s’y connectant via
ssh depuis malc1, par exemple ssh ma05. La commande top peut alors être utile pour observer les processus
en cours d’exécution ; exit nous fait revenir au niveau supérieur, à savoir malc1.
2 Utiliser R et C sur le cluster
Pour pouvoir utiliser R, il faut d’abord charger la bonne librairie :
source /software/ENV/set_R-***-gnu-base.sh
Attention cependant, car chaque nouvelle mise à jour vers une nouvelle version de R implique un changement
du nom de la source. On peut ensuite ouvrir R en tapant R dans le terminal.
Il faut installer tous les paquets de R avant de pouvoir les utiliser sur le cluster, à l’identique de son propre
ordinateur :
install.packages("monPackage")
pour installer le paquet monPackage. Ne possédant pas les droits d’administrateur sur le cluster, cette commande crée un répertoire local dans lequel les nouveaux paquets sont installés. Le serveur ne supporte pas (en
date d’avril 2016) les connexions https. Le fournisseur le plus près est l’ETHZ (options 18-70).
Pour pouvoir utiliser un fichier en langage C, il faut le compiler sur le cluster :
R CMD SHLIB code.c -o code.so
3 Obtenir un accès
La personne de contact pour la section math est Matteo Guglielmi ; s’il est absent, Daniel Jana, responsable
pour la section de chimie, est également habilité à donner les accès au cluster. Il suffit de demander l’ouverture
d’un compte, avec accès à la partition ma2 typiquement.
4
4 Ouvrir une session
Pour ouvrir une session sécurisée avec le cluster, il faut ouvrir un terminal et saisir :
ssh [email protected]
où malc1 est le serveur « porte d’entrée » à partir duquel on peut communiquer avec le reste du cluster. L’extension .epfl.ch peut généralement être omise. Il faut encore saisir son mot de passe pour que la session
s’ouvre.
Pour les utilisateurs de Linux, le logiciel SLURM (Simple Linux Utility for Resource Management) permet d’avoir
le même type de commandes sur son ordinateur que sur le cluster. Par exemple, le login se fait comme suit :
slogin [email protected]
On peut modifier son mot de passe en tapant ypasswd et en suivant les instructions données à l’écran. Les fichiers d’aide README.FIRSTLOGIN, README.SOFTWARE et README.CLUSTER sont enregistrés sur le serveur d’entrée dans le répertoire /software. Ils donnent des informations utiles, quoique minimales. On peut également
s’éviter de saisir son mot de passe à chaque login sur le cluster et à chaque copie de fichier/dossier sur le cluster
en suivant la recette suivante (en remplaçant username par son identifiant personnel) :
1. Vérifier si une clef publique est déjà présente sur son ordinateur :
ls ~/.ssh/
2. Créer le couple identité–clef si nécessaire (c.-à-d. ~/.ssh/id_rsa.pub n’existe pas encore) :
ssh-keygen -q -t rsa -f ~/.ssh/id_rsa -N ""
3. Copier la clef publique sur le serveur distant :
scp ~/.ssh/id_rsa.pub [email protected]:pubkey.txt
ssh [email protected]
mkdir ~/.ssh
chmod 700 .ssh
cat pubkey.txt >> ~/.ssh/authorized_keys
rm ~/pubkey.txt
chmod 600 ~/.ssh/*
exit
4. Mémoriser la clef privée sur son ordinateur :
ssh-add
5. Tester la connection :
ssh [email protected]
exit
Pour changer le dossier à l’accès, il est possible de modifier le fichier .bashrc dans le répertoire home et d’ajouter la ligne
cd /data-malc1/username
en remplaçant son utilisateur. Notez que les fichiers home et data sont partagés sur SuperB. Pour accéder au
menu d’accueil, il vous suffira par la suite de changer de répertoire via /home-malc1/username.
5
5 Commandes utiles
Toutes les commandes Unix fonctionnent. Ici, quelques commandes beaucoup utilisées :
cd : revient à la racine ; suivi de .., accède au répertoire parent ;
cd chemin/du/dossier : accède au répertoire chemin/du/dossier ;
ls : liste tous les fichiers du répertoire dans lequel on se trouve ;
ls -l ou ll : liste tous les fichiers du répertoire avec leurs caractéristiques ;
cp source destination : copie des fichiers ou des dossiers sur un même ordinateur ;
scp (cf. § 6) : copie des fichiers ou des dossiers sur un ordinateur distant ;
rm nom_du_fichier : efface le fichier nom_du_fichier ;
pwd : montre l’adresse du répertoire courant ;
mkdir new_file : crée le dossier new_file dans le répertoire courant ;
cat file.txt : écrit dans le terminal le contenu de file.txt.
Certaines options (à écrire juste après la commande) sont également souvent utilisées :
-r : porte sur l’entier d’un dossier et de son contenu (récurrence) ;
-f : omet les questions du type « êtes-vous sûr de vouloir supprimer... ? » (forcer) ;
-p : préserve les attributs (p.ex. droits d’accès) lors de la copie de fichiers.
6 Copier des fichiers entre ordinateurs distants
Pour copier le fichier fichier.txt de notre ordinateur vers un des dossiers du cluster, il faut ouvrir un nouveau
terminal, se déplacer dans le répertoire qui contient le fichier à copier, et saisir
scp fichier.txt [email protected]:~/chemin/de/destination
respectivement
scp -r dossier [email protected]:~/chemin/de/destination
afin de copier un dossier entier. Pour copier le fichier fichier.txt depuis le cluster vers le dossier actuel de
mon ordinateur, on exécute la commande suivante :
scp [email protected]:~/data-malc1/username/fichier.txt .
Le point en fin de ligne indique le répertoire courant. Il peut aussi être remplacé par un chemin. Pour copier
plusieurs fichiers d’un coup :
scp [email protected]:/data-malc1/{ file.txt, file2.txt, file3.txt } .
Lorsqu’on désire copier de nombreux fichiers possédant des noms similaires, on peut exécuter plus simplement, par exemple pour exporter des résultats :
scp [email protected]:/data-malc1/username/*.RData destination
où l’astérisque remplace la partie variable des noms des fichiers.
On peut modifier des fichiers directement sur le cluster en tapant vi sub.sh ou vim sub.sh (affiche les motsclefs en surbrillance), ouvrant un éditeur dans le terminal. Taper a pour éditer le fichier, puis ESC et :wq pour
enregistrer les modifications et fermer l’éditeur. On trouve de la documentation sur Internet, et même un jeu
(http://vim-adventures.com) grâce auquel apprendre les commandes vim.
Nota bene : l’extension des fichiers (.txt, .sh, .r) n’a aucune importance, c’est ce qu’on en fait qui détermine
leur usage !
6
7 Système de priorités
Les comptes de la chaire viennent avec un accès haute priorité sur certaines partitions. Pour afficher les permissions individuelles, taper
sacctmgr list associations format=Account,User,
Fairshare,Partition,QoS,DefaultQoS tree | grep $USER
batch
cmcs1
cmcs2
iacs1
ma1
ma2
utilisateur
utilisateur
utilisateur
utilisateur
utilisateur
utilisateur
1
1
1
1
1
1
batch
cmcs1
cmcs2
iacs1
ma1
ma2
c1w,r1w
hp1m,mp1m
hp1m,mp1m
hp1m,mp1m
hp1m,mp1m
hp1m,mp1m
c1w
mp1m
mp1m
mp1m
mp1m
mp1m
Le système de priorité (Qos) est
c1w :
0 points
7 jours tâches remises automatiquement dans la file d’attente
r1w :
0 points
7 jours
c3d :
0 points
3 jours
mp1m : 9000 points 31 jours priorité moyenne
hp1m : 18000 points 31 jours haute priorité
Les tâches c3d, ne peuvent être tuées par des taches à haute priorité (pour la partition freeway seulement).
Seules les tâches c1w sont remises automatiquement dans la file d’attente, les autres sont annulées.
La formule d’allocation des tâches est jobage + fairshare + QOS, ou jobage est une échelle de 0 à 2000 points,
qui augmente linéairement et est maximale après 24 heures. La composante fairshare est une échelle de 0 à
6000 points qui reflète l’utilisation individuelle de l’utilisateur et décroît si les ressources sont utilisés. La durée
de demi-vie est fixée à trois jours.
8 Quelques astuces
— Le répertoire data a une limite de stockage très élevée (100Go) alors que le répertoire home ne peut
stocker que 2Go de données ; il est en fait réservé pour les installations logicielles locales, comme les
paquets R supplémentaires installés par l’utilisateur.
— Créer des dossiers Jobs, Rcode et Results. Dans le dossier Job enregistrer systématiquement les commandes lancées sur le cluster. Dans le dossier Rcode, sauver les codes R et dans le dossier Results,
sauver les résultats des simulations.
— Un bon site de référence à propos de SLURM, est hébergé par le Lawrence Livermore National Laboratory : https://computing.llnl.gov/linux/slurm/.