Running Jupyter-notebook on GPU nodes
Objective: we will learn how to:
- Run Jupyter notebook with custom conda environment
- Use custom conda environment within a Notebook.
First we request some resources using SGE:
- 1 GPU
- 20 GB memory
- 2h walltime
$ qlogin -q volta.q -l h_vmem=20G -l h_rt=2:00:00
A new session well be opened in a GPU node.
We load anaconda
$ module load anaconda
We create a new environment with a specific version of python.
$ conda create -y --prefix $WORK/meso1 python=3.7
We check for our conda environment
$ conda env list
meso1
meso2
...
We use meso1
for example
$ conda activate meso1 (meso1)$
By default Jupyter notebook use $HOME
directory to store runtime data.
Since $HOME
directory is read only in compute nodes. We need to tell Jupyter to use another directory.
Modify Jupyter data directory (we use $WORK
)
(meso1)$ export JUPYTER_DATA_DIR=$WORK/.jupyter
Set this conda environment (meso1
) to Jupyter notebook, we need to install ipykernel
(meso1)$ conda install -c anaconda ipykernel
and add meso1
to Jupyter kernel
$ (meso1)$ python -m ipykernel install --user --name=meso1
And finally start Jupyter notebook
jupyter-notebook --no-browser --ip=0.0.0.0
Where command options are:
–no-browser
do not start the browser automatically–ip=0.0.0.0
the server will listen on all interfaces- The system will pick a random port number to use.
We should have an output like this:
[deleted lines] ... [I 15:24:14.851 NotebookApp] Jupyter Notebook 6.1.4 is running at: [I 15:24:14.851 NotebookApp] http://node3-70:8888/?token=a70aba5da2392737bea00f1225d8b62c7a45219ac3fb4f23 [I 15:24:14.851 NotebookApp] or http://127.0.0.1:8888/?token=a70aba5da2392737bea00f1225d8b62c7a45219ac3fb4f23 [I 15:24:14.851 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [C 15:24:14.860 NotebookApp] To access the notebook, open this file in a browser: file:///Work/Users/kmazouzi/.jupyter/runtime/nbserver-42070-open.html Or copy and paste one of these URLs: http://node3-70:8888/?token=a70aba5da2392737bea00f1225d8b62c7a45219ac3fb4f23 or http://127.0.0.1:8888/?token=a70aba5da2392737bea00f1225d8b62c7a45219ac3fb4f23 (meso1)$
There are three important pieces of information, above, to remember:
- The node used by SGE, here node3-70
- The port picked by Jupyter-nootbook, here 8888
- The token of the session, here token=a70aba5da2392737bea00f1225d8b62c7a45219ac3fb4f23
We can't connect directly to the link above because node3-70 is located in private network. We have to use ssh port tunneling.
SSH tunnel
We need to establish a tunnel from mesoshared
to this node (node3-70).
From a new terminal on mesoshared
:
$ ssh -g -N -L 9999:localhost:8888 kmazouzi@node3-70
This command will map remote port 8888
from node3-70
to local port 9999
in mesoshared
(localhost
).
We can use another value than 9999
for local port
Finally we will modify the URL above to connect to our Jupyter session.
OLD URL proposed by Jupyter
http://node3-70:8888/?token=a70aba5da2392737bea00f1225d8b62c7a45219ac3fb4f23\\
Replace node3-70:8888
by mesoshared.univ-fcomte.fr:9999
The new URL to use, from your browser
http://mesoshared.univ-fcomte.fr:9999/?token=a70aba5da2392737bea00f1225d8b62c7a45219ac3fb4f23
Open a browser on local machine and browse the URL above.
Notice that we can open our conda environment (meso1
) from the Notebook