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