Spack

Standardowo dostępny jest dość okrojony wspólny zakres oprogramowania i zachęcamy użytkowników do korzystania z systemu zarządzania oprogramowaniem Spack.

Instalacja w koncie użytkownika

Aby zainstalować system w swoim koncie należy sklonować repozytorium w wersji 1.2.2:

git clone https://github.com/spack/spack.git --branch v1.2.2 --depth 2 ~/spack/v1.2.2

Załadowanie systemu do aktualnej sesji możliwe jest przez:

source ~/spack/v1.2.2/share/spack/setup-env.sh
Porada

Dopisanie tej dyrektywy na końcu skryptu ~/.bashrc pozwoli na automatyczne załadowanie systemu przy każdym logowaniu.

Inicjalizacja systemu (operacja może potrwać kilka minut, ale jest jednorazowa) oraz znalezienie dostępnych kompilatorów:

spack bootstrap now
spack compiler find

Obsługa systemu zarządzania oprogramowaniem

Zachęcamy do zapoznania się z samouczkiem dostępnym na stronie twórców oprogramowania.

Przydatne polecenia dotyczące paczek

  • spack list anaconda3 - wyszukiwanie dostępnych
  • spack info anaconda3 - wyświetlanie informacji
  • spack install anaconda3 - instalacja
  • spack find anaconda3 - wyszukiwanie zainstalowanych
  • spack load anaconda3 - ładowanie
Porada

W celu oszczędzania miejsca prosimy o wykonanie polecenia spack clean --all po dokonaniu zmian w lokalnej instalacji Spack.

Wspólne repozytorium klastra

Aby uniknąć potrzeby wielokrotnej kompilacji najczęściej używanego oprogramowania przez każdego użytkownika w klastrze zostało utworzone wspólne repozytorium, z którego mogą korzystać wszystkie instancje Spack. Obecnie dostępne wspólne repozytoria:

v1.2.2

Automatycznie ładowane jako upstream z katalogu /projects/wmi_spack/v1.2.2/opt/spack/

Zainstalowane pakiety oraz ich zależności:

  • btop - btop - zaawansowany monitor zasobów z obsługą GPU
  • ffmpeg - FFmpeg - biblioteki i narzędzia do obsługi multimediów
  • go - go - język i środowisko programistyczne
  • intel-oneapi-mkl - Biblioteka matematyczna Intel oneAPI MKL
  • mathematica - Wolfram Mathematica podłączona do wydziałowego serwera licencji
  • mc - Midnight Commander - konsolowy menedżer plików
  • neovim - Neovim - zaawansowany edytor
  • r - R oraz zestaw podstawowych pakietów opisanych w dokumentacji
  • rclone - rclone - menedżer i klient protokołów dostępu do zdalnych plików
  • rust - Rust - język i środowisko programistyczne
  • tree - tree - narzędzie do wizualizacji drzew katalogów i plików
  • uv - uv - menedżer środowisk i pakietów Python

Praca ze współdzielonym repozytorium

Konfiguracja systemowa Spack zawiera informację o wspólnych repozytoriach. Za pomocą komendy spack find --paths można uzyskać informacje lokalizację źródłową zainstalowanych pakietów. Wszystkie pakiety ze ścieżką /projects/wmi_spack są współdzielone.

[...]
-- linux-ubuntu22.04-x86_64_v3 / %c,cxx,fortran=gcc@12.3.0 ------
r@4.5.3  /projects/wmi_spack/v1.2.2/opt/spack/linux-x86_64_v3/r-4.5.3-leexrfiw5swmayyxym5j55q6fqslfxha
[...]

Takie pakiety działają jak zainstalowane w lokalnej instancji Spack. Wystarczy je załadować, na przykład:

spack load mathematica

Zgłaszanie oprogramowania

W przypadku potrzeby współdzielenia oprogramowania wśród wielu użytkowników prosimy o zgłoszenie do helpdesku - pozwoli to oszczędzić zasoby oraz skrócić czas potrzebny na kompilację.

Rozproszona kompilacja

Spack umożliwia użycia zasobów klastra do znacznego przyspieszenia kompilacji aplikacji. Uruchomienie rozproszonej kompilacji na 2 węzłach z użyciem 8 CPU w każdym z nich:

srun --nodes 2 --ntasks-per-node 8 spack install r

Nietypowe błędy

Niekompatybilne wersje bazy danych

W przypadku użycia lokalnej wersji Spack w wersji dużo starszej niż współdzielone repozytorium Spack zwracany jest nietypowy komunikat o błędzie:

==> Error: you need a newer Spack version to read the DB in '/projects/wmi_spack/current/opt/spack'. The expected DB version is '7', but '8' was found.

W takim przypadku należy zmienić konfigurację bieżącej lokalnej wersji Spack aby wskazywała na poprzednie repozytorium współdzielone:

printf "upstreams:\n  wmicluster-current:\n    install_tree: '/projects/wmi_spack/v0.21.2/opt/spack'" > $SPACK_ROOT/etc/spack/upstreams.yaml

Zalecana jest aktualizacja lokalnej wersji Spack.

Brak odpowiedniego kompilatora

W przypadku braku dostępnego kompilatora wymaganego przez daną paczkę Spack zwraca nietypowy komunikat o błędzie:

==> Error: failed to concretize `btop+gpu` for the following reasons:
     1. Only external, or concrete, compilers are allowed for the cxx language
     2. Only external, or concrete, compilers are allowed for the c language

W takim przypadku należy sprawdzić czy w danej paczce nie ma wymagania, które nie może być spełnione przez aktualnie dostępne kompilatory:

$ spack compiler list
==> Available compilers
-- gcc ubuntu22.04-x86_64 ---------------------------------------
[e]  gcc@12.3.0  [e]  gcc@11.4.0

-- llvm ubuntu22.04-x86_64 --------------------------------------
[e]  llvm@15.0.7

$ spack edit btop
[...]
requires("%gcc@14:", "%clang@19:", policy="one_of", msg="C++ 23 is required", when="@1.4.6:")
[...]

W powyższym przykładzie konieczne jest zainstalowanie za pomocą Spack kompilatora: GCC w wersji 14 lub nowszej albo LLVM w wersji 19 lub nowszej.