Spack rappresenta uno strumento avanzato di gestione dei pacchetti, mirato a supportare simultaneamente diverse versioni e configurazioni di software su una vasta gamma di piattaforme e ambienti. In particolare, è stato appositamente progettato per rispondere alle esigenze dei grandi centri di supercalcolo, in cui numerosi utenti e team applicativi condividono installazioni comuni di software su cluster caratterizzati da architetture non convenzionali e l’utilizzo di librerie prive di un’ABI standardizzata. Un aspetto distintivo di Spack è la sua natura non distruttiva: l’installazione di una nuova versione non interferisce con le installazioni preesistenti, consentendo così la coesistenza di molteplici configurazioni sullo stesso sistema.
L’ambiente Spack può essere ottenuto via git
git clone --depth=100 --branch=releases/v0.21 https://github.com/spack/spack.git spack
Una volta clonato, è possibile caricare l’ambiente con
cd spack
. share/spack/setup-env.sh
Adesso possiamo visualizzare quali sono i compilatori già installti sul sistema e quelli disponibili:
spack compiler find
spack compilers
Impieghiamo Spack sul cluster per l’installazione del software e la generazione di module file per Environment Modules.
Nello specifico, configuriamo la generazione dei moduli tramite il file di configurazione
dei moduli in /mnt/raid/software/spack/etc/spack/modules.yaml
modules:
default:
enable:
- tcl
tcl:
hash_length: 0
include:
- gcc
exclude_implicits: true
projections:
all: '{name}/{version}-{compiler.name}-{compiler.version}'
gcc: '{name}/{version}'
^mpi: '{name}/{version}-{^mpi.name}-{^mpi.version}-{compiler.name}-{compiler.version}'
all:
conflict:
- '{name}'
autoload: direct
Per aggiornare i moduli si può usare il comando
spack module tcl refresh --delete-tree -y
Per rendere disponibili i file di modulo su tutti i nodi è necessario aggiungere
il path alla configurazione di sistema. Questo può essere fatto creando il file
addspackmodulepath.sh
:
#!/bin/bash
apt-get install -y environment-modules
echo '/mnt/raid/software/spack/share/spack/modules/linux-ubuntu20.04-aarch64/ # Spack Modules' >> /etc/environment-modules/modulespath
ed eseguendo
./runsetup.sh addspackmodulepath.sh
Per l’utenza la presenza di Spack è virtualmente invisibile, ciò a cui gli utenti hanno accesso sono i file di modulo per il caricamento nell’ambiente del software installato.
Si possono investigare i moduli disponibili con il comando
module avail
e caricare nell’ambiente con il comando
module load programma/versione-compilatore
o rimuovere con
module unload programma/versione-compilatore
Un ambiente pulito può essere ottenuto con il comando
module purge
È importante che si faccia uso sempre di catene di moduli compatibili, ovvero
di moduli (software) generato/compilato con il medesimo compilatore. Altrimenti
si rischia la creazione di ambienti inconsistenti e impossibili da usare. I file
di modulo sono generati in modo da richiedere il caricamento delle dipendenze
dirette che sono state usate nella loro creazione, tipicamente dipendenze sulla implementazione di MPI scelta (OpenMPI
o MPICH
).
Esempio: carichiamo un diverso compilatore, al login la richiesta
gcc --version
risponderà
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Eseguiamo il comando
module load gcc/12.3.0
seguito da
gcc --version
che ora ci risponderà
gcc (Spack GCC) 12.3.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.