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:

  • -r - pokazuje uruchomione zadania
  • -i - pokazuje zadania oczekujące
  • -u - pokazuje zadania wybranego użytkownika
  • -f - pokazuje szczegółowe informacje o zadaniach (lub zadaniu, jeżeli podamy jego identyfikator po parametrze)
    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