Spack¶
Currently, Spack is only available on Alpine. Spack is a package manager designed for installing multiple configurations. Spack is designed for Supercomputing clusters, making it easy to install and configure software that may not currently be available in the Alpine software stack. The following documentation demonstrates how to activate & use the CURC Spack module and utilize your own Spack environments to install packages and compilers.
Using Spack on CURC¶
You can follow these steps from a Research Computing terminal session via a compile job (acompile
) or within a batch or interactive job.
Activate and Use the CURC Spack Module¶
Run the following command to load the Spack module:
[johndoe@c3cpu-c11-u17-2 ~]$ module load spack
You can confirm that spack has been loaded and find a list of useful spack commands by running the spack help
command:
[johndoe@c3cpu-c11-u17-2 ~]$ spack help --all
Using Spack Environments¶
Now that you’ve loaded the Spack module, you’ll need to create a spack environment in which you’ll install software.
1. Create a Spack environment. You can create a Spack environment with the following command:
[johndoe@c3cpu-c11-u17-2 ~]$ spack env create <environment name>
Note that, by default, environment specs are stored in /projects/$USER/spack/environments/
. This location can be changed by modifying the environments_root
variable within ~/.spack/config.yaml
.
2. Activate your Spack environment. You can activate your Spack environment with one of the following commands:
[johndoe@c3cpu-c11-u17-2 ~]$ spacktivate <environment name>
or
[johndoe@c3cpu-c11-u17-2 ~]$ spack env activate <environment name>
To deactivate your environment, you can use one of the following commands:
[johndoe@c3cpu-c11-u17-2 ~]$ despacktivate
or
[johndoe@c3cpu-c11-u17-2 ~]$ spack env deactivate
Installing Software with Spack¶
Once you’ve created and activated an environment, you can begin installing software using Spack. To search for available software in Spack easily, you can use Spack’s provided search engine. Additionally, you can use the Spack list command spack list
, however, this command is slow as it lists all 7000+ packages available for installation with Spack. To search for a specific software by name, you can use spack list <software name>
. For example:
[johndoe@c3cpu-c11-u17-2 ~]$ spack list fastqc
fastqc
==> 1 packages
For additional information about a specific piece of software (available versions, variants, and dependencies), you can use thespack info <software name>
command. Note that the ‘preferred version’ is the default version which will be installed if no alternative version is specified.
Once you’ve confirmed that a piece of software is available, you can install it in the active environment using the spack install --add
command:
[johndoe@c3cpu-c11-u17-2 ~]$ spack install --add fastqc
Note:
- The
--add
argument is required to add package specs to an environment. You can separately add specs >without installing a package using thespack add <software name>
command.- If no compiler is specified, then a default compiler will be installed and used within the environment.
You can also modify the installation commands to meet your installation needs. You can specify which version you’d like to install using the @
operator:
[johndoe@c3cpu-c11-u17-2 ~]$ spack install --add fastqc@0.11.9
Once you have installed a package, you can view what packages are installed in your environment using the spack find
command. For example,
[johndoe@c3cpu-c11-u17-2 ~]$ spack find
==> In environment my_test_environment
==> Root specs
fastqc@0.11.9
==> Installed packages
-- linux-rhel8-zen / gcc@8.5.0 ----------------------------------
berkeley-db@18.1.40 fastqc@0.11.9 ncurses@6.4 pkgconf@1.9.5
bzip2@1.0.8 gdbm@1.23 openjdk@11.0.17_8 readline@8.2
diffutils@3.9 libiconv@1.17 perl@5.36.0 zlib@1.2.13
==> 12 installed packages
Note that since we did not specify a compiler, the default compiler ofgcc@8.5.0
was used. Please also note that the default compiler may change.
Installation Locations and Specifics¶
The root of the Spack installation tree, by default, is /projects/$USER/software/spack
(this can be changed in ~/config.yaml
). From there, executables can be found in subdirectories depending on the OS and compiler used to install the software. Software will be installed here regardless of whether the software was installed in an environment.
Spack will always check the installation root prior to installing software, in an environment or otherwise. If the software is not found in the installation root, it will be installed there. If the software is found in the installation root, it will not be installed. When attempting to install in an environment, symbolic links to the installation root will be created in /projects/$USER/spack/environments/<envname>/.spack-env/view
. This behavior means that once a piece of software is installed, it can be linked to any environment without having to perform the installation again.
The default cache is located at /scratch/alpine/$USER/spack/cache
. This directory will contain any previously-installed tarballs and repositories, as well as any miscellaneous cache items.
Installing and Using Compilers with Spack¶
In addition to standard software packages, you can use Spack to install compilers which are not currently available in the Alpine software stack. It is highly recommended to NOT install compilers directly within the environment. Instead, we suggest that you first install the compiler outside of the environment. If it is installed directly within an environment, then it will depend on the default compiler within the environment. The following is our recommended way to install a new compiler and set it as the default compiler for your environment.
Install the compiler outside of your environment (only needs to be done once):
spack install gcc@13.1.0
Obtain the location of the compiler install and save it into a local environmental variable:
gcc_location=$(spack location -i gcc@13.1.0)
Create and activate your environment:
spack env create my_test_env spack env activate my_test_env
Remove any compilers that are in the environment already:
spack compiler remove gcc -a
Note that you can also remove intel compilers using
spack compiler remove intel -a
Add the compiler you installed outside of the environment and install the compiler into the environment:
spack compiler add $gcc_location spack install --add gcc@13.1.0
Note that the install of the compiler within the environment is necessary as it will install all dependencies needed for the compiler.
Once the compiler is added, you can install any subsequent packages using the compiler you’ve installed with the %
operator. For example:
[johndoe@c3cpu-c11-u17-2 ~]$ spack install --add fastqc%gcc@13.1.0
Installing compilers can take a long time, so make sure you request enough time withacompile
using the--time
directive. Additionally, build times can be reduced by specifying more cores withacompile -n 4
(or even more cores with sinteractive jobs) in conjunction withspack install --add -j 4
.
Adding a compiler from the CURC stack¶
You can also add any compilers to spack that are already available in the Alpine software stack. To accomplish this, simply load the module associated with your preferred compiler:
[johndoe@c3cpu-c11-u17-2 ~]$ module load aocc/3.2.0
From there, you can add the compiler to Spack. All compilers in the Alpine software stack can be located with the environment variable CURC_<compiler>_BIN
. In the case of aocc/3.2.0
:
[johndoe@c3cpu-c11-u17-2 ~]$ spack compiler add $CURC_AOCC_BIN
Key Spack Terms:¶
Term | Definition |
---|---|
Spec | Description of the build requirements for an installation. This includes the software, version, compiler, and other variants. |
Variant | An option or feature that can be toggled for a specific package. These usually correspond to a configuration or compilation setting. |
Repo | A central location which stores packages. Repo locations can be configured. |
Environment | A collection of packages and dependencies that are available to a user. In Spack, environments do not interact. |
Basic Spack commands:¶
Command | Function |
---|---|
spack list |
Find and search for available packages by name |
spack info |
Display detailed information about a package, including versions and dependencies |
spack env create <environment name> |
Create a Spack environment |
spack env list |
List all of your environments |
spack env status |
Check which environment is currently activated |
spack remove <environment name> |
Remove an environment |
spacktivate <environment name> |
Activates a Spack environment |
despacktivate |
Deactivates a Spack environment |
spack find |
List and search packages installed in the active environment |
spack install --add <software> |
Adds specs for selected package and installs it in the active environment |
spack uninstall <software> |
Removes package from the activate environment. Refer to the spack documentation for additional information |
spack compilers |
Lists available compilers |
spack spec <software> |
Shows all dependencies and items that would be installed if <software> is installed > |
Troubleshooting Spack¶
If an installation fails, there are several ways to troubleshoot the failure. Common issues with installations include:
- Building with the wrong compiler: Double check if the compiler you are using is compatible with the software you are attempting to build.
- Building with an incompatible variant set: Confirm that the configuration settings for the software are compatible and as expected. If not, try enabling or disabling variants that may be causing problems.
- One can easily see variants and possible conflicts by searching the package using Spack’s provided search engine and viewing the “Variants” and “Conflicts” section of the documentation. Additionally, one can view
package.py
in the “Build System” section to directly view the code that defines variants and conflicts.
- One can easily see variants and possible conflicts by searching the package using Spack’s provided search engine and viewing the “Variants” and “Conflicts” section of the documentation. Additionally, one can view
- Building an unexpected version: Make sure you are building the intended version of a software. If a new version is failing, try insalling an older version.
- Building with an unexpected version of a dependency: If there are issues installing a dependency, you can modify the specs of a dependency.
Additionally, Spack will oftentimes output troubleshooting suggestions. To increase the verbosity of spack install
, use spack -dv install
.
Need additional help? Fill out our help form to request assistance. We are be happy to help with any questions you may have!
Suggestions provided in the Troubleshooting Spack
subsection were based off of Spack documentation written by NERSC.