Projet

Général

Profil

Spack » Historique » Version 2

Argus Rusard, 27/04/2023 11:09

1 1 Argus Rusard
# Spack
2
3 2 Argus Rusard
{{>toc}}
4
5 1 Argus Rusard
L'environnement gestion de paquets logiciels [Spack](https://spack.io) est installé sur le cluster.
6
7
Les *paquets explicites*[^explicit] sont visible avec les modules classiques dans leur propre [[Modules#Modules-Spack|dépôt]].
8
9
[^explicit]:
10
    Le terme *paquet explicite* correspond aux paquets qui ont été installés directement par opposition aux *paquets implicites* Spack installés car ils sont une dépendance nécessaire d'un autre paquet
11
12
Pour une utilisation courante, on peut se contenter de charger les paquets à travers les modules.
13
14
15
## Désactiver Spack de l'environnement
16
17
Le chargement de Spack dans l'environnement utilisateur est effectué automatiquement au chargement de la session (lors d'une connexion ou d'un job). Selon les cas, cela peut représenter un temps supplémentaire au démarrage de la session.
18
19
Si on ne souhaite pas utiliser spack on peut empêcher le chargement dans la session en ajoutant un fichier vide dans son répertoire `$HOME`:
20
21
```bash
22
touch ~/.spack_source_no
23
```
24
25
On peut évidemment rétablir le chargement automatique en début de session en supprimant ce fichier:
26
27
```bash
28
rm -f ~/.spack_source_no
29
```
30
31
On peut aussi charger l'environnement directement avec la commande:
32
33
```bash
34
source /nfs/softs/apps/spack/share/spack/setup-env.sh
35
```
36
37
_Note:_ Désactiver le chargement de Spack dans l'environnement n'empêche pas d'utiliser les paquets Spack avec les [[Modules]].
38
39
## Utiliser Spack
40
41
Lorsque Spack est chargé dans l'environnement, on peut utiliser la commande `spack`[^spack-doc] à plusieurs fins.
42
43
[^spack-doc]:
44
    La documentation complète se trouve ici: https://spack.readthedocs.io/en/latest/
45
46
47
### Lister les paquets installés
48
49
La commande:
50
```bash
51
spack find
52
```
53
Permet de lister tous les paquets installés. Ils sont classés par catégorie en fonction du compilateur utilisé. Certains paquets peuvent apparaître plusieurs fois avec des numéros de version différents, mais aussi avec le même numéro de version en fonction des options utilisées pour les compiler
54
55
Afin d'avoir des informations plus précises sur les particularités d'un paquet installé, la commande:
56
```bash
57
spack find -lv <paquet>
58
```
59
affiche les différents versions de `<paquet>` installées avec les options d'installation et un *hash*[^hash] distinctif.
60
61
[^hash]:
62
    empreinte unique du paquet installé avec une [Fonction de hachage](https://fr.wikipedia.org/wiki/Fonction_de_hachage)
63
64
65
Par exemple:
66
```bash
67
$ spack find -lv kokkos
68
-- linux-rocky8-zen3 / gcc@12.2.0 -------------------------------
69
opp3h2 kokkos@3.7.01~aggressive_vectorization~compiler_warnings~cuda~cuda_constexpr~cuda_lambda~cuda_ldg_intrinsic~cuda_relocatable_device_code~cuda_uvm~debug~debug_bounds_check~debug_dualview_modify_check~deprecated_code~examples~explicit_instantiation~hpx~hpx_async_dispatch~hwloc~ipo~memkind~numactl~openmp~openmptarget~pic+profiling~profiling_load_print~pthread~qthread~rocm+serial+shared~sycl~tests~tuning~wrapper build_system=cmake build_type=RelWithDebInfo intel_gpu_arch=none std=14
70
wlo4jff kokkos@3.7.01~aggressive_vectorization~compiler_warnings~cuda~cuda_constexpr~cuda_lambda~cuda_ldg_intrinsic~cuda_relocatable_device_code~cuda_uvm~debug~debug_bounds_check~debug_dualview_modify_check~deprecated_code~examples~explicit_instantiation+hpx+hpx_async_dispatch~hwloc~ipo~memkind~numactl~openmp~openmptarget~pic+profiling~profiling_load_print~pthread~qthread~rocm+serial+shared~sycl~tests~tuning~wrapper build_system=cmake build_type=RelWithDebInfo intel_gpu_arch=none std=17
71
```
72
73
Ici, les *hash* des versions sont `ropp3h2` et `wlo4jff`. La version installée es la même mais ils diffèrent par des options d'installation. On peut consulter les [[Spack#Comparer deux versions d'un même paquet|différences entre ces deux paquets]]
74
75
_Note:_ La commande `spack find` liste tous les paquets installés. On peut demander l'affichage des seuls *paquets explicites*[^explicit] avec l'option `spack find -x`.
76
77
78
### Charger des paquets
79
80
On peut charger et décharger des paquets Spack de l'environnement avec les commandes `spack load` et `spack unload` de manière assez similaire aux [[Modules]] d'environnement.
81
82
```bash
83
spack load cmake@3.25.2
84
spack unload cmake@3.25.2
85
```
86
87
88
### Demander l'installation de paquets
89
90
Spack dispose d'une grande liste de paquets installables (plus de 7000 paquets au moment d'écrire ces lignes).
91
92
La commande:
93
```bash
94
spack list
95
```
96
Permet d'en obtenir la liste, si l'on n'est pas pressé.
97
98
On peut aussi utiliser cette commande pour effectuer une recherche par nom. Par exemple:
99
100
```bash
101
$ spack list tensorflow
102
py-tensorflow           py-tensorflow-estimator  py-tensorflow-metadata     tensorflow-serving-client
103
py-tensorflow-datasets  py-tensorflow-hub        py-tensorflow-probability
104
==> 7 packages
105
```
106
107
Demander l'installation d'un paquet (ou d'une version spécifique) non présent sur le cluster peut se faire par un [ticket redmine](../issues/new)
108
109
110
### Comparer deux versions d'un même paquet
111
112
On peut utiliser la commande `spack find`.
113
114
```bash
115
$ spack diff cmake@3.25.2 cmake@3.26.3
116
==> Warning: This interface is subject to change.
117
118
--- cmake@3.25.2/uyvkiawbxranuy5acsi7u7uggetesgq5
119
+++ cmake@3.26.3/nw4y6aglkldhodmg2h7jkzplkqhkmoui
120
@@ hash @@
121
-  cmake uyvkiawbxranuy5acsi7u7uggetesgq5
122
+  cmake nw4y6aglkldhodmg2h7jkzplkqhkmoui
123
-  ncurses qpuml3tgl2dojx4qyoe3sq54s5zg6atp
124
+  ncurses eqhewbmrskfpvxbv3gynd4llsebzfqul
125
-  pkgconf qzo55zs2i3pynbmenyhq25fiwoy4gjaw
126
+  pkgconf clor2ta2dvxrnaubt656j2m4z2y3f46h
127
@@ node_compiler @@
128
-  ncurses gcc
129
+  ncurses aocc
130
-  pkgconf gcc
131
+  pkgconf aocc
132
@@ node_compiler_version @@
133
-  ncurses gcc 12.2.0
134
+  ncurses aocc 4.0.0
135
-  pkgconf gcc 12.2.0
136
+  pkgconf aocc 4.0.0
137
@@ package_hash @@
138
-  cmake yngfblw5ezkuinfnusppkdfdmdqfyuivbrx6pyipvvqsccrax4wq====
139
+  cmake sc3thbyjv5m4llzy2py3ygr4sfp5jgaglxwcbw4urh6igehe6xxq====
140
@@ version @@
141
-  cmake 3.25.2
142
+  cmake 3.26.3
143
```
144
145
Dans certains cas, la sortie de cette commande peut être très volumineuse et difficile à exploiter
146
147
On peut aussi demander la comparaison entre deux *hash*[^hash]:
148
149
```bash
150
$ spack diff /ropp3h2 /wlo4jff
151
...
152
```