Singularity
Singularity is a system that allows users to run applications within a "container" that packages all software dependencies into an "image". This allows a user to run software that may need system libraries that are not available on Chinook. For example software may need a version of GLIBC that is unavailable on Chinook, or software was built on Ubuntu and rebuilding it for CentOS may be difficult. Using a Singularity container can mitigate these issues.
Running Singularity
To run Singularity, the singularity environment module needs to be loaded: module load singularity
. Afterwards you can run a program using the singularity exec
command:
Mounting Directories
By default Singularity will bind your current working directory and your $HOME directory to the container, allowing those files to be accessed. However if you need other directories to be accessible to the Singularity image you will have to bind those explicitly using the --bind
option. For example this will be bind a user's $CENTER1 directory
to /mnt/center1
in the container:
singularity exec --bind $CENTER1:/mnt/center1 /usr/local/unsupported/SINGULARITY/centos7.img ls /mnt/center1
If you need to bind multiple directories you will need to separate each "mount pair" with a comma. For example if we wanted to bind $CENTER1
and $ARCHIVE
to /mnt/center1
and /mnt/archive
in the container:
singularity exec --bind $CENTER1:/mnt/center1,$ARCHIVE:/mnt/archive /usr/local/unsupported/SINGULARITY/centos7.img ls /mnt/archive
Environment Variables
When using the singularity exec
command Environment Variables on the host machine are present in your Singularity container. However if they point to directories or commands that are not in the container than they will not reference anything.
If you need to set an environment variable at runtime you can using the SINGULARITYENV_
prefix before running the command:
Please note that you cannot use this to overwrite an environment variable in the Host environment. If you need to do so, you would need to run the --cleanenv
flag. You may want to do this if you'd like to set the $CENTER1 or $ARCHIVE variables in your container. Multiple environments can be set by separateing them with a space (
):
Using Singularity in a batch script
Singularity can be used in a batch script by loading the Singularity module and running the singularity exec
command.
Additionally if you need to run a set of commands in a Singularity environment you can use the singularity shell
command. This can be useful if the whole pipeline is installed in the container.
This script will bind $CENTER1 to /mnt/center1 inside the Singularity container and then execute the commands in between <<EOF
and EOF
in a shell in the container, in this example running "processingScript.py" and following that with "analyzingScript.py" which are located in $CENTER1, which has been bound to /mnt/center1 in the container.
Creating Images
One advantage to Singularity as a container solution is that Singularity does not require admin access to run. Therefore users, if needed, and create or obtain images themselves to run on Chinook.
Images will need to be created on a system that the user has Administrator access to and users cannot create Singularity images on Chinook itself. Information on building a container can be located via Singularity's documentation
Last updated