Accès à Jupyter sur les machines de calcul

Il est possible de lancer Jupyter à travers un job soumis sur les machines de calcul.

Pré-requis

  • Ce tutoriel fonctionne si votre ordinateur est sous linux, avec un client SSH et un navigateur Web. Il peut fonctionner sous MacOS.

    L’utilisation de Windows peut également être possible, mais vous devrez adapter la partie tunnel SSH pour travailler avec Putty ou un autre client SSH.

  • Vous devez disposer d’une configuration ssh locale avec proxy transparent.

Installation de Jupyter

L’installation de Jupyter se fait via le système Nix.

[user@f-dahu ~]$ source /applis/site/nix.sh
[user@f-dahu ~]$ nix-env --switch-profile $NIX_USER_PROFILE_DIR/jupyter
[user@f-dahu ~]$ cat > ~/python.nix <<EOF
with import <nixpkgs> {};
pkgs.python37.withPackages (ps: with ps; [ ipython jupyter ])
EOF
[user@f-dahu ~]$ nix-env -i -f ~/python.nix
installing ‘python3-3.7.3-env’

Configuration de Jupyter

Générer un fichier de configuration par défaut :

[user@f-dahu ~]$ jupyter notebook --generate-config
Writing default config to: /home/user/.jupyter/jupyter_notebook_config.py

Préciser de ne pas démarrer le navigateur lors du lancement du serveur de notebook :

[user@f-dahu ~]$ echo "c.NotebookApp.open_browser = False" >> ~/.jupyter/jupyter_notebook_config.py

Préciser d’écouter sur n’importe laquelle des interfaces réseaux :

[user@f-dahu ~]$ echo "c.NotebookApp.ip = '0.0.0.0'" >> ~/.jupyter/jupyter_notebook_config.py

Démarrer un job avec un serveur Jupyter notebook

Une fois l’environnement configuré, vous pouvez lancer un serveur de notebook dans un noeud de calcul.

Démarrer un job interactif sur un seul coeur

[user@f-dahu ~]$ oarsub -I --project test -l /core=1,walltime=2:00:00
[ADMISSION RULE] Modify resource description with type constraints
OAR_JOB_ID=14181444
Interactive mode : waiting...
[...]
Starting...

Initialize X11 forwarding...
Connect to OAR job 14181444 via the node dahu38

Vous êtes alors connecté sur un noeud de calcul. Attention, les jobs interactifs sont limité en temps et tué à l’issue de cette limite.

Démarrer le serveur de notebook

[user@dahu103 ~]$ source /applis/site/nix.sh
[user@dahu103 ~]$ jupyter notebook
[I 15:48:01.768 NotebookApp] Writing notebook server cookie secret to /home/user/.local/tmp/jupyter/notebook_cookie_secret
[I 15:48:09.697 NotebookApp] Serving notebooks from local directory: /home/user
[I 15:48:09.697 NotebookApp] The Jupyter Notebook is running at:
[I 15:48:09.697 NotebookApp] http://(dahu38 or 127.0.0.1):8888/?token=524bfbd752f764ef447509bde0a5d8f9169ab603ce33f966
[I 15:48:09.697 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 15:48:09.727 NotebookApp]

    To access the notebook, open this file in a browser:
        file:///home/user/.local/tmp/jupyter/nbserver-276827-open.html
    Or copy and paste one of these URLs:
        http://(dahu38 or 127.0.0.1):8888/?token=524bfbd752f764ef447509bde0a5d8f9169ab603ce33f966

Il faut ensuite noter l’url donné qui sera utilisée pour se connecter au serveur, ainsi que le noeud de calcul sur lequel le serveur de notebook est lancé.

Ouvrir un notebook à travers un tunnel ssh

Ouvrir le tunnel ssh

Dans une session shell sur son poste de travail, charger le tunnel ssh :

[user@workstation ~]$ ssh -fNL 8888:nom_noeud:8888 dahu.ciment

Il faut remplacer ici dahu par le nom du cluster considéré (et .ciment par ce que vous avez défini pour l’accès transparent dans votre configuration ssh), et le nom du noeud par le noeud sur lequel a été lancé le serveur. De même, il vous faut adapter le port sur lequel le serveur est lancé en fonction du retour de la commande de lancement du serveur (ici 8888).

Lancer le notebook

Avec votre navigateur sur le même ordinateur depuis lequel a été lancé le tunnel ssh, ouvrir l’url donnée par le serveur de notebook en remplaçant le nom du noeud par localhost :

http://localhost:8888/?token=524bfbd752f764ef447509bde0a5d8f9169ab603ce33f966

Vous devez maintenant être connecté à votre notebook jupyter tournant sur le noeud de calcul.