Jupyter kernels - Tool-assisted management
Introduction¶
Jupyter can execute code in different computing environments using kernels. Some kernels are provided by default (Python, R, etc.) but you may want to register your computing environment to use it in notebooks. For example, you may want to load a specific environment module in your kernel or use a Conda environment.
To register a Jupyter kernel, you can follow the steps highlighted in
the Jupyter kernels - Manual management
or use the nesi-add-kernel
tool provided within the Jupyter on NeSI service.
This page details the latter option, which we recommend.
Getting started¶
First you need to open a terminal. It can be from a session on Jupyter
on NeSI or from a regular ssh connection on Mahuika login node. If you
use the ssh option, make sure to load the JupyterLab module to have
access to the nesi-add-kernel
tool:
module purge # remove all previously loaded modules
module load JupyterLab
Then, to list all available options, use the -h
or --help
options as
follows:
nesi-add-kernel --help
Here is an example to add a TensorFlow kernel, using NeSI’s module:
nesi-add-kernel tf_kernel TensorFlow/2.8.2-gimkl-2022a-Python-3.10.5
and to share the kernel with other members of your NeSI project:
nesi-add-kernel --shared tf_kernel_shared TensorFlow/2.8.2-gimkl-2022a-Python-3.10.5
To list all the installed kernels, use the following command:
jupyter-kernelspec list
and to delete a specific kernel:
jupyter-kernelspec remove <kernel_name>
where <kernel_name>
stands for the name of the kernel to delete.
Conda environment¶
First, make sure the JupyterLab
module is loaded:
module purge
module load JupyterLab
To add a Conda environment created using
conda create -p <conda_env_path>
, use:
nesi-add-kernel my_conda_env -p <conda_env_path>
otherwise if created using conda create -n <conda_env_name>
, use:
nesi-add-kernel my_conda_env -n <conda_env_name>
Virtual environment¶
If you want to use a Python virtual environment, don’t forget to specify which Python module you used to create it.
For example, if we create a virtual environment named my_test_venv
using Python 3.10.5:
module purge
module load Python/3.10.5-gimkl-2022a
python -m venv my_test_venv
to create the corresponding my_test_kernel
kernel, we need to use the
command:
module purge
module load JupyterLab
nesi-add-kernel my_test_kernel Python/3.10.5-gimkl-2022a --venv my_test_venv
Singularity container¶
To use a Singularity container, use the -c
or --container
options as
follows:
module purge
module load JupyterLab
nesi-add-kernel my_test_kernel -c <container_image.sif>
where <container_image.sif>
is a path to your container image.
Note that your container must have the ipykernel
Python package
installed in it to be able to work as a Jupyter kernel.
Additionally, you can use the --container-args
option to pass more
arguments to the singularity exec
command used to instantiate the
kernel.
Here is an example instantiating a NVIDIA NGC container as a kernel. First, we need to pull the container:
module purge
module load Singularity/3.11.3
singularity pull nvidia_tf.sif docker://nvcr.io/nvidia/tensorflow:21.07-tf2-py3
then we can instantiate the kernel, using the --nv
singularity flag to
ensure that the GPU will be found at runtime (assuming our Jupyter
session has access to a GPU):
module purge
module load JupyterLab
nesi-add-kernel nvidia_tf -c nvidia_tf.sif --container-args "'--nv'"
Note that the double-quoting of --nv
is needed to properly pass the
options to singularity exec
.