Jupyter bajo Conda
Introducción
El siguiente procedimiento le permitirá instalar Jupyter Notebook en un entorno Conda, para eventualmente acceder desde su computadora local y utilizarlo.
Recomendamos la lectura de la página de la Wiki sobre Conda en el siguiente enlace donde aprenderá a utilizar los módulos necesarios, crear entornos virtuales e instalar software.
Creación de entorno virtual de Conda e instalación de Jupyter
Crearemos un entorno virtual y posterior a eso instalaremos Jupyter de la siguiente manera:
[dbowman@leftraru1 ~]$ conda create -n mi_entorno_con_jupyter Collecting package metadata (current_repodata.json): done Solving environment: done ## Package Plan ## environment location: /home/dbowman/.conda/envs/mi_entorno_con_jupyter Proceed ([y]/n)? Preparing transaction: done Verifying transaction: done Executing transaction: done
Luego activaremos nuestro entorno virtual con:
[dbowman@leftraru1 ~]$ conda activate mi_entorno_con_jupyter
E instalaremos jupyter ejecutando:
[dbowman@leftraru1 ~]$ conda install -y jupyter
Si todo resulta de manera exitosa veremos un resultado similar a:
Downloading and Extracting Packages jsonpointer-2.0 | 9 KB | ######################################### | 100% jedi-0.19.0 | 825 KB | ######################################### | 100% webcolors-1.13 | 18 KB | ######################################### | 100% isoduration-20.11.0 | 17 KB | ######################################### | 100% jupyterlab_server-2. | 59 KB | ######################################### | 100% async-lru-2.0.4 | 15 KB | ######################################### | 100% uri-template-1.3.0 | 23 KB | ######################################### | 100% ipywidgets-8.1.0 | 111 KB | ######################################### | 100% fqdn-1.5.1 | 14 KB | ######################################### | 100% arrow-1.2.3 | 92 KB | ######################################### | 100% sip-6.7.11 | 569 KB | ######################################### | 100% openssl-3.1.2 | 2.5 MB | ######################################### | 100% jsonschema-with-form | 7 KB | ######################################### | 100% jupyter_events-0.7.0 | 21 KB | ######################################### | 100% notebook-7.0.1 | 3.1 MB | ######################################### | 100% Preparing transaction: done Verifying transaction: done Executing transaction: done
Ejecución de Jupyter
A continuación deberemos realizar dos pasos:
- Identificar el nodo en el que nos encontramos
- Ejecutar jupyter
Identificación de nodo en el que nos encontremos
Para identificar el nodo en el que nos encontremos ejecutaremos:
[dbowman@leftraru1 ~]$ hostname leftraru2
La respuesta será uno de los nodos de acceso correspondientes a leftraru1 o leftraru2.
En nuestro ejemplo obtuvimos leftraru2
, dato que utilizaremos prontamente.
Ejecutar Jupyter
En este paso ejecutaremos Jupyter indicando un puerto específico para posteriormente poder conectarnos desde nuestra computadora local.
El comando a utilizar es:
[dbowman@leftraru1 ~]$ jupyter-notebook --no-browser --port 2346
Obtendremos mucha información, pero nos deberemos fijar en la información similar a:
[C 2023-08-02 17:09:07.819 ServerApp] To access the server, open this file in a browser: file:///home/dbowman/.local/share/jupyter/runtime/jpserver-60187-open.html Or copy and paste one of these URLs: http://localhost:2346/tree?token=918029e46e54957ac797882f1 http://127.0.0.1:2346/tree?token=918029e46e54957ac797882f1
Deberemos tener en cuenta la información http://localhost:2346/tree?token=918029e46e54957ac797882f1
para nuestros próximos pasos.
Accediendo a Jupyter desde nuestra computadora local
Los siguientes pasos son realizados en una terminal desde nuestra computadora local.
Los datos que necesitaremos son:
- Nombre de host en donde ejecutamos los pasos anteriores
- URL de acceso al ejecutar Jupyter en el cluster
Estos datos fueron obtenidos desde la sección anterior, lo que nos permitirá:
- Crear un túnel de acceso
- Acceder a Jupyter
Creación de túnel de acceso
En pasos previos obtuvimos que el nombre de host leftraru2
, con lo que podremos ejecutar desde nuestra computadora local un túnel SSH de la siguiente manera:
[david@HAL ~]$ ssh -p 4603 -NL 2346:localhost:2346 -l dbowman leftraru2.nlhpc.cl
Se le solicitará su contraseña del cluster y si la autenticación es exitosa, se creará un túnel desde nuestra computadora al cluster bajo nuestro usuario y el host donde hemos estado trabajando.
En el caso de haber obtenido otro nombre de host, por ejemplo leftraru2
, deberemos indicar dicho nombre de host en el comando ejecutado.
Accediendo a Jupyter
Una vez que hemos lanzado el túnel, deberemos acceder mediante nuestro navegador preferido a la URL obtenida previamente.
En nuestro caso bastará abrir: http://localhost:2346/tree?token=918029e46e54957ac797882f1
Y ya podrá acceder a utilizar Jupyter desde su navegador.
Lanzando tareas de Jupyter en los nodos de cómputo
Debemos tener en consideración que el uso de Jupyter suele realizarse mayormente de manera interactiva, lo que requerirá los cuatro pasos anteriores que hemos realizado:
- Identificación de host en el cluster
- Ejecutar Jupyter y tomar nota de URL de acceso
- Crear túnel SSH desde nuestra computadora al cluster
- Acceder a Jupyter
También es importante notar que estamos usando un entorno virtual, por lo que para ejecutar deberemos considerar lo siguiente:
- Reservar recursos
- Activar entorno de conda utilizado
- Lanzar tarea a los nodos de cómputo
- Esta tarea se ejecutará pero no podrá ser utilizada de manera interactiva
Entonces, si queremos lanzar nuestro archivo HolaJupyter.ipynb
creado en nuestro notebook, podremos crear un script similar a:
#!/bin/bash #---------------Script SBATCH - NLHPC ---------------- #SBATCH -J jupyter-desde-sbatch #SBATCH -p main #SBATCH -n 1 #SBATCH -c 1 #SBATCH --mem-per-cpu=2300 #SBATCH --mail-user=dbowman@hal.com #SBATCH --mail-type=ALL #SBATCH -o jupyter-desde-sbatch_%j.out source /home/dbowman/.bashrc eval "$(/home/lmod/software/Core/Miniconda3/4.5.12/bin/conda shell.bash hook)" conda activate mi_entorno_con_jupyter jupyter nbconvert --to notebook --execute HolaJupyter.ipynb --output=jupyter-output.ipynb
Esto nos entregará información en el archivo de salida de la tarea jupyter-desde-sbatch_234234.out
similar a:
[NbConvertApp] Converting notebook HolaJupyter.ipynb to notebook 0.00s - Debugger warning: It seems that frozen modules are being used, which may 0.00s - make the debugger miss breakpoints. Please pass -Xfrozen_modules=off 0.00s - to python to disable frozen modules. 0.00s - Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation. 0.00s - Debugger warning: It seems that frozen modules are being used, which may 0.00s - make the debugger miss breakpoints. Please pass -Xfrozen_modules=off 0.00s - to python to disable frozen modules. 0.00s - Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation. [NbConvertApp] Writing 1187 bytes to jupyter-output.ipynb
Y el archivo de salida llamado jupyter-output.ipynb
tendrá un contenido similar a:
{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "7832632e-7aeb-48d5-97f5-4aed8644fb0b", "metadata": { "execution": { "iopub.execute_input": "2023-08-02T22:06:21.689494Z", "iopub.status.busy": "2023-08-02T22:06:21.689137Z", "iopub.status.idle": "2023-08-02T22:06:21.701830Z", "shell.execute_reply": "2023-08-02T22:06:21.700906Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hola Jupyter!\n" ] } ], "source": [ "print(\"Hola Jupyter!\")" ] }, ... }
Conclusión
El uso de Jupyter puede resultar de gran ayuda, y en conjunto con la potencia de los nodos de cómputo se transforma en una herramienta útil y flexible.
Se tiene una curva de aprendizaje inicial poco sencilla al requerir de varios pasos, pero una vez dominado, podrá repetir sus pasos una y otra vez según sus requerimientos.
Más información
Puede leer sobre Conda en el siguiente enlace.
Puede leer sobre Jupyter en la página web oficial en el siguiente enlace.