Aller au contenu principal

Utiliser JupyterLab

Pour résumer

Pour utiliser JupyterLab vous devez :

  1. Lancer JupyterLab sur un noeud de calcul.
  2. Faire un pont SSH vers ce noeud de calcul.
  3. Ouvrir JupyterLab dans votre navigateur local via ce pont.

En détails

Lancer JupyterLab sur un noeud de calcul.

Lancez un job interactif sur le noeud de calcul (X64 ou ARM) correspondant à l'architecture où vous souhaitez utiliser JupyterLab. Une fois connecté à ce serveur noeud de calcul, nous pouvons passer à l'étape suivante.

Nous allons installer Python, JupyterLab, et les dépendances souhaitées dans un environnement Python dédié.

Pour cela nous allons utiliser un gestionnaire de packages et environnement python nommé UV. Il remplace des outils comme PIP ou ANACONDA avec plus de simplicité, possibilités, rapidité. Si vous préférez utiliser ces outils c'est également possible mais non expliqué dans la présente documentation.

Après avoir chargé l'environnement correspondant à l'architecture sur laquelle nous nous trouvons (voir partie 'Charger ses logiciels' dans la documentation), nous avons accès à Spack, et nous chargeons UV :

spack load py-uv

Puis nous allons créer notre environnement dédié. Placez vous dans le dossier où vous souhaitez créer cet environnement puis choisissez son nom. Pour éviter les problèmes évitez de lui donner un nom identique à un package python (par exemple ne pas l'appeler 'jupyterlab'). Dans l'exemple si dessous je vais l'appeler 'monenvironnement'

uv init --python 3.13  monenvironnement

Avec l'option --python 3.12 je lui dis quelle version de python je souhaite qu'il utilise, sinon il prendra l'un des python du système et l'environnement sera moins pérenne.

Une fois l'environnement crée, nous allons y installer les packages que vous souhaitons.

info

Dans l'exemple si dessous je vais ajouter plusieurs packages utiles, l'avantage de le réaliser en une seule commande est que UV (tout comme CONDA ou PIP) va être capable de prendre que des versions inter-compatibles entre elles, alors que si nous les réalisons une a une, et que nous installons par exemple une version trop récente d'un package qui a besoin d'une dépendance dans une version donnée, mais qu'un second package souhaité à besoin d'une ancienne version de cette dépendance, l'installation du second package sera refusé et les versions des packages devrons être ajustées.

Je vais donc aller dans mon environnement et y lancer ma commande 'uv add':

cd monenvironnement
uv add jupyterlab

Si vous souhaitez installer les package TORCH en version GPU, sur l'architecture ARM, la commande est un peu plus compliquée à cause de la façon dont torche fournit ces packages. Vous pouvez par exemple faire :

cd monenvironnement
uv add torch torchvision torchaudio jupyterlab --index https://download.pytorch.org/whl/cu125 --index-strategy unsafe-best-match

Les options index et index-strategy sont obligatoires pour correctement installer les version GPU compatible CUDA 12.5 de torch, torchvision et torchaudio.

Et voila, il est installé. Vous pouvez utiliser les commandes 'uv add lepackage' pour ajouter d'autres packages, et 'uv remove lepackage' pour en supprimer.

Maintenant qu'il est installé, pour l'utiliser dans votre job il suffira de retourner avec cd dans le dossier de l'environnement, de chosir un port (par exemple ici 2345) et de lancer la commande suivante :

uv run jupyter-lab --no-browser --port=2345 --ip=0.0.0.0

Vous pouvez trouver dans ce que vous indique JupyterLab votre token, il vous sera utile plus loin. Ici par exemple le token est : a69e9f63bcf6fd61f98f9394e0085be7780169a2418a0b10 Ce token change à chaque execution de JupyterLab.

[fberini@romeo-a041 monenvironnement]$ uv run jupyter-lab --no-browser --port=2345 --ip=0.0.0.0
[I 2025-04-18 17:12:33.299 ServerApp] jupyter_lsp | extension was successfully linked.
[I 2025-04-18 17:12:33.303 ServerApp] jupyter_server_terminals | extension was successfully linked.
[I 2025-04-18 17:12:33.306 ServerApp] jupyterlab | extension was successfully linked.
[I 2025-04-18 17:12:34.321 ServerApp] notebook_shim | extension was successfully linked.
[I 2025-04-18 17:12:34.362 ServerApp] notebook_shim | extension was successfully loaded.
[I 2025-04-18 17:12:34.364 ServerApp] jupyter_lsp | extension was successfully loaded.
[I 2025-04-18 17:12:34.364 ServerApp] jupyter_server_terminals | extension was successfully loaded.
[I 2025-04-18 17:12:34.368 LabApp] JupyterLab extension loaded from /gpfs/home/fberini/Tests/monenvironnement/.venv/lib/python3.13/site-packages/jupyterlab
[I 2025-04-18 17:12:34.368 LabApp] JupyterLab application directory is /gpfs/home/fberini/Tests/monenvironnement/.venv/share/jupyter/lab
[I 2025-04-18 17:12:34.368 LabApp] Extension Manager is 'pypi'.
[I 2025-04-18 17:12:34.474 ServerApp] jupyterlab | extension was successfully loaded.
[I 2025-04-18 17:12:34.474 ServerApp] Serving notebooks from local directory: /gpfs/home/fberini/Tests/monenvironnement
[I 2025-04-18 17:12:34.475 ServerApp] Jupyter Server 2.15.0 is running at:
[I 2025-04-18 17:12:34.475 ServerApp] http://romeo-a041:2345/lab?token=a69e9f63bcf6fd61f98f9394e0085be7780169a2418a0b10
[I 2025-04-18 17:12:34.475 ServerApp] http://127.0.0.1:2345/lab?token=a69e9f63bcf6fd61f98f9394e0085be7780169a2418a0b10
[I 2025-04-18 17:12:34.475 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 2025-04-18 17:12:34.480 ServerApp]

To access the server, open this file in a browser:
file:///gpfs/home/fberini/.local/share/jupyter/runtime/jpserver-2976923-open.html
Or copy and paste one of these URLs:
http://romeo-a041:2345/lab?token=a69e9f63bcf6fd61f98f9394e0085be7780169a2418a0b10
http://127.0.0.1:2345/lab?token=a69e9f63bcf6fd61f98f9394e0085be7780169a2418a0b10
[I 2025-04-18 17:12:34.492 ServerApp] Skipped non-installed server(s): bash-language-server, dockerfile-language-server-nodejs, javascript-typescript-langserver, jedi-language-server, julia-language-server, pyright, python-language-server, python-lsp-server, r-languageserver, sql-language-server, texlab, typescript-language-server, unified-language-server, vscode-css-languageserver-bin, vscode-html-languageserver-bin, vscode-json-languageserver-bin, yaml-language-server

Dans un autre terminal connecté à ROMEO, utilisez la commande : squeue --me pour trouver le noeud de calcul sur lequel votre job (et donc JupyterLab) tournent.

Gardez bien ce token, le nom du noeud de calcul, et le port utilisé dans la commande. Il faudra les réutiliser plus bas.

Faire un pont SSH vers ce noeud de calcul

Maintenant que JupyterLab tourne sur un noeud de calcul il faut créer un pont.

Choisissez un second port (local), celui ci sera utilisé sur votre ordinateur. Ici nous allons prendre 8888.

Dans un terminal (Linux ou Windows ou MacOS) capable de se connecter à ROMEO avec votre compte, tapez la commande suivante en adaptant les champs avec vos valeurs :

ssh -N -L 8888:romeo-a041:2345 votrelogin@romeo1.univ-reims.fr

Remplacez :

  • 8888 par le port local que vous avez choisis
  • romeo-a041 par le nom du noeud de compute où votre job et JupyterLab sont lancés
  • 2345 par le port que vous avez choisis dans la commande pour lancer JupyterLab
  • votrelogin par votre login ROMEO

Cette commande quand elle fonctionne ne fait rien de tout visuellement, elle va juste attendre. C'est parfaitement normal et le pont restera fonctionnel tant qu'elle sera lancée.

Ouvrir JupyterLab dans votre navigateur local via ce pont.

Ouvrez maintenant un navigateur Internet sur votre ordinateur, et entrez l'URL suivante, en replacement 8888 par le port local utilisé précédemment :

http://localhost:8888

Si tout à fonctionné, vous êtes maintenant sur la page JupyterLab. Il est possible qu'il vous demande votre Token, dans ce cas indiquez dans le premier champs 'Mot de passe ou Token' tout en haut de la page le Token que vous avez récupéré en lançant JupyterLab précédemment.

Si vous avez besoin de plus de packages dans votre JupyterLab, retournez dans votre dossier 'monenvironnement' et utilisez la commande uv add comme expliqué précédemment pour les ajouter, et relancez JupyterLab.

Après mon utilisation

Une fois que vous ne souhaitez plus utiliser votre job, annulez le avec 'scancel' (voir la page : lancer un calcul) et fermez le terminal avec le pont. Tout est alors revenu dans son état normal.