slurm/socket/singularity-jupyter

Launcher: slurm

A jupyter notebook (or lab) intended to be run in a Singularity container.

Usage

$ tunel run-app <server> slurm/socket/singularity-jupyter

Arguments

Name Description Split By
jupyterlab Try running jupyterlab instead (e,g. set to true to enable) NA
workdir Working directory for the notebook NA
modules comma separated list of modules to load ,


If split by is provided, this means the argument takes a list, and you should use this as a delimiter.

Needs

  • socket

Scripts

jupyter.sbatch

This app uses the slurm launcher by default.

#!/bin/bash

JOB_NAME="{{ jobname }}"
SOCKET_DIR="{{ scriptdir }}"
mkdir -p ${SOCKET_DIR}

# Include Singularity cachedir if not set
{% include "bash/singularity/set-cache-tmp.sh" %}

# Working Directory
NOTEBOOK_DIR={% if args.workdir %}{{ args.workdir }}{% else %}$HOME{% endif %}
cd $NOTEBOOK_DIR

echo "Job is ${JOB_NAME}"
echo "Socket directory is ${SOCKET_DIR}"
echo "Notebook working directory is ${NOTEBOOK_DIR}"

# Create .local folder for default modules, if doesn't exist
{% include "bash/python/create-local.sh" %}

# Remove socket if exists
{% include "bash/socket/set-socket.sh" %}

# Load modules requested by user
{% for module in args.modules %}module load {{ module }} || printf "Could not load {{ module }}\n"
{% endfor %}

# Add variables to PATH
{% for path in paths %}export PATH={{ path }}:${PATH}
{% endfor %}

# Just pull to tmp for now so cleaned up
SIF="${SINGULARITY_CACHEDIR}/datascience-notebook.sif"
CONTAINER="{% if args.container %}{{ args.container }}{% else %}docker://jupyter/datascience-notebook{% endif %}"

# First effort
if command -v singularity &> /dev/null
then
    printf "singularity pull ${SIF} ${CONTAINER}\n"
    singularity pull ${SIF} ${CONTAINER}

    # In case doesn't exist yet
    mkdir -p $HOME/.jupyter

    printf "singularity exec --home ${HOME} --bind ${HOME}/.local:/home/jovyan/.local ${CONTAINER} jupyter notebook --no-browser --sock ${SOCKET}\n"
    singularity exec {% if args.jupyterlab %}--env JUPYTER_ENABLE_LAB=yes{% endif %} --home ${HOME} --bind ${HOME}/.local:/home/jovyan/.local --bind ${HOME}/.jupyter:/home/jovyan/.jupyter "${CONTAINER}" jupyter {% if args.jupyterlab %}lab{% else %}notebook{% endif %} --no-browser --sock ${SOCKET}
else
    printf "Singularity is not available.\n"
fi

Have any questions, or want to request a new app or launcher? Ask us!