Wprowadzenie

SLURM Workload Manager, wcześniej znany jako Simple Linux Utility for Resource Management (SLURM), to darmowy program o otwartym kodzie źródłowym służący do planowania zadań dla jąder systemów Linux/Unix. SLURM jest szeroko stosowany w centrach obliczeniowych na całym świecie jako system kolejkowy do zarządzania obliczeniami na superkomputerach i klastrach komputerowych - warto dodać, że około 60% superkomputerów największej mocy z listy TOP500 jest pod kontrolą SLURM.

SLURM zapewnia trzy kluczowe funkcje:

  • przydziela użytkownikom wyłącznego i/lub niewyłącznego dostępu do zasobów (węzłów obliczeniowych) zazwyczaj na określony czas w celu umożliwienia im wykonywania zadania
  • daje możliwość uruchamiania, wykonywania i monitorowania zadań na zestawie przydzielonych węzłów obliczeniowych
  • decyduje o kolejności uruchamiania rywalizujących o zasoby zadań poprzez zarządzanie kolejką oczekujących zadań.

Warto dodać, że SLURM umożliwia nie tylko uruchamianie zadań wysoce zrównoleglonych jak i rozproszonych ale pozwala również na wykorzystanie do obliczeń dodatkowych zasobów takich jak karty graficzne lub koprocesory Xeon Phi znacznie przyspieszające obliczenia. Ponadto system kolejkowy pozwala na tworzenie zależności między zadaniami jak również może poinformować użytkownika mailem o dacie i czasie rozpoczęcia i/lub zakończenia wykonywania danego zadania.

SLURM posiada kilka trybów pracy, które umożliwiają efektywne wykorzystanie zasobów klastra - najważniejsze z nich to:

  • Tryb interaktywny - tryb ten pozwala użytkownikom na interaktywną pracę na węźle gdzie uzyskano dostęp do zasobów klastra. Użytkownik może uruchomić zadania bezpośrednio z wiersza poleceń, co jest przydatne do eksperymentów, testów i debugowania kodu.
  • Tryb wsadowy (batch) - o najczęściej używany tryb w SLURM, który pozwala użytkownikom dodawać zadania (joby) do kolejki (składać zlecenia). Zadania są wykonywane automatycznie w kolejności zgłoszenia, a SLURM rozdziela dostępne zasoby w klastrze, aby efektywnie obsłużyć wszystkie zgłoszone zadania. Ten tryb jest szczególnie przydatny do przetwarzania wsadowego, gdzie wiele zadań jest uruchamianych jednocześnie na wielu węzłach klastra.

Oprócz tych dwóch podstawowych trybów, SLURM oferuje także wiele zaawansowanych opcji konfiguracyjnych, które pozwalają dostosować zarządzanie zasobami do konkretnych potrzeb użytkownika i klastra komputerowego.


Tryb wsadowy

Tryb wsadowy w SLURM to jeden z podstawowych trybów pracy w tym systemie zarządzania zasobami w klastrach obliczeniowych. Jest to tryb przeznaczony do obsługi zadań, które nie wymagają natychmiastowego dostępu do zasobów klastra (jak np. testowanie kodu), ale mogą być planowane i uruchamiane w określonym czasie.

Kluczowe elementy trybu wsadowego:

  • Dodawanie zadań (jobów) do kolejki - użytkownicy przygotowują zlecenia, które zawierają informacje o wymaganych zasobach (np. liczba węzłów, liczba rdzeni, ilość pamięci) oraz komendę lub skrypt, który ma być wykonany. Zlecenia te są następnie przesyłane do systemu SLURM w celu umieszczenia ich w kolejce.
  • Kolejka zadań - zadania składane w trybie wsadowym są umieszczane w kolejce oczekujących zadań. SLURM zarządza tą kolejką i przydziela dostępne zasoby w klastrze zgodnie z priorytetami i kolejnością zgłoszenia. Zadania są uruchamiane automatycznie, gdy zostaną dostępne odpowiednie zasoby.
  • Planowanie i zarządzanie zasobami - SLURM efektywnie zarządza zasobami klastra, zapewniając, że zadania są uruchamiane na dostępnych węzłach, z uwzględnieniem określonych ograniczeń i priorytetów. Można dostosować priorytety zadań, czas ich wykonywania oraz inne parametry w zależności od potrzeb.
  • Możliwość monitorowania - użytkownicy mogą monitorować stan swoich zadań, sprawdzając, czy są one w kolejce, w trakcie wykonywania lub już zakończone. SLURM dostarcza narzędzi do monitorowania i diagnozowania postępu zadania.

Tryb wsadowy jest szczególnie przydatny w przypadku, gdzie wiele zadań jest wykonanych jednocześnie na zasobach klastra. Użytkownicy mogą dostosować swoje zadania do wymagań swoich aplikacji, a SLURM zapewnia efektywne zarządzanie zasobami, minimalizując konflikty o dostęp do zasobów i zapewniając równomierne wykorzystanie klastra.


Podstawowe komendy i ich parametry

SLURM oferuje wiele podstawowych komend, które pozwalają użytkownikom zarządzać zadaniami i zasobami w klastrze komputerowym






Plik wsadowy a linia poleceń

Plik wsadowy (batch script) w systemie zarządzania zasobami SLURM to skrypt lub plik tekstowy, który zawiera instrukcje i parametry niezbędne do uruchomienia zadania w trybie wsadowym na klastrze obliczeniowym. Pliki wsadowe są używane do zdefiniowania zadania, określenia wymaganych zasobów, załadowania lub aktywacji środowiska obliczeń, podania komendy do wykonania oraz innych ustawień związanych z przetwarzaniem.

Plik wsadowy możemy podzielić na dwie części

  • część gdzie definiujemy elementy SLURM, nalezy pamiętać, że każdą opcję komendy sbatch trzeba poprzedzić #SBATCH

    #!/bin/bash
    #SBATCH -J moje_zadanie
    #SBATCH --output=wynik.txt
    #SBATCH --error=bledy.txt
    
    # Definicja zasobów
    #SBATCH -N 1
    #SBATCH --cpus-per-task=36
    #SBATCH --ntasks-per-node=1
    #SBATCH -p bo-science
    #SBATCH --mem-per-cpu=5G

    W tej części definiujemy takie elementy jak nazwa zadania czy plik wynikowy oraz podajemy zasoby na jakich chcemy uruchomić zadanie. Ten plik wsadowy określa zadanie o nazwie "moje-zadanie", które będzie działać na jednym wężle, z łącznie 36 rdzeniami CPU na każde zadanie (jedno). Zadanie zostanie przypisane do partycji "bo-science" gdzie zostanie uruchomione część nastepnego podpunktu. Standardowe wyjście i wyjście błędów będą zapisywane w odpowiednich plikach  


  • część gdzie definiujemy nasze środowisko oraz podajemy komendę/y do uruchomienia obliczeń 

    # Zaladowanie srodowiska obliczen
    module load gaussian9_E_01
    module list
    
    # Wywolanie obliczen
    cd $SLURM_SUBMIT_DIR
    g09 plik_obliczen_gaussiana_G09.com


W systemie zarządzania zasobami SLURM można określić część opcji komendy sbatch w pliku wsadowym (skrypcie wsadowym) a część w linii poleceń. Jest to przydatne bo pozwala na elastyczne dostosowywanie parametrów zadania, przy jednoczesnym wykorzystaniu wspólnego pliku wsadowego do wielu uruchomień. Opcje określone w pliku wsadowym nadpisują opcje podane w linii poleceń. To oznacza, że opcje w pliku wsadowym będą one miały pierwszeństwo nad opcjami podanymi w linii poleceń. 

Uruchomienie pliku 

#!/bin/bash

# Definicja zasobów
#SBATCH -N 1
#SBATCH --cpus-per-task=36
#SBATCH --ntasks-per-node=1
#SBATCH -p bo-science

# Zaladowanie srodowiska obliczen
module load gaussian9_E_01
module list

# Wywolanie obliczen
cd $SLURM_SUBMIT_DIR
g09 plik_obliczen_gaussiana_G09.com

za pomocą komendy

sbatch -J moje_zadanie --output=wynik.txt --error=bledy.txt --mem-per-cpu=5G moj_plik_wsadowy_2

będzie równoznaczne z uruchomieniem poprzedniego przykładowego pliku za pomocą czystej komendy sbatch:

sbatch moj_plik_wsadowy_1


Jest to przydatne aby zachować elastyczność i dostosować niektóre parametry zadania na podstawie określonej sytuacji lub dynamicznie zmieniać je przy każdym uruchomieniu.


Przykładowe pliki

Poniżej znajdują się przykładowe pliki kolejkowe do obliczeń na klastrze BlueOcean