Zlecanie zadań przez system kolejkowy SLURM

Czym jest system kolejkowy SLURM?

SLURM (Simple Linux Utility for Resource Management) to zaawansowany system zarządzania zadaniami i zasobami, stosowany głównie w środowiskach obliczeń wysokiej wydajności (HPC). Jego głównym celem jest efektywne zarządzanie zadaniami (jobami) na klastrach komputerowych, gdzie wielu użytkowników korzysta z tego samego sprzętu. SLURM pozwala na przydzielanie zadań do odpowiednich zasobów obliczeniowych, takich jak węzły (nodes) i rdzenie (cores), oraz zarządzanie tymi zadaniami w sposób kolejny i priorytetowy.

System kolejkowy działa na zasadzie tworzenia kolejek, w których umieszczane są zadania użytkowników. Zadania te są następnie przetwarzane według ustalonego porządku, biorąc pod uwagę dostępność zasobów i priorytety zadań. Dzięki temu użytkownicy mogą efektywnie dzielić się zasobami obliczeniowymi, a system dba o optymalne wykorzystanie dostępnych mocy obliczeniowych.

Zlecanie zadań


Przed zleceniem zadania, należy je obudować w odpowiedni skrypt zrozumiały dla systemu kolejkowego, np.:

/home/users/user/submit_script.sh

Przykładowy skrypt SLURM:

#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=4
#SBATCH --mem=4gb
#SBATCH --time=01:00:00

# Ustawiamy sciezki lub ladujemy odpowiednie moduly
module load plink/1.90

# Ustawiamy zmienna $TMPDIR
export TMPDIR=$HOME/grant_$SLURM_JOB_ACCOUNT/scratch/$USER/$SLURM_JOB_ID

# Ustawiamy zmienne aplikacji
export SCR=${TMPDIR}

# Ustawiamy zmienne pomocnicze
INPUT_DIR="input"
OUTPUT_DIR="output"
OUTPUT_FILE="OUTPUT"

# Tworzymy katalog tymczasowy
mkdir -p ${TMPDIR}

# Kopiujemy dane wejsciowe do katalogu wskazywanego zmienna $TMPDIR
cp ${SLURM_SUBMIT_DIR}/${INPUT_DIR}/* ${TMPDIR}

# Przechodzimy do katalogu $TMPDIR
cd $TMPDIR

# Wykonujemy obliczenia
plink --noweb --file hapmap1

# Konczymy obliczenia, zawartosc katalogu $TMPDIR/output kopiujemy 
# do katalogu z ktorego zakolejkowano zadanie.
mkdir $SLURM_SUBMIT_DIR/${OUTPUT_DIR}
cp -r $TMPDIR/* $SLURM_SUBMIT_DIR/${OUTPUT_DIR}/

# Czyscimy katalog roboczy
rm -rf $TMPDIR

Przykładowe dane wejściowe:
Poniżej znajdują się pliki które powinny znaleźć się w katalogu input.
Plik:Plink input.zip

Zadanie należy następnie zlecić komendą sbatch

sbatch /home/users/user/submit_script.sh

Zlecanie zadań interaktywnych


Zadanie interaktywne to specjalny typ zadania, który umożliwia użytkownikowi bezpośrednią interakcję z zasobami obliczeniowymi podczas jego wykonywania. W odróżnieniu od zadań batchowych, które są uruchamiane automatycznie i nie wymagają interwencji użytkownika, zadania interaktywne pozwalają na bezpośrednie uruchamianie komend w terminalu na przydzielonym węźle obliczeniowym.

Zadania interaktywne są szczególnie przydatne w sytuacjach, gdy użytkownik chce przeprowadzić testy, debugowanie skryptów lub gdy konieczna jest szybka interakcja z danymi na żywo. W SLURM, aby uruchomić zadanie interaktywne, można skorzystać z polecenia srun z odpowiednimi opcjami, które pozwalają na uruchomienie sesji terminalowej na jednym z węzłów klastru.

Zadania interaktywne możemy podzielić na dwie grupy:

  • zadanie interaktywne (praca w trybie tekstowym)
  • zadanie interaktywne z przekierowaniem X-ów (praca w trybie graficznym)


Zadanie interaktywne (praca w trybie tekstowym)


Zlecanie zadań interaktywnych jest bardzo proste i w najprostszym przypadku sprowadza się do wydania poniższego polecenia.

srun --pty /bin/bash

Uwaga! Takie zadanie domyślnie ma dostępny 1 CPU i 2 GB pamięci RAM co może być niewystarczające dla wszystkich zastosowań Zasoby dostepne dla zadań interaktywnych można definiować tak samo jak w przypadku innych zadań czyli

srun -c <liczba rdzeni> --mem=<ilość ramu> --pty /bin/bash 
np
srun -c 2 --mem=10G --pty /bin/bash


Zadanie interaktywne z przekierowaniem X-ów (praca w trybie graficznym)


Aby zlecić zadanie z przekierowaniem X-ów należy zalogować się na maszynę z uruchomioną usługą X

ssh -X eagle.man.poznan.pl


UWAGA: W systemie Windows należy mieć zainstalowany serwer X np. Xming oraz w programie Putty aktywować przekierowanie X11

Gdy zalogujemy się na maszynę za pomocą X należy zlecić zadanie interaktywne

srun --x11 -n28 --pty /bin/bash 


Następnie uruchamiamy przykładowy program (wyświetla stan kolejki na maszynie eagle)

sview & 

Zlecanie zadań na węzły z kartami GPU

W celu zlecenia zadania na węzły z kartami GPU należy zlecić zadanie na partycję tesla oraz do skryptu zadaniowego dodać poniższe parametry:

#SBATCH #SBATCH --gpus-per-node=<liczba kart GPU dla danego zadania>

przykładowo dla zadania wymagającego 2 kart:

#SBATCH #SBATCH --gpus-per-node=2
#SBATCH --partition=tesla

Dla części aplikacji wsparcie dla GPU jest zaszyte w parametrach, część posiada specjalną wersję modułu, zazwyczaj zawierającą "CUDA" w nazwie np:

namd/2.10-ibverbs-smp-cuda    <- wersja ze wsparciem GPU
namd/2.10-multicore(default)
namd/2.10-multicore-cuda      <- wersja ze wsparciem GPU
namd/2.10-multicore-mic
namd/2.12-ibverbs
namd/2.12-ibverbs-smp
namd/2.12-ibverbs-smp-CUDA    <- wersja ze wsparciem GPU

Sprawdzanie stanu systemu kolejkowego


Aby sprawdzić jakie zadania zostały zlecone przez użytkownika należy wykonać polecenie: Przykład:

squeue -u nazwa_uzytkownika


Wyświetlenie listy zadań w danej partycji

squeue -p standard


Wyświetlenie informacji o konkretnym zadaniu

scontrol show job numer_zadania

Usuwanie zadań

Jeżeli z jakiegoś powodu istnieje potrzeba usunięcia zadania - należy skorzystać z polecenia scancel, które przyjmuje jako parametr identyfikator zadania. Można kasować zadania zarówno oczekujące w kolejce jak i uruchomione.
Przykład:

scancel numer_zadania