Zlecanie zadań przez system kolejkowy PBS
Zlecanie zadań
Przed zleceniem zadania, należy je obudować w odpowiedni skrypt zrozumiały dla systemu kolejkowego, np.:
/home/users/username/submit_script.sh
#!/bin/bash #PBS -l nodes=1:ppn=2 #PBS -l mem=1gb /sciezka/do/pliku/binarnego/plik_binarny.in >/siezka/do/pliku/wyjsciowego.out
Powyższy skrypt rezerwuje dla zadania 2 procesory na jednym węźle obliczeniowym (#PBS -l nodes=1:ppn=2) oraz pamięć wielkości 1GB (#PBS -l mem=1gb).
Aby przypisać zadanie do konkretnej kolejki używamy parametru #PBS -q np.
#!/bin/bash #PBS -q standard #PBS -l nodes=1:ppn=2 #PBS -l mem=1gb /sciezka/do/pliku/binarnego/plik_binarny.in >/siezka/do/pliku/wyjsciowego.out
W przypadku kart GPU należy wybrać kolejkę gpu oraz zadeklarować odpowiedni zasób (kartę lub karty), np:
#!/bin/bash #PBS -q gpu #PBS -l nodes=1:ppn=1:gpus=1 ...
Zadanie należy następnie zlecić komendą qsub
qsub /home/users/username/submit_script.sh
Sprawdzanie stanu systemu kolejkowego
Do sprawdzenia stanu kolejki służy polecenie qstat. Można korzystać z następujących jego parametrów:
Przykład:
qstat -u nazwa_uzytkownika
Szeregowanie zadań
Użytkownik może zlecić zadanie do systemu kolejkowego nie podając żadnego oznaczenia co będzie skutkowało uruchomieniem zadania na dowolnym węźle obliczeniowym lub szeregować swoje zadania na poszczególne klasy węzłów używając wyżej wymienionych oznaczeń (properties). W tym celu w skrypcie zlecającym zadanie należy podać oznaczenie klasy węzłów, z której użytkownik chciałby skorzystać.
#PBS -lnodes=1:ppn=1:<oznaczenie>
Poniżej kilka przykładów.
- Zlecenie zadania na węzeł z dwiema kartami graficznymi
#PBS -l nodes=1:ppn=1:gpus=2
- Zlecenie zadania na węzły z procesorami haswell
#PBS -l nodes=1:ppn=1:haswell_2600mhz
- Zlecenie zadania na węzły z procesorami nehalem
#PBS -l nodes=1:ppn=1:nehalem_2400mhz
UWAGA: Zlecanie zadań na poszczególne klasy węzłów może skutkować tym, że użytkownik będzie dłużej czekał na wykonanie swoich zadań. Taka sytuacja może się zdarzyć w przypadku, gdy większa liczba użytkowników zleci zadania na daną klasę węzłów powodując, ze zadania będą czekały w kolejce pomimo wolnych zasobów na klastrze. W rezultacie zadanie uruchomione na węzłach z wolniejszymi procesorami może uruchomić się i policzyć szybciej niż zadanie zlecone na najszybsze procesory.
Zadania interaktywne
Zadanie interaktywne pozwala użytkownikowi na uzyskanie powłoki (shell-a) na węźle obliczeniowym. Ponieważ kompilacja oraz uruchamianie wszelkich programów na maszynie dostępowej do klastra (ui.inula.man.poznan.pl) jest niedozwolone, zdania interaktywne są jednym ze sposobów, aby uruchomic oprogramowanie z graficznym interfejsem użytkownika (np. Matlab, Maple, itp.) lub skompilować swoją aplikację. Poniżej przedstawiony został przykład jak uruchomić zadanie w trybie interaktywnym.
Z linii poleceń
Najprostszym sposobem uruchomienia zadania interaktywnego jest wykonanie poniższego polecenia.
[username@ui ~]$ qsub -I qsub: waiting for job 102004.creamce.inula.man.poznan.pl to start qsub: job 102004.creamce.inula.man.poznan.pl ready
Oczywiście można i w większości przypadków należy podać dodatkowe parametry do polecenia 'qsub' tj. liczbę potrzebnych procesorów, pamięci, czy też nazwę kolejki.
[username@ui ~]$qsub -I -q gpu
Sprawdzenie zadań na węźle
Aby sprawdzić na który aktualnie węźle liczy się nasze zadanie należy wykonać polecenie :
qstat -n1 -u nazwa_uzytkownika
Aby zalogować się na węzeł na którym liczy się zadanie:
ssh <wezel_obliczeniowy>
Wylistowanie katalogu zadania:
ls -ali /tmp/lustre/<numer_zadania>.creamce.inula.man.poznan.pl
Usuwanie zadań
Jeżeli z jakiegoś powodu istnieje potrzeba usunięcia zadania - należy skorzystać z polecenia qdel, które przyjmuje jako parametr identyfikator zadania. Można kasować zadania zarówno oczekujące w kolejce jak i uruchomione.
Przykład:
qdel numer_zadania