# Kernels personalizados en JupyterHub Esta guía describe los pasos necesarios para configurar **kernels personalizados** de Python en JupyterHub. Esto permite que los usuarios definan entornos específicos con `conda`, `virtualenv` o cargas de módulos para ejecutar notebooks interactivos. --- ## Crear la carpeta de kernels Jupyter busca kernels en varios directorios, entre ellos está el directorio: ```bash ~/.local/share/jupyter/kernels/ ``` Para comenzar, cree esta carpeta si aún no existe: ```bash mkdir -p ~/.local/share/jupyter/kernels ``` --- ## Crear el directorio del kernel Dentro de `~/.local/share/jupyter/kernels/`, cree un subdirectorio por cada kernel personalizado que desee registrar. El nombre del directorio será el identificador del kernel. Ejemplo: ```bash mkdir ~/.local/share/jupyter/kernels/Python-for-HPC ``` > Puede definir múltiples kernels, cada uno en su subdirectorio. --- ## Instalar paquetes necesarios en el entorno Antes de continuar, es necesario que el entorno que se usará como kernel tenga instalado el paquete `ipykernel`. Esto permite que Jupyter se comunique correctamente con el entorno. En caso de que se este creando un ambiente de Miniconda la instalación sería de la siguiente manera: Active el entorno e instale el paquete: ```bash # Activar entorno conda o virtualenv conda activate Python-for-HPC # Instalar ipykernel conda install -c conda-forge ipykernel ``` > Asegúrese de hacer esto para **cada entorno** que desee usar como kernel personalizado. > Tambien se pueden instalar otros paquetes que se quieran usar. --- ## Crear el archivo `kernel.json` En el subdirectorio del kernel, cree un archivo llamado `kernel.json` con el siguiente contenido: ```json { "argv": [ "/home/USER/.local/share/jupyter/kernels/KERNEL_NAME/init.sh", "-f", "{connection_file}" ], "display_name": "KERNEL_NAME", "language": "python" } ``` Este archivo es usado por jupyter para leer los contenidos de los kernels, y sus configuraciones. ### Parámetros: - Reemplace `USER` por su nombre de usuario. - Reemplace `KERNEL_NAME` por el nombre del kernel (debe coincidir con el nombre del directorio). - `"display_name"` es el nombre mostrado en la interfaz de Jupyter. --- ## Crear el script `init.sh` Este script configura el entorno (activa el entorno `conda`, carga módulos, etc.) antes de lanzar el kernel de Python. Este es ejecutado por el archivo `kernel.json` para cargar los requerimientos del ambiente. Ubíquelo dentro del mismo directorio del kernel (`~/.local/share/jupyter/kernels/KERNEL_NAME/`) y asegúrese de que tenga permisos de ejecución: ```bash chmod +x init.sh ``` ### Ejemplo de contenido de `init.sh`: ```bash #!/bin/bash export CONDA_TARGET_DIR=/work/USER/miniconda3 module purge # Limpia los módulos cargados previamente # Activar entorno conda source ${CONDA_TARGET_DIR}/bin/activate Python-for-HPC # Asegurar que los paquetes Python del entorno conda tengan prioridad ## Cambiar la versión de Python de acuerdo a la versión usada en el ambiente export PYTHONPATH=${CONDA_TARGET_DIR}/envs/Python-for-HPC/lib/python3.11/site-packages:${PYTHONPATH} # Cargar módulos necesarios (ejemplo: CUDA) module load cuda/11.6.2-gcc-9.3.0 # Ejecutar el kernel exec python -m ipykernel "$@" ``` > El nombre del script (`init.sh`) debe coincidir exactamente con el indicado en el `kernel.json`. > La línea final `exec python -m ipykernel "$@"` es obligatoria. Sin ella, el kernel no se ejecutará correctamente. --- ## Verificación de kernel 1. Reinicie la sesión en JupyterHub. 2. Cree un nuevo notebook. 3. Verifique que su kernel personalizado aparezca en la lista de kernels. 4. Pruebe ejecutándolo con: ```bash !which python !echo $PYTHONPATH ``` El resultado debería de ser la ruta a la herramienta Python, así como la ubicación de sus paquetes. ---