Skip to main content

Notebook jupyter

Durant la phase mise au point des scripts python, il peut être intéressant d’utiliser l’outil jupyter notebook.

C’est possible sur Turpan, à certaines conditions :

  • la durée de connexion ne peut pas excéder 4 heures
  • La réservation est sur la file "shared", et par conséquent limitée à 1 GPU, 40 CPUs et 256G de RAM
  • Pour un travail plus intensif, il vaut mieux préférer le lancement par sbatch qui permet de réserver des ressources adaptées

Comment demander une session interactive de notebook jupyter

Lorsque vous êtes connecté sur une frontale de Turpan, exécutez le script :

runJupyterSession.sh

Laissez le script démarrer (cela prend quelques secondes, soyez patient...), puis vous devriez voir un affichage de ce style :

[  3/150] Queuing and waiting for Jupyter session resources initialization (JJJJJ) ...

jupyter session ...

#===========================================================================
|
| Your jupyter notebook is now available.
|
| You must now open a TERMINAL on YOUR laptop and execute the command :
|
| ssh -L 8888:/users/mxxxxx/uyyyyy/.jupyter/jupyter-notebook-WW.XX.YY.ZZ-JJJJJ.sock -n uyyyyy@WW.XX.YY.ZZ 'si-init.sh'
|
| Then from your browser, visit the following url :
|
| http://localhost:8888/?token=azertyuiopqsdfghjklmwxcvbn
|
#===========================================================================
| CAUTION : DO NOT CLOSE this slurm job or this terminal !
#===========================================================================

+---------------------------------------------------------------------------
| CONNECTION INFO :
| * Job ID : JJJJJ
| * Client : WWW.XXX.YYY.ZZZ (FROM THE MOON)
| * Target : WW.XX.YY.ZZ (turpancompY)
| * Notebook URL : http://localhost:8888/?token=azertyuiopqsdfghjklmwxcvbn
| * Notebook token : azertyuiopqsdfghjklmwxcvbn
| * SSH tunnel socket path : /users/mxxxxx/uyyyyy/.jupyter/jupyter-notebook-WW.XX.YY.ZZ-JJJJJ.sock
+---------------------------------------------------------------------------

[/] - Press CTRL-C to quit

Sur un second terminal sur votre poste de travail, exécuter la commande ssh donnée par le script :

ssh -L 8888:/users/mxxxxx/uyyyyy/.jupyter/jupyter-notebook-WW.XX.YY.ZZ-JJJJJ.sock  -n uyyyyy@WW.XX.YY.ZZ 'si-init.sh'

Patientez là encore quelques secondes et vous devriez obtenir le message suivant :

#===========================================================================
|
| ssh tunnel established.
|
#===========================================================================
| CAUTION : DO NOT CLOSE this terminal !
#===========================================================================
DO NOT CLOSE TERMINALS

Comme les 2 messages l'indiquent, ne fermez pas la fenêtre de demande de session interactive sur Turpan, ni celle du tunnel ssh sur votre poste de travail.

Enfin, vous pouvez utiliser votre notebook jupyter :

  • En utilisant le navigateur de votre poste de travail et copier/coller l'URL fournie par le script "http://localhost:8888/?token=..."
  • En utilisant vscode, et copier/coller l'URL fournie par le script "http://localhost:8888/?token=..." en suivant la documentation officielle de vscode
Erreur "Permission denied (publickey)"

Si vous obtenez l'erreur suivante lors de l'inititailisation du tunnel :

uyyyyy@turpanlogin.calmip.univ-toulouse.fr: Permission denied (publickey).

Vérifier votre configuration ssh. La configuration associée à clé ssh dans votre fichier .ssh/config, doit avoir "turpanlogin.calmip.univ-toulouse.fr" sur la ligne "Host"

# La configuration suivante est indispensable pour utiliser les outils
# runVisuSession, runJupyterSession, runTensorboardSession sur turpan
Host turpan turpanlogin turpanlogin.calmip.univ-toulouse.fr
Hostname turpanlogin.calmip.univ-toulouse.fr
IdentityFile ~/.ssh/votre_cle_ssh_privee
IdentitiesOnly=yes
User votre_nom_d_utilisateur

Utiliser les conteneurs nvidia (pytorch, tensorflow, rapids, modulus et triton)

Il existe 4 type de conteneurs disponibles pour les sessions interactives :

Ceux-ci peuvent être utilisés en invoquant runJupyterSession.sh avec l'option --container. Exemple pour utiliser le conteneur pytorch :

runJupyterSession.sh --container pytorch

Il est possible de choisir la version du conteneur à l’aide de l’option --flavor :

runJupyterSession.sh --container pytorch --flavor 24.10

Pour consulter les versions disponibles, utilisez la commande suivante :

runJupyterSession.sh --container pytorch --help

Utiliser un conteneurs custom

Pour utiliser un conteneur custom, il faut respecter quelques prérequis. Tout d'abord, le conteneur doit être construit depuis un des conteneurs prédéfinis (ci-dessus). Les fichiers images (.sif) de ces conteneurs se trouvent dans le répertoire /work/conteneurs/sessions-interactives. Les images valides sont celle contenant le mot clé "latest" dans leur nom.

Exemple de build issue de la version 24.10 du conteneur pytorch :

  • Creation de l'environnement de build

    cd /work/conteneurs/invite/invitemc
    apptainer build --sandbox mon_conteneur/ /work/conteneurs/sessions-interactives/pytorch-24.10-py3-calmip-si-latest.sif
    mkdir mon_conteneur/users mon_conteneur/tmpdir mon_conteneur/work
  • Faire les modifications que l'on souhaite au sein du conteneur

    apptainer shell --fakeroot --bind /tmpdir,/work --writable mon_conteneur/
    tip

    Il peut être intéressant de le faire en interractif sur un noeud pour disposer de la carte graphique

    cd /work/conteneurs/invite/invitemc
    srun -n 1 -p shared --bind /tmpdir,/work --pty apptainer shell --fakeroot --bind /tmpdir,/work --writable mon_conteneur/
  • Créer l'image du conteneur

    cd /work/conteneurs/invite/invitemc
    apptainer build mon_conteneur.sif mon_conteneur/
    apptainer cache clean" # A faire uniquement tout a la fin une fois que l'image est définitive pour libérer la place

Pour utiliser le conteneur custom

runJupyterSession.sh --container custom --containerpath /work/conteneurs/invite/invitemc/mon_conteneur.sif
tip

L’option --pythonenvname "<envname>" permet d’utiliser un environnement dans le conteneur. La commande suivante est exécuté dans le conteneur avant de lancer le notebook : python -m ipykernel install --user --name="<envname>"

Il est également possible d'utiliser l'option --userbase afin de spécifier un chemin alternatif pour les modules ou les environnements python (https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUSERBASE)

Installer un paquet python supplémentaire dans mon environnement

À l'intérieur d'une cellule du notebook, exécuter la commande !pip install --user monpaquet'

Exemple pour installer le paquet "ansicolors"

!pip install --user ansicolors

Pour tester

Voici des tutoriels pour tester chacun des conteneurs NVIDIA :

Passer en production

Une fois votre script mis au point, vous pouvez le lancer en production en mettant dans votre script sbatch les commandes suivantes. Dans cet exemple les ressources réservées sont proches de celle de la session de Notebook Jupyter :

#!/bin/bash
#SBATCH -N 1
#SBATCH -n 40
#SBATCH --gres=gpu:1
#SBATCH -p shared
#SBATCH --ntasks-per-node=40
#SBATCH --time=00:10:00

module purge

apptainer exec --bind /tmpdir,/work --nv /work/conteneurs/sessions-interactives/pytorch-24.02-py3-calmip-si.sif /usr/local/bin/proxychains.sh python monscript.py

Et si vous aviez lancé le notebook avec l'option "--userbase" (Exemple : runJupyterSession.sh --container rapids --userbase "${HOME}/myenv3"), alors vous devrez ajouter --env "PYTHONUSERBASE=${HOME}/myenv3" à la commande de lancement apptainer :

apptainer exec --env "PYTHONUSERBASE=${HOME}/myenv3" --bind /tmpdir,/work --nv /work/conteneurs/sessions-interactives/pytorch-24.02-py3-calmip-si.sif /usr/local/bin/proxychains.sh python monscript.py

Voici quelques liens pour avoir de l'information supplémentaire :

Comment arrêter une session interactive de notebook jupyter

Vous pouvez arrêter la session interactive de notebook jupyter de 2 façon :

  • Soit en allant sur le terminal dans lequel vous avez lancé runJupyterSession.sh, et tapez :
    CTRL-C
  • Soit en cliquant sur le bouton "Quit" de l’interface du notebook jupyter
    tip

    Depuis un notebook actif, il faut d'abord quitter le notebook ("File"->"Close and Halt") afin de pouvoir visualiser le bouton "Quit".

Si ça ne fonctionne pas

Avant de contacter le support, vous pouvez essayer les actions suivantes :

  • Vérifier que le terminal contenant la session est toujours actif
  • Vérifier que le terminal contenant le tunnel SSH est toujours actif
  • Vérifier que vous n'avez pas de session de notebook jupyter en local sur votre poste de travail qui utilise déjà le port 8888
  • Tuer toutes vos connexions ssh à destination de Turpan et recommencer une session interactive
  • Si vous êtes sous windows, relancer votre session mobaxterm