Jupyter (python notebook)

Un script runJupyter est disponible pour configurer directement l'utilisation des notebooks jupyter à travers la création d'un job interactif et accessibles à distance via un navigateur internet.

Le script permet :

  • de réserver les ressources (temps, CPU)
  • de créer un serveur jupyter notebook associé aux ressources
  • de générer une connection via un tunnel ssh
  • de gérer plus environnements différents des notebooks disponibles : soit lié aux modules python (py3.8, anaconda3) soit lié aux images singularity spécialement développées pour l'utilisation de tensorflow.
[homer@vision stage_coupep]$ runJupyter -h

  Usage
  =====
  runJupyter [<submit_params>] -- [<app specific options>]

  -------------------
  Optional parameters
  -------------------
  -m <memory limit>
    Memory limit for the job.
    In case of parallel job, this option means 'memory per task'.
    Value should be set in Gigabytes (e.g. -m 10G).
    [10G]

  -n <N>
    Number of cpus.
    [1]

  -q <interq|visuq|gpuq>
    Set the queue or the nodetype for the job.
      interq      : compute jobs only
      visuq       : compute jobs and small GPU utilization
      gpuq        : compute jobs and intensive GPU utilization
    [interq]

  -t <time limit>
    Set a walltime on your job.
    Value should be expressed in 'hours' (e.g. -t 1).
    [8]

  -V <version>
    This option allows you to specify the version of the application you would like to work with.
    [python_anaconda3]

  -----------------------
  Supported versions (-V)
  -----------------------
      python_anaconda3
      python_py3.8
      tensorflow_sing_20.10-tf1-py3
      tensorflow_sing_20.10-tf2-py3

La procédure pour lancer l'environnement graphique nécessite de :

Lancement de la commande

Lancer la commande runJupyter : On peut choisir le nombre de processeurs, la mémoire et le temps :
par exemple : 24 processeurs, 4Go de mémoire (par processeurs) pendant 1h ; un JID est généré (ici 5620)

[homer@vision ~]$ runJupyter -t 1 -m 4G -n 24
5620.vision

Récupération des information de connection

Une fois le job lancé, afficher le fichier jupyter_xx.oJID associé au job.

[homer@vision ~]$ cat jupyter_1h.o5620
-----------------------------------------------------------------------------------------------------
                    [JobID]          5878.vision
                  [JobName]          jupyter_6h
               [AppVersion]          python_py3.8
                  [JobType]          visu
                  [NCPU(s)]          24
                 [Walltime]          6h
                   [Memory]          4G
            [Data transfer]          no
             [Keep scratch]          no
         [Submit directory]          /zfs/home/ho/TItomoDL/stage_coupep
        [Scratch directory]          /zfs/scratch/ho/jupyter_6h-5878.vision
-----------------------------------------------------------------------------------------------------

[JUPYTER][JOB] Info: generating connection YAML file
-----------------------------------------------------------------------------------------------------
[JUPYTER][JOB] Info: *** SSH tunnel      ssh -p 86 -N -L166:XX.XX.XX.XX:166 homer@...
[JUPYTER][JOB] Info: *** Notebook URL    http://localhost:166/node/vision/166/lab
[JUPYTER][JOB] Info: *** Password        rbtAf8Ef
-----------------------------------------------------------------------------------------------------
[JUPYTER][JOB] Info: starting Jupyter notebook

Ouverture du tunnel indiqué

Sur mon poste, lancer (copier/coller) la commande ssh -N ... pour créer un tunnel sécurisé. Il faut laisser la commande active (elle ne rend pas la main).
Selon le nombre de sessions graphiques lancées, le port (ici 166) peut changer. Il faut l'adapter à la prochaine étape.

client: homer$ ssh -p 86 -N -L166:XX.XX.XX.XX:166 homer@...

  • Sous windows, il est possible d'utiliser la commande ssh si le système en dispose (faire un test avec une invite de commande). Une autre possibilité est de créer le tunnel avec Putty :
  1. renseigner hostname et le port comme pour une connection "classique" sur la première page de putty
  2. source port (ici : 166)
  3. destination (ici : XX.XX.XX.XX:166)
  4. add
  5. open

Connection avec un navigateur internet (chrome, firefox

  • Renseigner password (mot de passe temporaire fourni dans le fichier avec l'adresse de connexion)
  • La connection est établie dans un environnement graphique avec le notebook jupyter.

Utilisation

La version py3.8 de python permet d'utiliser des widgets dans les notebooks, et de gagner en interactivité sur les figures.
Pour les graphiques 2d, il faut utiliser %matplotlib widget en préambule du notebook. Pour les images et données 3d, le module itkwidgets permet de visualiser de manière interactive les figures

Usage

  • matplotlib widget
%matplotlib widget
import matplotlib.pyplot as plt
f = plt.figure()
plt.plot()
...
  • itkwidgets

from itkwidgets import view
#read your image with itk, vtk, tifffile...
# or 
import numpy as np
data = data=0.1*np.random.random((100,100,100))
data[20:40:2,20:40:2,:] = 0.01*np.random.randn(10,10,100)+0.8
view(data) # or
view(data, select_roi=False, mode='z', gradient_opacity=0.4, shadow=False, cmap=itkwidgets.cm.gray, annotations=False, interpolation=False)

références

Commandes complémentaires pour Jupyter

Le package ipykernel permet d'ajouter un nouveau kernel à l'environnement, et ainsi d'avoir à disposition des environnements accessibles

  • Installer ipykernel pour gérer les kernels Jupyter
        conda install ipykernel
  • Ajouter un kernel pour Jupyter
        ipython kernel install --name tensorflow --user
        ipython kernel install --name pytorch --user
  • Lister les kernels Jupyter
            jupyter kernelspec list
    
  • Supprimer un kernel Jupyter
            jupyter kernelspec uninstall tensorflow
    

runJupyter.png (185 KB) Gueguen Mikael, 11/17/2020 05:10 PM

putty2.png (38 KB) Gueguen Mikael, 11/18/2020 05:18 PM

widgets_jupy.png (539 KB) Gueguen Mikael, 06/17/2021 10:18 AM