====== Accès aux GPUs sur Grid'5000 ====== "Si rien ne marche, lisez le mode d'emploi." ===== Inscription ===== Nous allons utiliser les GPUs de la plateforme [[https://www.grid5000.fr|Grid'5000]]. \\ Consulter : https://www.grid5000.fr/w/Tutorial_or_Teaching_Labs_Trainee_HowTo \\ On ne peut se connecter à Grid'5000 qu'avec une clé SSH. Si vous n'en avez pas, il faut générer une paire de clés SSH avec la commande : ssh-keygen -t rsa à faire sur la machine avec laquelle vous vous connecterez. Les clés publiques et privées sont stockées pas défaut dans le répertoire ".ssh". Pour la création de vos comptes sur Grid'5000 pour le travail sur GPU pour le projet, j'ai besoin pour chacun d'entre vous d'une ligne au forma "CSV" comprenant votre prénom, votre nom et votre adresse email à l'UGA. Exemple : John, Doe, john.doe@trainee.unix-lambda.fr Carrie, Mathison, carrie.mathison@trainees.univ-lambda.fr Une fois la validation faite, vous allez recevoir un mail vous donnant quelques instructions pour la configuration de votre accès, notamment pour le chargement votre clé SSH publique. Vous pourrez ensuite accéder au site. Attention : vous aurez accès à tout Grid'5000 mais vous ne devrez accéder qu'aux ressources prévues pour l'exécution du projet. \\ ===== Configuration de la connexion sur votre machine (personnelle ou de l'UFR) ===== Vous vous connecterez directement sur la machine frontale du site de Lille à travers le "bastion" "access" avec la commande : ssh lille.g5k Pour que cela fonctionne, il faut créer (ou modifier) un fichier "config" dans votre répertoire ".ssh" avec le contenu suivant : Host g5k User Hostname access-north.grid5000.fr Host *.g5k User ProxyCommand ssh g5k -W "`basename %h .g5k`:%p" Host * ServerAliveInterval 60 Si vous utilisez powershell, il faut remplacer les lignes 4 à 6 ci-dessus par : Host lille.g5k User ProxyCommand C:\WINDOWS\System32\OpenSSH\ssh.exe g5k -W "lille:%p" ce qui ne marchera évidement que pour lille mais vous n'avez pas besoin d'accéder aux autres sites. {{:g5k.png?600|}} ===== Configuration de l'accès à l'installation pytorch sur Grid'5000 ===== Tout est pré-installé mais il faut configurer les accès. Commencez par vous connecter à la frontale de Lille comme indiqué ci-dessus. Pour accéder à l'installation via conda (dans le terminal ou dans le .bashrc) : export PATH="/srv/storage/irim@storage1.lille.grid5000.fr/anaconda3/bin:$PATH" Si le .bashrc n'existe pas, il faut le créer. S'il n'existe pas, il faut aussi créer un fichier .bash_profile. # include .bashrc if it exists if [ -f ~/.bashrc ]; then . ~/.bashrc fi Ce fichier commande le chargement du .bashrc au démarrage d'un terminal. Il n'est **pas** appelé en mode batch. Accès au noyau python 3.12 (en test): conda init bash Ignorer les messages et relancer le terminal puis : conda activate py312 python -m ipykernel install --user --name=py312 ===== Configuration de l'accès au service de "notebooks" sur Grid'5000 ===== Pour utiliser le service de notebooks à distance avec l'installation pytorch, il faut entrer les lignes de commande suivantes : cd mkdir -p .local/share/jupyter/kernels ln -s /srv/storage/irim@storage1.lille.grid5000.fr/.local/share/jupyter/kernels/python3 .local/share/jupyter/kernels Pour ne pas recharger inutilement les données images, dans votre répertoire de travail : ln -s /srv/storage/irim@storage1.lille.grid5000.fr/ens/data . ===== Jobs container ===== Pour garantir lal réservation d'un nombre suffisant de GPU sur le site de Lille pendant les séances de TP, je réserve normalement un bloc de ressources sous la forme d'un job container. Lors de votre prore demande de ressource, soit directement par aorsub soit par l'intermédiaire du service de notebook, vous devez wous connecter dans le container s'il n'est pas saturé. Je réserve les containers avec une marge de 15 minutes avant et après la fin du cours. Quand vous réservez dans un conteneur, il faut prévoir un walltime (durée maximum du job) inférieure à la durée restante avant l'expiration du container sinon votre demande restera en attente et ne partira en fait jamais. ===== Accès au service de "notebooks" à distance (à privilégier) ===== Utilisez le lien : https://intranet.grid5000.fr/notebooks Cliquez "Start My Server" puis "Launch Server" Modifiez (à chaque fois) les options suivantes comme indiqué : \\ Select a site : -> Lille \\ Requested Resources : -> /gpu=1 \\ Walltime : 1:30 (ou moins selon la durée restante dans le conteneur) \\ Container ID (for inner jobs): **1971558** (13/03/2024 de 09h30 à 11h30) En ce qui concerne le "Walltime", c'est la durée demandée. Attention à la choisir inférieure à la durée restante dans le container si vous en utilisez un. Vous devez utiliser le conteneur prévu pour le cours s'il y en a un et qu'il n'est pas complet. Si vous voulez travailler en dehors des heures des TP, c'est possible, vous laissez alors le champs vide. Notez que le service de notebook vous permet d'une part d'éditer des fichiers à distance et d'autre part d'ouvrir des terminaux sur le nœud sur lequel tourne votre notebook. Donc, même si c'est possible, vous n'avez en principe pas besoin de démarrer directement des sessions avec la commande "oarsub". **Il ne faut pas lancer de session interactive ou de job en batch qui franchisse les frontières jour-nuit (19h et 9h). N'utilisez pas plus d'un GPU à la fois.** ===== Visualiser l'état des clusters GPU : ===== Pour visualiser l'état du cluster : https://intranet.grid5000.fr/oar/Lille/drawgantt-svg/ \\ Sélectionner les options base resource : "gpu" et ressource filter : "GPU hosts only" \\ Vous pouvez éventuellement trouver le numéro du container dans ce diagramme ===== Information GPU ===== La commande suivante vous permet d'avoir des informations sur les GPUs sur votre nœud (vous n'en utilisez qu'un) : nvidia-smi Les GPUs auxquels vous avez accès sont des NVidia P100 : 3584 coeurs CUDA @ 1582 MHz, 10.6 Tflops (32 bits). ===== Connexion directe sur les nœuds de calcul ===== **Privilégiez l'acces par le service de notebooks. Vous pouvez aussi ouvrir un terminal à distance dans le navigateur par ce service. Vous n'avez donc pas forcément besoin de connexion directe.** Vous pouvez ouvrir un job dans un container avec la commande : oarsub -I -t inner=XXXXXXX -l gpu=1,walltime=01:30:00 -n gbgi9u07 Le numéro "inner" est celui du container. Il changera à chaque séance. Vous ne devez demander qu'un seul tel job à la fois et ceci est exclusif avec le fait d'utiliser un notebook par le service de notebook (qui réserve indirectement un nœud pour vous). Si vous avez besoin de plusieurs terminaux associés à un même job, la première commande vous donne un numéro de job ; vous pouvez ensuite vous y connecter et y ouvrir un autre terminal en lançant la commande suivante avec le récupéré : Pour vous connecter à votre job réservé : oarsub -C Vous pouvez aussi utiliser cette commande pour vous connecter au job réservé pour vous par le service de notebook si vous en utilisez un. Si vous n'avez pas noté votre job_id lors de la réservation ou pour récupérer celui de votre notebook : oarstat | grep Pour ouvrir une session interactive en dehors des heures de TP : oarsub -I -p "cluster='chifflot'" -l gpu=1,walltime=1:00 -n gbgi9u07 Pour lancer un job en batch en dehors des heures de TP : oarsub -p "cluster='chifflot'" -l gpu=1,walltime=1:00 -n gbgi9u07 Si votre commande contient des espaces, il faut l'entourer de double quotes. \\ Attention : en mode batch, le .bashrc nest pas exécuté, il faut inclure dans vos scripts la ligne qui intègre miniconda3. \\ **Il ne faut pas lancer de session interactive ou de job en batch qui franchisse les frontières jour-nuit (19h et 9h).** \\ **N'utilisez pas plus d'un GPU à la fois.** Pour réserver un job sur un créneau à l'avance (à ajuster en fonction du créneau visé) : oarsub -r "2021-03-31 09:30:00" -p "cluster='chifflot'" -l /gpu=1,walltime=02:00:00 -n gbgi9u07 Pour réserver un container sur un créneau à l'avance (à ajuster en fonction du créneau visé) : oarsub -r "2021-03-31 09:30:00" -t cosystem -t container -p "cluster='chifflot'" -l /gpu=1,walltime=02:00:00 -n gbgi9u07 Réserver un container vous permet de lancer le serveur de notebook dedans quand il a démarré. \\ Vous n'avez droit qu'à deux réservations à l'avance et attention à ne pas franchir les frontières jour / nuit. Pour prolonger la durée d'un job en train de tourner, si c'est possible (1 demi-heure dans l'exemple): oarwalltime 0:30 Pour connaître le numéro de votre job, sur "lille.g5k" : oarstat | grep ===== Utiliser Jupyter sur Grid'5000 à partir d'un nœud réservé ===== **Cette procédure est maintenant obsolète, l'utilisation du service de notebook étant plus simple et recommandée** Il faut (au moins) trois terminaux: **Terminal 1** pour lancer jupyter sur un noeud GPU (voir ci-dessous): ssh lille.g5k oarsub -I .... jupyter notebook --ip=0.0.0.0 --no-browser **Terminal 2** pour le tunnel ssh entre votre navigateur et le notebook sur le noeud (à adapter, voir ci-dessous): ssh g5k -L 8888:chifflot-8.lille.grid5000.fr:8888 -v **Terminal 3** et plus pour les commandes diverses à lancer sur le **même** noeud GPU. Le est celui retourné par la commande "oarsub -I" dans le terminal 1 : ssh lille.g5k oarsub -C nvidia-smi .... Pour utiliser Jupyter sur Grid'5000, vous devez taper la commande suivante depuis un job sur un noeud (terminal 1 ci-dessus): jupyter notebook --ip=0.0.0.0 --no-browser La commande donne une sortie de ce genre : [I 18:17:40.920 NotebookApp] JupyterLab extension loaded from /srv/storage/irim@storage1.lille.grid5000.fr/anaconda3/lib/python3.7/site-packages/jupyterlab [I 18:17:40.920 NotebookApp] JupyterLab application directory is /srv/storage/irim@storage1.lille.grid5000.fr/anaconda3/share/jupyter/lab [I 18:17:40.921 NotebookApp] Serving notebooks from local directory: /home/gquenot [I 18:17:40.922 NotebookApp] The Jupyter Notebook is running at: [I 18:17:40.922 NotebookApp] http://chifflot-8.lille.grid5000.fr:8888/?token=c2e7159a4b91c70384146fe3a608ebf7b17555c158a67a9d [I 18:17:40.922 NotebookApp] or http://127.0.0.1:8888/?token=c2e7159a4b91c70384146fe3a608ebf7b17555c158a67a9d [I 18:17:40.922 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [C 18:17:40.932 NotebookApp] To access the notebook, open this file in a browser: file:///home/gquenot/.local/share/jupyter/runtime/nbserver-34949-open.html Or copy and paste one of these URLs: http://chifflot-8.lille.grid5000.fr:8888/?token=c2e7159a4b91c70384146fe3a608ebf7b17555c158a67a9d or http://127.0.0.1:8888/?token=c2e7159a4b91c70384146fe3a608ebf7b17555c158a67a9d Si vous vous vous trouviez dans le domaine grid5000 (c'est à dire derrière un des bastions, ce qui serait possible avec un VPN grid5000 mais compliqué et pas nécessaire), il vous suffirait d'entrer l'URL : http://chifflot-8.lille.grid5000.fr:8888/?token=c2e7159a4b91c70384146fe3a608ebf7b17555c158a67a9d dans votre navigateur pour vous connecter au notebook Jupyter correspondant. L'alternative recommandée est d'y accéder par l'URL : http://127.0.0.1:8888/?token=c2e7159a4b91c70384146fe3a608ebf7b17555c158a67a9d Pour cela, il faut créer un tunnel SSH entre le port 8888 de votre machine et le port 8888 du noeud Grid'5000 sur lequel vous avez lancé Jupyter (attention, le port attribué peut être différent de 8888). Ceci se fait en utilisant la commande suivante dans un autre terminal sur votre machine (le terminal 2 ci-dessus): ssh g5k -L 8888:chifflot-8.lille.grid5000.fr:8888 -v à adapter bien sûr en fonction du noeud sur lequel vous avez lancé jupyter et du port attribué. Une fois ceci fait, vous pouvez accéder au notebook en entrant directement dans votre navigateur sur votre machine l'URL fournie : http://127.0.0.1:8888/?token=c2e7159a4b91c70384146fe3a608ebf7b17555c158a67a9d Pour tester et vous familiariser avec Jupyter si vous ne connaissez pas, vous pouvez récupérer le code (commenté) du TP2 en pythorch et en jupyter notebook ''tgabor.ipynb'' dans ''/srv/storage/irim@storage1.lille.grid5000.fr/ens/code/tp2'' et les images dans ''/srv/storage/irim@storage1.lille.grid5000.fr/ens/data/tp2''. Vous lancez ensuite jupyter et vous vous y connectez comme indiqué ci-dessus. Vous naviguez si nécessaire vers le répertoire contenant le code et les images et vous lancez ''tgabor.ipynb'' en cliquand dessus. Le fichier est décomposé en cellules de code ou de commentaire. Vous pouvez exécuter les cellules les unes après les autres ou globalement. En plus de pouvoir développer avec l'environnement Jupyter, vous pouvez aussi éditer des fichiers texte, code ou autre, avec l'éditeur intégré de Jupyter, ce qui rend inutile et obsolète la "manip sshfs" décrite ci-dessous. Attention à l'éventuelle perte de données en cas de coupure de la connexion Internet (le texte reste quand même dans le navigateur dans ce cas). ===== Montage SSHFS ===== **Le montage sshfs n'est pas nécessaire pour éditer vos fichiers à distance si vous avez correctement configuré jupyter à distance, celui-ci intégrant un éditeur de texte.** Pour éditer vos fichiers avec votre éditeur graphique favori sur votre machine personnelle, une solution simple quoique un peu lourde consiste à monter votre répertoire sur Grid'5000 localement sur votre machine. Ceci se fait par SSHFS de la façon suivante : - installation de sshfs (s'il n'est pas déjà installé, Linux) : sudo apt-get install sshfs - création d'un point de montage (e.g. /home//grid5000, étant votre login sur votre machine) : mkdir -p /home//grid5000 - montage : sshfs -o idmap=user lille.g5k:/home// /home//grid5000 - votre répertoire "home" sur Grid'5000 est maintenant monté dans /home//grid5000 sur votre machine, vous pouvez travailler directement depuis votre machine sur tout ce qui s'y trouve et pas seulement pour éditer du texte. - démontage propre après usage : fusermount -u /home//grid5000 Notez que le montage est à refaire à chaque connexion et qu'il est aussi perdu en cas de perte de connexion réseau. \\ L'utilisation directe d'un éditeur graphique lancé à partir de Grid'5000 serait peu performante parce que le display X11 entre Lille et Grenoble est très lent, c'est probablement pour ça qu'il n'y en a pas. Il ne semble pas possible d'utiliser sshfs sur les machines de l'UFR, ce qui impose soit de transférer des fichiers à éditer, soit d'utiliser un éditeur dans un terminal de type vim ou emacs. Un jupyter lancé sur Grid'5000 avec display sur votre machine permet aussi d'éditer les fichiers à distance, y compris sur les machines de l'UFR.