The new Spack code management system
Overview
Teaching: 15 min
Exercises: 5 minQuestions
How are different software versions handled?
Objectives
Understand the role of Spack
What is Spack and why do we need it?
Note
An important requirement for making valid physics results is computational reproducibility. You need to be able to repeat the same calculations on the data and MC and get the same answers every time. You may be asked to produce a slightly different version of a plot for example, and the data that goes into it has to be the same every time you run the program.
This requirement is in tension with a rapidly-developing software environment, where many collaborators are constantly improving software and adding new features. We therefore require strict version control; the workflows must be stable and not constantly changing due to updates.
DUNE must provide installed binaries and associated files for every version of the software that anyone could be using. Users must then specify which version they want to run before they run it. All software dependencies must be set up with consistent versions in order for the whole stack to run and run reproducibly.
Spack is a tool to handle the software product setup operation.
Minimal spack for root analysis and file access
You can get spack going with our minimal implementation
. /cvmfs/dune.opensciencegrid.org/dune-spack/spack-develop-fermi/setup-env.sh
spack env activate dune-tutorial
This sets up the file and job management packages (metacat, rucio, justin) and a version of root that can do streaming transfers. It is useful for end stage tuple analysis.
A full version with larsoft is in the works.
You can list what is available in that environment via
spack find
Which lists packages like this:
-- linux-almalinux9-x86_64_v2 / %c,cxx=gcc@12.5.0 ---------------
cmake@3.31.8 libffi@3.4.8 openssl@3.3.3 root@6.28.12
davix@0.8.10 libjpeg-turbo@3.0.4 patchelf@0.17.2 rust@1.85.0
ftgl@2.4.0 libpng@1.6.47 pcre@8.45 unuran@1.8.1
ifdhc@2.8.0 lz4@1.10.0 postgresql@15.8 vdt@0.4.6
ifdhc-config@2.8.0 ninja@1.13.0 python@3.9.15 xrootd@5.6.9
intel-tbb-oneapi@2021.9.0 nlohmann-json@3.11.3 re2c@3.1 xxhash@0.8.3
This particular environment loads defined versions of the packages.
Also the PYTHONPATH describes where Python modules will be loaded from.
Try
which root
to see the version of root that spack sets up. Try it out!
Spack basic commands
Command | Action |
---|---|
spack list |
List everything spack knows about |
spack find |
Displays what has been setup |
Key Points
Spack is a tool to deliver well defined software configurations
CVMFS distributes software and related files without installing them on the target computer (using a VM, Virtual Machine).