SLURM (Simple Linux Utility for Resource Management) to system kolejkowy oparty na licencji open source. W CI TASK od marca 2015 roku wykorzystywany jest do zarządzania pracą użytkowników superkomputera Tryton. Podstawowe komendy systemu kolejkowego SLURM:
squeue - wyświetla informacje o wszystkich zadaniach, które obecnie znajdują się w systemie kolejkowym
sbatch - wstawia zadanie obliczeniowe do kolejki
squeue --job - sprawdza status danego zadania
squeue -u <nazwa_użytkownika> - wyświetla informacje o zadaniach danego użytkownika
scancel - usuwa zadanie z kolejki
sinfo - wyświetla informacje o rodzajach kolejek (PARTITION), węzłach itp.
Lista kolejek dostępnych na superkomputerze
Nazwa | Limit czasowy zadania | Typ serwera | Opis |
batch | 72 h | CPU | Podstawowa kolejka do obliczeń |
test | 15 min. | CPU | kolejka do krótkich zadań testowych |
interact | 8 h | CPU | kolejka do pracy interaktywnej |
gpu-a100-80gb | 72 h | GPU | Podstawowa kolejka do obliczeń na GPU - karty NVidia A100 80GB |
gpu-a100 | 72 h | GPU | kolejka do obliczeń na GPU - karty NVidia A100 40GB |
Jak wstawić zadanie do kolejki?
Użytkownik, chcąc wstawić swoje zadanie obliczeniowe do kolejki, pownien samodzielnie przygotować skrypt (plik tekstowy), który:
- zdefiniuje parametry zadania obliczeniowego,
- uruchami dany program obliczeniowy,
- wstawi zadanie do kolejki obliczeniowej (w tym celu można również użyć komendy "sbatch" - patrz przykład poniżej).
Jak napisać skrypt?
Pierwsza linia skryptu musi zawierać ścieżkę dostępu do powłoki: #!/bin/bash
Dalej następuje specyfikacja zasobów, których potrzebuje program obliczeniowy, aby zrealizować zadanie obliczeniowe. Każda kolejna linijka, zgodnie ze składnią systemu SLURM, powinna rozpocząć się od słowa #SBATCH, po którym należy umieścić odpowiednią opcję definiującą parametry zadania obliczeniowego, np.:
-J - nazwa, pod którą zadanie będzie widoczne w systemie kolejkowym
-p - rodzaj kolejki
-N - liczba węzłów obliczeniowych, które mają byc wykorzystane do realizacji zadania
--ntasks-per-node - liczba rdzeni dla węzła
--mem - ilość pamięci [MB] przydzielona dla zadania
--time - maksymalny czas trwania zadania; po tym czasie zadanie zostaje usunięte z systemu kolejkowego
--mail-type= - stan zadania (zdarzenie), o którym ma zostać poinformowany użytkownik; zdarzenie może przyjąć wartość: BEGIN, END, FAIL, REQUEUE, ALL
--mail-user=user@email.domain - adres e-mail, na który zostanie przesłana powyższa informacja
Skrypt powninien także zawierać komendę uruchamiającą program obliczeniowy (zobacz: moduły).
Przykład zastosowania w skrypcie:
Użytkownik uruchomi program o nazwie "symulacja". Dane wejściowe do programu (plik symulacja1.dat) powinny znaleźć się w katalogu, z którego uruchamiany jest poniższy skrypt. W systemie kolejkowym zadanie będzie widoczne pod nazwą "zadanie1". Uruchomi się ono w kolejce "batch" na 2 węzłach obliczeniowych. Jeśli zadanie nie zakończy się po 24 h, zostanie przerwane przez system kolejkowy. Użytkownik otrzyma informację o zakończeniu zadania na adres "user5@email.domena.pl".
#!/bin/bash
#
#SBATCH -J zadanie1
#SBATCH -p batch
#SBATCH -N 2
#SBATCH --time 24:00:00
#SBATCH --mail-type=END
#SBATCH --mail-user=user5@email.domena.pl
#
module load symulacja
mpirun symulacja < symulacja1.dat
Tak przygotowany skrypt należy wstawić do kolejki za pomocą komedy:
sbatch nazwa_skryptu
Dodatkowo, po zalogowaniu się na superkomputer Tryton w katalogu: $TASK_APL/example/slurm/ znajdują się gotowe, przykładowe skrypty, z których można skorzystać. Są one przeznaczone do samodzielnej modyfikacji przez użytkownika.