User Tools

Site Tools


Jupyter / Ipython Notebook

Jupyter is installed in most of the python modules. To make use of it you would do something like:


However using it effectively on the cluster is a bit more complicated…

After Logging in your account check for your preferred python version as follows:

module avail 2>&1 | grep python

Now proceed to request for an interactive compute node where a configuration file and security measures will be established. A single core on an interactive node has proven sufficient for this exercise. Request an arbitrary interactive compute node as follows:

qsub -I -P PROJ0101 -q serial -l select=1:ncpus=1:mpiprocs=1:nodetype=haswell_reg


  1. “PROJ0101” is an arbitrary project name, kindly use your research project's shortname e.g. ERTH0859
  2. Record the cnode ID because you will ssh into that particular compute node when setting up your password.
  3. Advanced interactive compute node settings are found here: Example interactive job request.

In your interactive compute node, load the preferred python module as follows:

module add chpc/python/3.6.0_gcc-6.3.0


You are not the only person on the system, so it is important to set up authentication on your notebook so that not everyone gets access to your notebook (and worse – your data).

So first one needs a configuration file, this can be done by passing the generate-config parameter to jupyter as follows:

[USERNAME@cnode0010 ~]$ jupyter-notebook --generate-config


  1. This writes default config to: /home/USERNAME/.jupyter/
  2. The output file “” will be listed as a hidden file. Thus, to view it do a $ ls -a

Next you need to generate your password (remember it – you'll need it when you connect later):

from notebook.auth import passwd
Enter password:
Verify password:

Use the following command to access the “” file: $ cd /home/USERNAME/.jupyter/
Now edit the file, specifically edit the c.NotebookApp.passwd line.

c.NotebookApp.password = 'sha1:f27008fdb0eb:4c2f305d5e230edca16c7059882ba3ba63bee03b'

Remember to uncomment it, don't just copy and paste my hash in.

Starting a notebook inside a job

There might be a cleaner way of doing this… Please let us know if you have one!

VERY IMPORTANT: Do not add the lines below to your .ssh/config file on the cluster, you WILL break any attempt at parallel processing!

Open a terminal on your local machine and create a .ssh/config file.

touch .ssh/config

If your desktop system runs Windows, a simple way to deal with this is to run a unix-like environment inside Windows. You can either useCygwin Cygwin directly, or start a “Local Terminal” in MobaXterm. From this terminal you can edit the local ~/.ssh/config file as if you were working on a Linux computer.

Continue to edit the ~/.ssh/config file on your local machine by adding in these lines:

Host cnode*
    Hostname %h
    ProxyCommand ssh nc %h 22
    LocalForward 8838 localhost:8838

At this point you may not know what the LocalForward and localhost port numbers are so, on the cluster in the interactive node you had opened earlier type:

jupyter-notebook --no-browser

Edit given port number into LocalForward and localhost above


  1. Each session is likely to be assigned a different compute node and port number (i.e. cnode* changes every-time you request for an interactive compute node session)
  2. Confirm the localForward and localhost port numbers provided for each different session.

In your local terminal ssh directly to a compute node

ssh cnode*

You should be prompted for your password, twice. This is because the ssh logs in to Lengau first and then from Lengau it logs into the the compute node.

You are now ready to roll…

In your browser go to: http://localhost:8838 (note you can only do this to nodes where you currently have a job running).

The jobscript will look something like:

#PBS -q serial
#PBS -l select=1:ncpus=8:mpiprocs=1
#PBS -l walltime=08:00:00
#PBS -N Jupyter
#PBS -m abe
module add chpc/python/3.6.0_gcc-6.3.0
JUPYTERPORT=8838  # you could change this too, if you wanted to.
hostname > ~/
jupyter-notebook --port=${JUPYTERPORT} --no-browser

If you submit that job and wait for it to start running then you can check which host the session is running on with:

cat ~/

Then, again on your local machine, you need to connect to the compute node, i.e. ssh cnode0101. If you are working in Windows, do this from your Cygwin or MobaXterm terminal command line. You will be prompted for your Lengau login password.

Running Jupyter on a GPU node

Create the following job script:

#PBS -q gpu_1
#PBS -l select=1:ncpus=1:ngpus=1
#PBS -l walltime=8:00:00
#PBS -N Jupyter
#PBS -m abe
module purge
module add chpc/python/anaconda/3-2019.10
# Go to your directory
cd /mnt/lustre/users/username/jupyter_notebook
## get tunneling info
ipnport=$(shuf -i8000-9999 -n1)
ipnip=$(hostname -i)
## print tunneling instructions to an output file
echo -e "
Copy/Paste this in your local terminal to ssh tunnel with remote
ssh -N -L $ipnport:$ipnip:$ipnport user@host
Then open a browser on your local machine to the following address
" > tunnel.out
## start an ipcluster instance and launch jupyter server
jupyter-notebook --NotebookApp.token='' --no-browser --port=$ipnport --ip=$ipnip
sleep 8h

Submit the job with qsub jupyter.pbs

Once jobs is running go to the folder that you cd to in the script above and cat tunnel.out

The information needed to setup your tunnel will be shown in the line ssh -N -L ….

Copy this line and paste it into MobaXterm is you are a Windows user or a terminal if you are a MacOS or Linux User Just be sure to change user to your cluster username and host to

/var/www/wiki/data/pages/tipsntricks/ipython_notebook.txt · Last modified: 2021/03/04 11:45 by kgovender