====== System kolejkowy SLURM ======
Klaster działa pod kontrolą [[https://slurm.schedmd.com/quickstart.html|systemu kolejkowego SLURM]]. System ten jest odpowiedzialny za alokację zasobów obliczeniowych (CPU, GPU, RAM) i uruchamianie zadań na węzłach obliczeniowych. Zadania uruchamiane są z tzw. [[info:access_host|hosta dostępowego]] przy pomocy poleceń ''srun'' lub ''sbatch''. Użytkownik oprócz zdefiniowania zadania jakie chce uruchomić powinien dodatkowo wyspecyfikować jakie zasoby są potrzebne do realizacji jego zadania oraz na jak długi czas. Następnie SLURM dodaje zadanie do kolejki i uruchamia zadania gdy tylko żądane zasoby staną się dostępne.
Wszystkie zdania są uruchamiane za pośrednictwem hosta dostępowego. Nie ma możliwości bezpośredniego logowania się na węzły obliczeniowe przez SSH.
W przypadku gdy użytkownik pominie specyfikację wymagań zostaną użyte wartości domyślne (np. maksymalny dostępny czas zasobów. Może to jednak spowodować zachowanie niezgodne z oczekiwaniem: np. zbyt małą liczbę dostępnych procesorów, brak dostępu do GPU lub długi czas oczekiwania w kolejce, lub nadmierne obciążenie billingu konta.
===== Podstawowe polecenia SLURM'a =====
==== sinfo ====
Wyświetla informacje o stanie klastra - liczba dostępnych kolejek i węzłów obliczeniowych wchodzących w ich skład, oraz ich dostępność.
==== squeue ====
Wyświetla informacje o aktualnie wysłanych do kolejki zadaniach (zarówno uruchomionych jak i oczekujących).
==== srun ====
Służy do urcuchamiania poleceń w czasie rzeczywistym. Dobre do eksperymentowania i wykonywania niewielkich testów.
Przykładowo polecenie:
''$ srun hostname''
uruchomione na hoście dostępowym spowoduje, że do kolejki zostanie dodane zadanie wykonania programu ''hostname''. Slurm wyśle żądanie uruchomienia tego programu na węźle pierwszym dostępnym węźle obliczeniowym i w odpowiedzi zwróci wynik - w tym wypadku nazwę hosta, na który trafi zadanie.
==== sbatch ====
Służy do uruchamiania zadań za pośrednictwem tzw. [[info:batch_file|pliku wsadowego]] (ang. batch file). Plik ten zawiera wszystkie informacje niezbędne do uruchomienia zadania.
==== scontrol ====
Służy do uzyskiwania szczegółowych informacji na temat stanu klastra. Przykłady:
* ''scontrol show node dgx-1'' wyświetli informacje o stanie węzła ''dgx-1''
* ''scontrol show job '' wyświetla informacje o zadaniu o identyfikatorze ''''
* ''scontrol show reservations'' wyświetla informacje o aktualnych rezerwacjach (okresach w których część lub całość zasobów może być niedostępna).
===== Konsola interaktywna =====
Niektóre zadania mogą wymagać dostępu do powłoki bash na węźle obliczeniowym. Przykładem takiego zadania może być kompilacja własnego programu przed jego właściwym uruchomieniem. Ze względu na brak możliwości logowania się przez SSH bezpośrednio na węzły obliczeniowe należy zarządać od SLURM'a wykonanie zadania uruchomienia powłoki BASH. Konsolę interaktywną można uruchomić korzystając z polecenia:
''srun %%--%%pty %%--%%account bash''
niekiedy warto doprecyzować na którym węźle interesuje nas uruchomienie powłoki:
''srun -w dgx-3 %%--%%pty %%--%%account bash''
a także wskazać na ile czasu będziemy jej potrzebować. W szczególności przydatne, gdy chcemy zrobić coś "na szybko".
''srun -w dgx-3 %%--%%time 00:15:00 %%--%%pty %%--%%account bash''
powyższy zapis oznacza maksymalny czas dla zadania 15 minut.
Jeśli nie precyzujemy na jaki czas potrzebujemy zasobu, to SLURM zakłada najdłuższy możliwy czas dla danej kolejki (zazwyczaj kilka dni). Jeśli w systemie istnieje rezerwacja zbliżająca się np. za dwie godziny, a my potrzebujemy dostępu do konsoli na 10 minut, a mimo to nie podamy tej informacji, to SLURM założy, że oczekujemy dostępnego maksymalnego czasu i nie wpuści zadania przed rezerwacją.
Częstym błędem jest pomieszanie kolejności argumentów.
zapis: ''srun -w dgx-3 %%--%%pty bash %%--%%time 00:15:00'' jest nieprawidłowy, ponieważ argument ''%%--%%time'' zostanie zinterpretowany jako parametr przekazany do programu ''bash'' a nie ''srun''.