Jak korzystać z kolejek PBS

Z KdmWiki
Przejdź do nawigacji Przejdź do wyszukiwania

< Podręcznik użytkownika KDM < System kolejkowy

Portable Batch System (PBS) - system kolejkowania dostępny w kilku wersjach: PBSPro (wersja płatna), OpenPBS, Torque/PBS. W WCSS wykorzystywana jest wersja PBSPro (Leo, Supernova) i OpenPBS (Tezro).

PBS tworzy dla użytkownika pojedynczy i spójny interfejs do wszystkich zasobów którymi zarządza, niezależnie od tego, jak bardzo te zasoby są rozproszone. Pozwala to użytkownikom skupić się na pracy naukowej poprzez wyeliminowanie potrzeby samodzielnego dbania o efektywne wykorzystanie zasobów.

Operacje na zadaniach

Wstawianie zadań do kolejki

Aby wstawić zadanie do kolejki należy oszacować zapotrzebowanie zadania na zasoby (liczbę procesorów, czas, ilość pamięci, itd.), a następnie użyć polecenia qsub.

Można zrobić to na dwa sposoby: z wykorzystaniem tylko polecenia qsub lub z wykorzystaniem skryptu.

Polecenie qsub

Jest to najprostszy sposób, w którym wystarczy wykonać polecenie:

$ echo 'polecenie-do-wykonania-i-jego-opcje >&plik_wynikow' |qsub [opcje dla qsub]

Przykład:

$ echo g98 nazwa.inp |qsub -N nazwa-zadania
Z wykorzystaniem skryptu

Należy utworzyć skrypt, który uruchamia zadanie. Skrypt taki może, obok uruchomienia zadania, zadbać również o utworzenie plików tymczasowych, wyczyszczenie przestrzeni /scratch, itp.

Przykład skryptu:

'''#!/bin/sh'''
# przejdź do katalogu z danymi zadania (bardzo ważne!): 
'''cd jobdir1''' 
# uruchom program: 
'''./ścieżka/program [opcje] >&plik_wynikow ''' 

Następnie należy wstawić zadanie poleceniem qsub:

$ qsub [opcje dla qsub] nazwa-skryptu

Przykład:

$ qsub -N nazwa ./skrypt1

System wstawi zadanie do kolejki spełniającej podane przez użytkownika wymagania lub, jeśli nie podano wymagań, do kolejki domyślnej (zwykle o najniższym priorytecie). Użytkownik otrzyma w terminalu informację o identyfikatorze zadania:

1677.leo.wcss.wroc.pl

Jeśli kolejka wymaga autoryzacji, to zadanie wpuszczone zostanie tylko wtedy, jeśli dany użytkownik ma do danej kolejki dostęp.

Zadania interaktywne

Z funkcjonalności zadań interaktywnych można skorzystać, kiedy chcemy zdalnie uruchomić aplikację z interfejsem graficznym (np. Molden) lub kompilację oprogramowania . Należy przekierować wyświetlanie obrazu na serwer X-ów na swoim komputerze zgodnie ze wskazówkami z działu podręcznika "Przekierowanie wyświetlania". Następnie wg. schematu:

$ qsub -X -I -l software=Molden -l select=1:ncpus=1:mem=512MB # rezerwacja zasobów
$ molden # start aplikacji korzystającej z GUI, np. molden
Deklaracja wymagań

Wymagania zadania specyfikuje się za pomocą parametru -l (małe L) polecenia qsub. Zasoby, które można alokować:

  • ncpus - liczba rdzeni (domyślnie 1)
  • mpiprocs - liczba procesów MPI (domyślnie 1)
  • mem - ilość pamięci (domyślnie 2000 MB)
  • software - nazwa uruchomionego oprogramowania

Jednostką alokacji wymagań jest tzw. chunk, określający "podzbiór" zasobów klastra. Użytkownik specyfikuje ile i jakich zasobów potrzebuje w danej jednostce (chunku), a dodatkowo, jeżeli zadanie jest zrównoleglone przez MPI - ile potrzebuje jednostek danego typu.

Przykłady specyfikacji wymagań:

  • Zadanie liczące się na 1 węźle, potrzebujące 4 rdzeni oraz 7500 MB RAM
  -l select=1:ncpus=4:mem=7500MB

W powyższym przykładzie alokowany jest 1 chunk z 4 rdzeniami i łącznie 7500MB pamięci RAM. Pojedynczy chunk może być zaalokowany tylko na 1 węźle, więc zadanie z takimi wymaganiami będzie oczekiwać na wolny 1 węzeł z 4 rdzeniami.

  • Zadanie MPI potrzebujące 24 rdzeni po 1800 MB na rdzeń (w sumie ok. 43 GB) [wiele małych chunków]
  -l select=24:ncpus=1:mem=1800MB

W powyższym przykładzie alokowane są 24 chunki, każdy z 1 rdzeniem i 1800MB RAM. W tym przypadku system kolejkowy będzie starał się tak rozmieścić chunki, aby zadanie wykonywało się jak najszybciej - możliwie wiele na jednym węźle, ale też starając się minimalizować czas oczekiwania na zasoby, a tym samym na uruchomienie. Przy powyższej definicji zasobów może się zdarzyć, że każdy chunk trafi na inny węzeł. Jeżeli taka sytuacja jest niepożądana można wymusić koncentrację zasobów zwiększając rozmiar jednostki alokacji (liczbę rdzeni i pamięci per chunk):

  • Zadanie MPI potrzebujące 24 rdzeni po 1800 MB na rdzeń (w sumie ok. 43 GB) [z koncentracją zasobów]
  -l select=2:ncpus=12:mpiprocs=12:mem=21500MB

W powyższym przykładzie alokowane są 2 chunki, każdy po 12 rdzeni i 21500MB RAM. W praktyce spowoduje to, że zadanie będzie oczekiwać na wolne 2 węzły z 12 rdzeniami.

W przypadku chunka więcej niż jednoprocesorowego, podczas korzystania z MPI ważne jest aby dodać parametr mpiprocs - spowoduje to zamieszczenie odpowiedniej liczby wpisów w pliku $PBS_NODEFILE, zawierającym listę hostów, na których zadanie będzie się wykonywać.

Sprawdzanie stanu zadania

Stan zadania i kolejki można sprawdzić poleceniem qstat. Zobacz też: konfiguracja kolejek PBS.

$ qstat NUMER_ZADANIA.nova

Aby sprawdzić stan kolejki (zadań oczekujących na wykonanie lub uruchomionych) należy użyć polecenia bez parametrów:

$ qstat

Kasowanie zadań

Aby skasować wstawione do systemu zadanie należy użyć polecenia qdel:

$ qdel identyfikator_zadania

Zadanie zostanie usunięte bez względu na jego status.

Ustalanie zależności zadań

PBS pozwala na ustalanie zależności między zadaniami wstawianymi do kolejki, z określaniem np. kolejności ich uruchamiania. W najprostszym przypadku, jeśli chcemy aby wstawione zadania uruchamiały się kolejno po sobie, należy zlecić pierwsze zadanie w typowy sposób:

$ echo 'polecenie_i_jego_opcje >&plik_wynikow' | qsub [opcje dla qsub]

PBS zwróci wtedy identyfikator zadania (JobID), np.:

1144.tezro

Wstawiając następne zadanie trzeba podać, kiedy ma się ono zacząć, np. dopiero po zakończeniu poprzedniego zadania:

$ echo 'polecenie_i_jego_opcje >&plik_wynikow' | qsub -W depend=afterany:1144.tezro [pozostałe opcje dla qsub]

gdzie numer 1144.tezro to identyfikator poprzednio wstawionego zadania. Każde kolejne zadanie wstawiane do kolejki można w analogiczny sposób uzależniać od poprzednio wstawionego zadania, podając w afterany:JobID identyfikator tego poprzedniego. Utworzy się wtedy łańcuch zależnych zadań, uruchamianych po kolei.

PBS posiada szereg typów zależności. Użyty w przykładzie typ afterany oznacza, że zadanie uruchomi się dopiero po zakończeniu wskazanego poprzedniego zadania, niezależnie czy zakończy się ono poprawnie czy z błędem. Więcej informacji na ten temat można uzyskać w manualu polecenia qsub, w sekcji z opisem opcji -W.

Najczęściej używane polecenia

Poniższa tabela zawiera krótki opis najczęściej używanych poleceń systemu PBS.

Tabela. Polecenia PBS
Polecenie opis
qstat lista zadań w kolejkach
qstat -n lista zadań w kolejkach z podaniem na jakim węźle liczy się każde zadanie
qstat -q lista kolejek
qstat -Q ustalone limity kolejek
qstat -a lista wszystkich zadań
qstat -au userid lista zadań użytkownika userid
qstat -r lista uruchomionych zadań (status running)
qstat -f jobid obszerna informacja o zadaniu o identyfikatorze jobid
qstat -Qf queue obszerna informacja o kolejce queue
qstat -B krótka informacja o stanie serwera PBS
qstat -x lista zadań razem z zakończonymi (nie wcześniej niż minutę temu)
qsub wstaw zadanie do systemu (jeżeli nie ma parametrów, używa domyślnych ustawień)
qsub jobscript wstaw skrypt jobscript do systemu kolejkowania
qsub -I uruchom zadanie interaktywnie
qsub -q queue wstaw zadanie do konkretnej kolejki queue
qdel jobid usuwa zadanie, niezależnie od jego stanu w kolejce

Przestrzeń tymczasowa

Na klastrze Supernova przestrzeń na pliki tymczasowe generowane przez oprogramowanie znajduje się we współdzielonym systemie plików Lustre. Przestrzeń ta przeznaczona jest wyłącznie do przechowywania plików tymczasowych generowanych przez zadania obliczeniowe. Każdy użytkownik ma na każdym węźle katalog /lustre/scratch/$USER i tylko tam ma prawo do zapisu.

Generowanie i przechowywanie plików tymczasowych w katalogach domowych jest zabronione.

Zobacz też: PBSPro, konfiguracja kolejek PBS