Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
outlinetrue

...

Spack Introduction and Environment Setup

What is Spack?

Spack is a package manager, similar to yumapt-get, or conda. It allows for multiple package versions/configurations.  Unlike the other package managers listed, Spack is specifically designed to be used on HPC resources with varying architectures.  The purpose of this documentation is to provide a practical guide to quickly enable you to take advantage of its use in your research.

...

Next, add the following code to your ~/.bashrc, which will automatically load Spack into your shell on all servers besides gateways:

Code Block
languagebash
# detect kernel then source spack file if it exists
KERNEL=$(uname -r | cut -d '.' -f1,2,3)
 
if [[ "${HOSTNAME}" != "pascal.med.cornell.edu" ]] || [[ "${HOSTNAME}" != "aphrodite.med.cornell.edu" ]] || [[ "${HOSTNAME}" != "aristotle.med.cornell.edu" ]]; then
 
    if [[ "${KERNEL}" == *"2.6.3"* ]] ; then
            if [ -f /softlib/apps/EL6/spack/share/spack/setup-env.sh ] ; then
                    . /softlib/apps/EL6/spack/share/spack/setup-env.sh
            fi
    fi
 
    if [[ "${KERNEL}" ==  *"3.10"* ]] ; then
            if [ -f /softlib/apps/EL7/spack/share/spack/setup-env.sh ] ; then
                    . /softlib/apps/EL7/spack/share/spack/setup-env.sh
            fi
    fi
 
fi

...

Warning

Note: Sometimes, you'll see multiple installations of the same package installed on the same OS, with the same compiler (e.g. relion@3.0_beta is listed 3 times in the above output). What this means is that this packages was installed for the same OS/compiler, but with different configuration options. This will be explained in the next section.

...

Warning

Before loading any Spack packages, it is helpful to know that Spack stores a list of loaded packages in the variable $LOADEDMODULES. Executing the command echo $LOADEDMODULES at this point will produce a blank line, as we haven't loaded Spack packages yet (try it out, just to prove this to yourself).

...

Code Block
spack load -r python@3.7.0^gcc@6.3.0
  • The -r instructs Spack to load all modules that python@3.7.0 depends on. This is typically done automatically, but not currently done for perl, python, or R (this is because Spack does not build these packages with RPATH support--this may change in the future).

...

Code Block
echo $LOADEDMODULES | sed "s/:/\n/g" | sort

Here, we can see that python@3.7.0 is indeed loaded, as are all packages that it depends on.

...

How to use a unload package

To avoid confusion, as well as conserve memory, you may wish to unload a Spack package (this is especially true in complex workflows). Doing so is very easy:

Code Block
spack unload python@3.7.0


Let's check and make sure we have really unloaded python@3.7.0:

Code Block
echo $LOADEDMODULES | sed "s/:/\n/g" | sort

OUTPUT:

Filter by label (Content by label)
showLabelsfalse
max5
spacescom.atlassian.confluence.content.render.xhtml.model.resource.identifiers.SpaceResourceIdentifier@28a7b0
showSpacefalse
sortmodified
reversetrue
typepage
cqllabel = "spack" and type = "page" and space = "WIKI"
labelsspack

...