Travailler avec un Jupyter Notebook

Configuration

Il est recommandé de lancer votre notebook dans un environnement virtuel. Pour utiliser conda, vous pourrez vous rérérer à l’ASPICS sur les jupyter notebook. Ici les exemples sero,t donnés avec venv pour changer. Par exemple, l’installation de jupyter-notebook se fera comme suit :

python -m venv .venv
source .venv/bin/activate
pip install jupyter

Le noyau associé à l’environnement virtuel est ainsi chargé automatiquement. Si cela n’est pas le cas, vous pouvez le spécifier avec

ipython kernel install --name <name-venv>

<name-venv> est le nom de l’environnement virtuel, par exemple, ici, .venv.

Lancement sur les noeuds

Pour travailler en interactif, il n’est pas recommandé de lancer le navigateur sur la frontale. Il est préférable d’exécuter le notebook sur un noeud, en faisant une allocation interactive. Par exemple, sur la partition haswell :

salloc -N 1 -n 1 -p haswell -t 01:00:00

retourne, sur les ressources sont disponibles, une allocation d’un noeud de la partition haswell et d’un processus sur ce noeud. Il s’affiche quelque chose comme

salloc: Pending job allocation 700273
salloc: job 700273 queued and waiting for resources
salloc: job 700273 has been allocated resources
salloc: Granted job allocation 700273

Pour obtenir le nom du noeud alloué, vous pouvez faire par exemple

squeue -j 700273

ce qui donne

 JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
700273   haswell interact   <user>  R       0:27      1 haswell-t16-53

Dans cet exemple, le noeud alloué est haswell-t16-53.

Se connecter en interactif sur ce noeud :

ssh haswell-t16-53

Activer l’environnement virtuel pour le notebook, par une commande du type

source .venv/bin/activate

si votre environnement virtuel est défini avec virtualenv et s’appelle .venv. Lancer ensuite le notebook, sans naviguateur, car sur les noeuds de calcul, il n’y a pas de serveur X11.

jupyter-notebook --no-browser --port=8888

Le port par défaut est 8888. Cette commande initie le serveur jupyter et ouvre token de type

http://localhost:8888/?token=de53a39c1ddadb0ca4e5ddd770f969c8e07331c992dea772

Il est nécessaire de repérer ce token pour s’y connecter depuis votre client, sur votre machine locale.

Lancement du client via un tunnel ssh

Pour vous permettre d’accéder au notebook depuis votre navigateur sur votre machine locale, vous devez ouvrir un tunnel ssh en spécifiant le noeud où tourne le serveur, les chemins pour y accéder (via les machines de prepost associées aux noeuds alloués et éventuellement le portail sshgate si vous n’avez pas activé votre VPN. Dans l’exemple ci-dessus, ça donne :

ssh haswell-t16-53 -L9999:localhost:8888 -J prepost-haswell,gate
prepost-haswell est la frontale associée à la partition haswell utilisée pour l’allocation et gate est la passerelle sshgate de l’école, qui permet d’accéder au réseau interne depuis l’extérieur. Vous pouvez alternativement utiliser la syntaxe prepost-haswell.ecl (vous reporter au tutoriel de configuration de votre client SSH), commande proxy qui vous permet d’accéder à cette prepost-hawsell via sshgate (lorsque vous n’êtes pas dans le réseau de l’École Centrale de Lyon ou dans le VPN) et 9999 est le port que vous récupérez dans ce tunnel.

Dans ce cas, vous auriez écrit

ssh haswell-t16-53 -L9999:localhost:8888 -J prepost-haswell.ecl

Il vous suffit ensuite d’ouvrir un navigateur dans un terminal de votre machine locale, avec le lien

firefox http://localhost:9999/?token=de53a39c1ddadb0ca4e5ddd770f969c8e07331c992dea772

Lorsque vous quittez l’application, vous pouvez vérifier que vous avez bien stoppé le serveur (et libéré les ports utilisés) en faisant sur le noeud alloué

jupyter notebook 8888 stop

ou sur ce noeuds depuis la machine locale, avec ssh

ssh haswell-t16-53 -J prepost-haswell.ecl 'jupyter notebook 8888 stop'