Jupyter bajo Conda

De NLHPC

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/eosorio/.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:

  1. Identificar el nodo en el que nos encontramos
  2. 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, 2, 3 o 4.

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á:

  1. Crear un túnel de acceso
  2. 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 -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 leftraru4, 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:

  1. Identificación de host en el cluster
  2. Ejecutar Jupyter y tomar nota de URL de acceso
  3. Crear túnel SSH desde nuestra computadora al cluster
  4. 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 slims
#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.