You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
4.1 KiB
Markdown
125 lines
4.1 KiB
Markdown
---
|
|
layout: default
|
|
---
|
|
|
|
# Spack
|
|
|
|
[Spack](https://spack.io/) 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.
|
|
|
|
## Amministrazione
|
|
|
|
L'ambiente Spack può essere ottenuto via *git*
|
|
```bash
|
|
git clone --depth=100 --branch=releases/v0.21 https://github.com/spack/spack.git spack
|
|
```
|
|
Una volta clonato, è possibile caricare l'ambiente con
|
|
```bash
|
|
cd spack
|
|
. share/spack/setup-env.sh
|
|
```
|
|
Adesso possiamo visualizzare quali sono i compilatori già installti sul sistema
|
|
e quelli disponibili:
|
|
```bash
|
|
spack compiler find
|
|
spack compilers
|
|
```
|
|
|
|
Impieghiamo Spack sul cluster per l'installazione del software e la generazione
|
|
di *module file* per [Environment Modules](https://modules.readthedocs.io/en/latest/).
|
|
|
|
Nello specifico, configuriamo la generazione dei moduli tramite il file di configurazione
|
|
dei moduli in `/mnt/raid/software/spack/etc/spack/modules.yaml`
|
|
```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
|
|
```bash
|
|
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`:
|
|
```bash
|
|
#!/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
|
|
```bash
|
|
./runsetup.sh addspackmodulepath.sh
|
|
```
|
|
|
|
## Utenza
|
|
|
|
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
|
|
```bash
|
|
module avail
|
|
```
|
|
e caricare nell'ambiente con il comando
|
|
```bash
|
|
module load programma/versione-compilatore
|
|
```
|
|
o rimuovere con
|
|
```bash
|
|
module unload programma/versione-compilatore
|
|
```
|
|
Un ambiente pulito può essere ottenuto con il comando
|
|
```bash
|
|
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
|
|
```bash
|
|
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
|
|
```bash
|
|
module load gcc/12.3.0
|
|
```
|
|
seguito da
|
|
```bash
|
|
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.
|
|
```
|