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/.