Excerpt |
---|
Pawsey provides and maintains a number of prebuilt libraries and applications on Setonix, most of which are installed and managed through Spack. This page outlines how users can use Spack to install additional software or different builds of existing software that are not provided by Pawsey supported modules. |
...
To familiarise yourself with Spack features and concepts, read the Spack documentation (external site).
Note |
---|
Please keep in mind that versions listed in examples may change as new software stacks are deployed. |
Motivation for using Spack
...
$ module load spack/0.1721.0
Users can invoke Spack with the spack
command. spack
accepts a subcommand, or Spack command, as the first argument:
...
Column |
---|
|
Code Block |
---|
language | bash |
---|
theme | Emacs |
---|
title | Terminal 5: spack install with variants and dependencies |
---|
| $ # Before install, check the spec using specific version of fftw
$ spack spec namd@2.12 ~cuda fftw=3 interface=python ^fftw@3.3.4 +mpi +openmp +pfft_patches ^mpich@3.4.1
Input spec
--------------------------------
namd@2.12~cuda fftw=3 interface=python
^fftw@3.3.4+mpi+openmp+pfft_patches
Concretized
--------------------------------
namd@2.12%gcc@11.2.0~cuda cuda_arch=none fftw=3 interface=python arch=linux-sles15-zen3
^charmpp@6.7.1%gcc@11.2.0~cuda~omp~papi+production~pthreads+shared+smp~syncft~tcp~tracing backend=netlrts build-target=LIBS patches=92d507d8b72ac01f114f7772510049cc7656f93daeadef46e1f2b00ad8533d2b,e636c3f88a6944c87d910d4c8fdf25146b60f57e09228497a6cc01c7dbae9569 pmi=none arch=linux-sles15-zen3
^fftw@3.3.4%gcc@11.2.0+mpi+openmp+pfft_patches patches=4c813199aa39c0d2b23259ee3c3a58c9c96a3c0d09fe3485a33f299b95e0d9e7 precision=double,float arch=linux-sles15-zen3
^autoconf@2.69%gcc@11.2.0 arch=linux-sles15-zen3
^automake@1.15.1%gcc@11.2.0 arch=linux-sles15-zen3
^libtool@2.4.6%gcc@11.2.0 arch=linux-sles15-zen3
^mpich@3.4.1%gcc@11.2.0~argobots+fortran+hwloc+hydra+libxml2+pci+romio+slurm~verbs+wrapperrpath device=ch4 netmod=ofi pmi=pmi arch=linux-sles15-zen3
^python@3.6.13%gcc@11.2.0+bz2+ctypes+dbm~debug+libxml2+lzma+nis~optimizations+pic+pyexpat+pythoncmd+readline+shared+sqlite3+ssl~tix~tkinter~ucs4+uuid+zlib arch=linux-sles15-zen3
^tcl@8.6.11%gcc@11.2.0 arch=linux-sles15-zen3
^zlib@1.2.11%gcc@11.2.0+optimize+pic+shared arch=linux-sles15-zen3
$ # the spec looks okay, let's install it
$ sg <projectcode> -c 'spack install namd@2.12 ~cuda fftw=3 interface=python ^fftw@3.3.4 +mpi +openmp +pfft_patches' |
Note |
---|
Spack would normally download the source code for any packages that it needs to install. The source code for NAMD has a particular restriction that it cannot be downloaded by spack but must be obtained separately: Column |
---|
|
Code Block |
---|
language | bash |
---|
theme | Emacs |
---|
title | Terminal 6: namd install issue |
---|
| $ sg <projectcode> -c 'spack install namd@2.12 ~cuda fftw=3 interface=python ^fftw@3.3.4 +mpi +openmp +pfft_patches'
...
==> Installing namd-2.12-tey6bdfijoegx3dkxfc553nckfecmhku
==> No binary for namd-2.12-tey6bdfijoegx3dkxfc553nckfecmhku found: installing from source
...
==> Error: FetchError: Manual download is required for namd. Refer to http://www.ks.uiuc.edu/Research/namd/ for download instructions.
|
|
This can be addressed by first manually downloading the source tarball into your current directory where spack will detect it. |
|
Install a package for the entire project team
Pawsey provides a utility script, called spack_project.sh
introduced a new Spack subcommand, spack project
, to perform package installations with Spack that need to be visible to for the entire project team, rather than just a single user. This script is a drop-in replacement for the spack
command:
$ spack _ project .sh spec <arguments>
$ spack _ project .sh install <arguments>
The key differences compared to spack
are the locations where packages are installed and modulefiles are created:
- Software:
/software/projects/<project-id>/setonix/<datetag>/software/<arch>/<compiler>/<package>-<version>-<unique_hash>
- Modulefiles:
/software/projects/<project-id>/setonix/<datetag>/modules/<cpu-arch>/<compiler-name>/<compiler-version>/<package>/<version>-<unique_hash>.lua
...
/software/projects/<project-id>/<user-id>/setonix/<datetag>/modules/<cpu-arch>/<compiler-name>/<compiler-version>/<package>/<version>-<unique_hash>.lua
...
Column |
---|
|
Code Block |
---|
language | bash |
---|
theme | Emacs |
---|
title | Terminal 8: spack module example |
---|
| $ sg <projectcode> -c 'spack module lmod refresh --delete-tree -y' # generate LUA modulefiles for Lmod
==> Regenerating lmod module files
$ # list the fftw modules available
$ module avail fftw
fftw/3.3.7-aormek7
fftw/3.3.7-ibdoa45
fftw/3.3.8-ggtdo27
$ # load a particular fftw library
$ module load fftw/3.3.7-aormek7
$ # to determine if this module is the correct variant one can examine the module file itself
$ head -4 /software/projects/pawsey0xxx/user/setonix/modules/zen3/gcc/11.2.0/fftw/3.3.7-aormek7.lua | tail -1
-- fftw@3.3.7%gcc@11.2.0~mpi~openmp~pfft_patches precision=double,float arch=linux-sles15-zen3/aormek7
$ # compare this to other 3.3.7 module
$ head -4 /software/projects/pawsey000x/user/setonix/modules/zen3/gcc/11.2.0/fftw/3.3.7-ibdoa45.lua | tail -1
-- fftw@3.3.7%gcc@11.2.0~mpi+openmp+pfft_patches patches=8132c27659f992311dcf3d1500056e0f9400aa22f6824124e3607dbaa8dfe3c0 precision=double,float arch=linux-sles15-zen3/ibdoa45
|
|
...
.
Column |
---|
Note |
---|
title | If the recently installed module is not being listed by `module avail` |
---|
| If your module is not being listed by the module avail command, it is very possible that Lmod is forcing the use of the cache instead of a real new search of installed modules. Then we recommend to remove the old cached list of modules, forcing Lmod to search again for the currently installed modules including the recently created ones. For that, users should simply delete the existing Lmod cache with the following command: rm -rf ~/.cache/lmod
rm -rf ~/.lmod.d/.cache
|
|
Installing a software package from a user-modified source code
...
First, we need a Spack recipe that takes a tar file from the current working directory rather than the Internetthe current working directory rather than the Internet (note that this is a long command so next line won't display properly in a small window):
$ cp -r /software/setonix/20222024.1105/spack/var/spack/repos/builtin/packages/gromacs $MYSOFTWARE/setonix/spack_repo/packages
...
in the same directory of the tar file.
Uninstalling software built with Spack
To remove the modules created with Spack use the command:
$ spack module lmod rm
and answer questions from the promt.
To remove the installed software with Spack use the command:
$ spack uninstall <package>@<version>
and answer questions from the promt.
Software built with Spack
Spack makes use of dynamic libraries and rpath
when building software. The use of rpath
means that executables contain the paths in which libraries are search searched for at runtime. The result of using rpath
is that runtime are reproducible as executables will always point to the same library regardless of environment at runtime. A consequence of this is that if software has been built with not the desired version and build of library, it is not easy to have the executable use a different version. The package must be rebuilt with the different version of the library.
...