Jak korzystać z kolejek PBS: Różnice pomiędzy wersjami

Z KdmWiki
Przejdź do nawigacji Przejdź do wyszukiwania
Linia 1: Linia 1:
 
<small>< [[Podręcznik użytkownika KDM]] < [[System kolejkowy]] < Jak korzystać z kolejek PBS</small>
 
<small>< [[Podręcznik użytkownika KDM]] < [[System kolejkowy]] < Jak korzystać z kolejek PBS</small>
 +
== Kolejki ==
 +
Uruchamianie obliczeń na klastrze odbywa się w ramach kolejek, które różnią się między sobą priorytetem, limitami czy prawami dostępu (a czasem również dostępnymi zasobami):
 +
* '''short6h''' - kolejka o wysokim priorytecie na krótkie zadania
 +
** limit czasu procesora: 6 h
 +
* '''short48h''' - kolejka o wysokim priorytecie na krótkie zadania
 +
** limit czasu procesora: 48 h
 +
* '''short7d''' - kolejka o średnim priorytecie na średnie zadania
 +
** limit czasu procesora: 168 h
 +
* '''normal''' - kolejna na typowe zadania
 +
** limit czasu działania zadania (Walltime): 504 h
 +
* '''bigmem''' - kolejka na zadania wymagające powyżej 23 050 MB pamięci na węzeł (ale nie więcej niż 192901 MB)
 +
** limit czasu działania zadania (Walltime): 504 h
 +
{{uwaga2| Dostęp do powyższej kolejki jest przydzielany przez administratorów na prośbę użytkownika. Więcej informacji można znaleźć w artykule [[Tesla]]}}
 +
* '''infinity''' - kolejka na bardzo długie zadania o niskim priorytecie
  
'''Portable Batch System''' (PBS) - system kolejkowania dostępny w kilku wersjach: [[PBSPro]] (wersja płatna), [[OpenPBS]], [[Torque/PBS]]. W WCSS wykorzystywana jest wersja [[PBSPro]] ([[Supernova]]).
+
== Zasoby ==
 +
Po wyborze odpowiedniej kolejki należy zadeklarować ilość wymaganych zasobów. Wyboru można dokonać spośród:
 +
* rdzeni obliczeniowych - parametr '''ncpus'''
 +
** domyslnie: 1
 +
** maksymalnie:
 +
*** 8 na węzłach II i III generacji
 +
*** 12 na węzłach IV generacji
 +
*** 16 jeżeli korzystamy z kart graficznych na węzłach '''Tesla'''
 +
*** 48 w kolejce ''bigmem'' na węzłach '''Tesla'''
 +
* pamięci - parametr '''mem'''
 +
** domyślnie: 1700 MB
 +
** maksymalnie:
 +
*** 15250 MB na węzłach II i III generacji
 +
*** 23050 MB na węzłach IV generacji
 +
*** 65536 MB jeżeli korzystamy z kart graficznych na węzłach '''Tesla'''
 +
*** 192901 MB w kolejce ''bigmem'' na węzłach '''Tesla'''
 +
* kart graficznych - parametr '''ngpus'''
 +
** domyślnie: 0 (zadanie trafi na węzeł z GPU dopiero jeżeli użytkownik tego zażąda)
 +
** maksymalnie: 2
 +
{{uwaga2| Zadanie wymagające GPU trafi na specyficzny węzeł roboczy. Więcej informacji o tym można znaleźć w artykule [[Tesla]]}}
  
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.
+
Osobnym słowem kluczowym, które używa się jak żądanie zasobu jest
 +
* liczba procesów mpi - parametr '''mpiprocs'''
 +
** domyślnie: 1
 +
** maksymalnie:
 +
*** 8 na węzłach II i III generacji
 +
*** 12 na węzłach IV generacji
 +
*** 16 jeżeli korzystamy z kart graficznych na węzłach '''Tesla'''
 +
*** 48 w kolejce ''bigmem'' na węzłach '''Tesla'''
 +
Należy skorzystać z tego parametru, kiedy w jednej części alokacji chcemy uruchomić więcej niż jeden proces MPI.
  
== Operacje na zadaniach ==
+
Przydział może odbywać się w jednej, spójnej części (dla zadań szeregowych lub zrównoleglonych w obrębie jednego komputera) lub kilku (dla zadań zrównoleglonych przy użyciu bibliotek MPI). Deklarację buduje się używając wyrażenia
=== Wstawianie zadań do kolejki===
+
'''select''' dla parametru '''-l''' polecenia '''qsub''' (opisanego w dalszej części). Jej format jest następujący:
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 '''<code>qsub</code>'''.
+
<pre>
 +
select=X:zasób1=wartość1:zasób2=wartość2+Y:zasób3=wartość3:zasób4=wartość4
 +
</pre>
 +
gdzie:
 +
* '''X''' - liczba części pierwszego zbioru zasobów
 +
* '''zasób1=wartość1:zasób2=wartość2''' - opis pierwszego zbioru zasobów
 +
* '''Y''' - liczba części drugiego zbioru zasobów
 +
* '''zasób3=wartość3:zasób4=wartość4''' - opis drugiego zbioru zasobów
 +
Liczba zbiorów zasobów może być różna (równa 1 lub większa).
  
Można zrobić to na dwa sposoby: z wykorzystaniem tylko polecenia <code>qsub</code> lub z wykorzystaniem skryptu.
+
=== Przykłady ===
 +
; Zadanie uruchamia 4 procesy w obrębie jednego węzła i wymaga 4096 MB RAM (po 1024 MB na proces):
 +
<pre>
 +
select=1:ncpus=4:mem=4096MB
 +
</pre>
 +
; Zadanie uruchamia 8 procesów MPI, z których każdy wymaga 512 MB RAM
 +
<pre>
 +
select=8:ncpus=1:mem=512MB
 +
</pre>
 +
; Zadanie uruchamia 32 procesów MPI, po 4 na każdym węźle (i domyślne 1700 MB na każde 4 procesy):
 +
<pre>
 +
select=8:ncpus=4:mpiprocs=4
 +
</pre>
 +
; Zadanie wymaga 16GB RAM (i jednego rdzenia)
 +
<pre>
 +
select=1:mem=16GB
 +
</pre>
 +
; Zadanie wymaga 1 karty GPU i 4 GB pamięci
 +
<pre>
 +
select=1:ngpus=1:mem=4GB
 +
</pre>
  
==== Z linii komend ====
+
== Wstawianie zadań ==
Jest to najprostszy sposób, w którym wystarczy wykonać polecenie:
+
Do wstawiania zadań do kolejki służy polecenie '''qsub'''. Opis zadania powinien być zawarty w skrypcie powłoki. Natępnie taki skrypt przekazywany jest do kolejki jako parametr polecenia qsub (lub na standardowe wejście tej komendy). Najważniejsze parametry polecenia można znaleźć poniżej:
$ '''echo 'polecenie-do-wykonania-i-jego-opcje >&plik_wynikow' |qsub [opcje dla qsub]'''
+
* '''-q''' - wybór kolejki
Przykład:
+
* '''-l''' specyfikacja wymagań - wartości parametru mogą być następujące
$ '''echo g98 nazwa.inp |qsub -N nazwa-zadania'''
+
** '''select=''' - opis wymagań
 +
** '''software=''' - informacja o używanym oprogramowaniu
 +
{{uwaga2| Proszę korzystać z powyższego parametru - pozwala to administratorom sporządzać statystyki wykorzystania}}
 +
* '''-N''' - nazwa zadania (jej długość nie może przekraczać 12 znaków)
 +
* '''-m''' - włączenie wysyłania powiadomień o zdarzeniach
 +
** '''b''' - o rozpoczęciu zadania
 +
** '''e''' - o zakończeniu zadania
 +
* '''-I''' - zadanie interaktywne (w tym przypadku nie należy przekazywać skryptu)
 +
* '''-X''' - przekierowanie wyświetlania (ma sens w przypadku zadań interaktywnych, wymaga logowania z przekierowaniem wyświetlania
  
==== Z wykorzystaniem skryptu ====
+
Cenną cechą programu '''qsub''' jest możliwość przekazywania parametrów w skrypcie podanym jako argument, poprzez linie zaczynające się od:
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 <code>/scratch</code>, itp.
 
 
 
Przykład skryptu:
 
 
<pre>
 
<pre>
'''#!/bin/sh'''
+
#PBS
# przejdź do katalogu z danymi zadania (bardzo ważne!):
 
'''cd jobdir1'''
 
# uruchom program:
 
'''./ścieżka/program [opcje] >&plik_wynikow '''
 
 
</pre>
 
</pre>
  
Następnie należy wstawić zadanie poleceniem <code>qsub</code>:
+
=== Przykłady ===
 +
; Uruchomienie obliczeń na postawie skryptu
 +
* zawartość skryptu uruchom.sh
 +
<pre>
 +
#!/bin/bash
 +
#PBS -q short6h
 +
#PBS -l select=1:ncpus=2:mem=2048MB
 +
#PBS -l software=test_qsub
 +
#PBS -m be
  
$ '''qsub [opcje dla qsub] nazwa-skryptu'''
+
# wejscie do katalogu, z ktorego zostalo wstawione zadania
 +
cd $PBS_O_WORKDIR
  
Przykład:
+
# uruchom program
 +
./test1 > wynik.txt
 +
</pre>
 +
* wstawienie skryptu
 +
<pre>
 +
qsub uruchom.sh
 +
</pre>
 +
; Uruchomienie zadania interaktywnego (np. w celu kompilacji oprogramowania)
 +
<pre>
 +
qsub -I -l select=1:ncpus=4:mem=4096MB -l software=GCC_4.7.2
 +
</pre>
  
$ '''qsub -N nazwa ./skrypt1'''
+
; Przekazanie skryptu przez standardowe wejście '''qsub'''
 +
* zawartość pliku skrypt.sh
 +
<pre>
 +
#!/bin/bash
 +
cat << EOF | qsub
 +
#!/bin/bash
 +
#PBS -q short48h
 +
#PBS -l select=1:mem=512MB
 +
#PBS -l software=qsub_stdin
 +
#PBS -m be
  
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:
+
# wejscie do katalogu, z ktorego zostalo wstawione zadania
 +
# \ przez $ jest wymagany, aby powloka nie podmienila
 +
# $PBS_O_WORKDIR na wartosc podczas wstawiania - tylko
 +
# podczas dzialania zadania na wezle
  
1677.nova.wcss.wroc.pl
+
cd \$PBS_O_WORKDIR
  
Jeśli kolejka wymaga autoryzacji, to zadanie wpuszczone zostanie tylko wtedy, jeśli dany użytkownik ma do danej kolejki dostęp.
+
# uruchom program
 +
./test1 > wynik.txt
 +
EOF
 +
<pre>
 +
* wstawienie zadania:
 +
<pre>
 +
chmod +x skrypt.sh
 +
./skrypt.sh
 +
</pre>
  
==== Zadania interaktywne ====
+
Więcej o poleceniu '''qsub''' można znaleźć w manualu - poprzez uruchomienie polecenia:
 
+
<pre>
Z funkcjonalności zadań interaktywnych można skorzystać, kiedy chcemy zdalnie uruchomić aplikację z interfejsem graficznym (np. Molden) lub [[Kompilacja aplikacji na klastrze | kompilację oprogramowania ]].
+
man qsub
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:
+
</pre>
 
 
$ 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 <code>-l</code> (małe L) polecenia <code>qsub</code>. Zasoby, które można alokować:
 
* ncpus - liczba rdzeni (domyślnie 1)
 
* mpiprocs - liczba procesów MPI (domyślnie 1)
 
* ngpus - liczba kart GPU (aktualnie nie więcej niż dwie na węzeł)
 
{{uwaga2 | Zadanie z wyspecyfikowanym parametrem ngpus trafi na węzły działające pod kontrolą nowszego systemu operacyjnego (Scientific Linux 6.2) oraz z&nbsp;innym niż na typowych węzłach udziałem /usr/local}}
 
* mem - ilość pamięci (domyślnie 2000 MB)
 
* software - nazwa uruchomionego oprogramowania
 
{{uwaga2 | Zasób '''software''' należy deklarować przy pracy wsadowej, w skryptach sub-*}}
 
 
 
Jednostką alokacji wymagań jest tzw. <code>chunk</code>, 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 '''<code>mpiprocs</code>''' - spowoduje to zamieszczenie odpowiedniej liczby wpisów w pliku $PBS_NODEFILE, zawierającym listę hostów, na których zadanie będzie się wykonywać.
 
 
 
{{uwaga2|Jeśli użytkownik zadeklaruje zbyt dużo zasobów (przeceni wymagania zadania), to zadanie może niepotrzebnie długo oczekiwać na wolne zasoby i uruchomienie, dodatkowo będzie blokować nadmiarowe zasoby innym zadaniom.}}
 
{{uwaga2|Jeśli użytkownik zadeklaruje za mało zasobów (nie doceni wymagań zadania), to system "zabije" zadanie z powodu przekroczenia limitów zasobów.}}
 
 
 
=== Sprawdzanie stanu zadania ===
 
Stan zadania i kolejki można sprawdzić poleceniem '''<code>qstat</code>'''. 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 '''<code>qdel</code>''':
 
 
 
$ '''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.nova
 
 
 
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.nova [pozostałe opcje dla qsub]
 
 
 
gdzie numer <code>1144.nova</code> to identyfikator poprzednio wstawionego zadania. Każde kolejne zadanie wstawiane do kolejki można w&nbsp;analogiczny sposób uzależniać od poprzednio wstawionego zadania, podając w <code>afterany:JobID</code> 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 '''<code>afterany</code>''' 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 '''<code>qsub</code>''', w sekcji z opisem opcji '''<code>-W</code>'''.
 
 
 
== Najczęściej używane polecenia ==
 
 
 
Poniższa tabela zawiera krótki opis najczęściej używanych poleceń systemu PBS.
 
 
 
;Tabela. Polecenia PBS
 
{|style="border:1px solid #737889; margin-right:2px; margin-left:2px; padding-left:2px;" cellspacing="0"
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''Polecenie'''
 
|style="border-bottom:1px solid #737889;"|'''opis'''
 
|-
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''qstat'''
 
|style="border-bottom:1px solid #737889;"|lista zadań w kolejkach
 
|-
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''qstat -n'''
 
|style="border-bottom:1px solid #737889;"|lista zadań w kolejkach z podaniem na jakim węźle liczy się każde zadanie
 
|-
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''qstat -q'''
 
|style="border-bottom:1px solid #737889;"|lista kolejek
 
|-
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''qstat -Q'''
 
|style="border-bottom:1px solid #737889;"|ustalone limity kolejek
 
|-
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''qstat -a'''
 
|style="border-bottom:1px solid #737889;"|lista wszystkich zadań
 
|-
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''qstat -au userid'''
 
|style="border-bottom:1px solid #737889;"|lista zadań użytkownika userid
 
|-
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''qstat -r'''
 
|style="border-bottom:1px solid #737889;"|lista uruchomionych zadań (status running)
 
|-
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''qstat -f jobid'''
 
|style="border-bottom:1px solid #737889;"|obszerna informacja o zadaniu o identyfikatorze jobid
 
|-
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''qstat -Qf queue'''
 
|style="border-bottom:1px solid #737889;"|obszerna informacja o kolejce queue
 
|-
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''qstat -B'''
 
|style="border-bottom:1px solid #737889;"|krótka informacja o stanie serwera PBS
 
|-
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''qstat -x'''
 
|style="border-bottom:1px solid #737889;"|lista zadań razem z zakończonymi (nie wcześniej niż minutę temu)
 
|-
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''qsub'''
 
|style="border-bottom:1px solid #737889;"|wstaw zadanie do systemu (jeżeli nie ma parametrów, używa domyślnych ustawień)
 
|-
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''qsub jobscript'''
 
|style="border-bottom:1px solid #737889;"|wstaw skrypt jobscript do systemu kolejkowania
 
|-
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''qsub -I'''
 
|style="border-bottom:1px solid #737889;"|uruchom zadanie interaktywnie
 
|-
 
|style="border-bottom:1px solid #737889; border-right:1px solid #737889;" |'''qsub -q queue'''
 
|style="border-bottom:1px solid #737889;"|wstaw zadanie do konkretnej kolejki queue
 
|-
 
|style="border-right:1px solid #737889;"|'''qdel jobid'''
 
|usuwa zadanie, niezależnie od jego stanu w kolejce
 
|-
 
|}
 
  
== Przestrzeń tymczasowa ==
+
== Sprawdzanie stanu systemu kolejkowego ==
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 <code>/lustre/scratch/$USER</code> i tylko tam ma prawo do zapisu.
+
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)
  
Generowanie i przechowywanie plików tymczasowych w katalogach domowych jest zabronione.
+
== 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.
  
 
'''Zobacz też:''' [[PBSPro]], [[konfiguracja kolejek PBS]]
 
'''Zobacz też:''' [[PBSPro]], [[konfiguracja kolejek PBS]]

Wersja z 10:09, 25 sty 2013

< Podręcznik użytkownika KDM < System kolejkowy < Jak korzystać z kolejek PBS

Kolejki

Uruchamianie obliczeń na klastrze odbywa się w ramach kolejek, które różnią się między sobą priorytetem, limitami czy prawami dostępu (a czasem również dostępnymi zasobami):

  • short6h - kolejka o wysokim priorytecie na krótkie zadania
    • limit czasu procesora: 6 h
  • short48h - kolejka o wysokim priorytecie na krótkie zadania
    • limit czasu procesora: 48 h
  • short7d - kolejka o średnim priorytecie na średnie zadania
    • limit czasu procesora: 168 h
  • normal - kolejna na typowe zadania
    • limit czasu działania zadania (Walltime): 504 h
  • bigmem - kolejka na zadania wymagające powyżej 23 050 MB pamięci na węzeł (ale nie więcej niż 192901 MB)
    • limit czasu działania zadania (Walltime): 504 h
  • infinity - kolejka na bardzo długie zadania o niskim priorytecie

Zasoby

Po wyborze odpowiedniej kolejki należy zadeklarować ilość wymaganych zasobów. Wyboru można dokonać spośród:

  • rdzeni obliczeniowych - parametr ncpus
    • domyslnie: 1
    • maksymalnie:
      • 8 na węzłach II i III generacji
      • 12 na węzłach IV generacji
      • 16 jeżeli korzystamy z kart graficznych na węzłach Tesla
      • 48 w kolejce bigmem na węzłach Tesla
  • pamięci - parametr mem
    • domyślnie: 1700 MB
    • maksymalnie:
      • 15250 MB na węzłach II i III generacji
      • 23050 MB na węzłach IV generacji
      • 65536 MB jeżeli korzystamy z kart graficznych na węzłach Tesla
      • 192901 MB w kolejce bigmem na węzłach Tesla
  • kart graficznych - parametr ngpus
    • domyślnie: 0 (zadanie trafi na węzeł z GPU dopiero jeżeli użytkownik tego zażąda)
    • maksymalnie: 2

Osobnym słowem kluczowym, które używa się jak żądanie zasobu jest

  • liczba procesów mpi - parametr mpiprocs
    • domyślnie: 1
    • maksymalnie:
      • 8 na węzłach II i III generacji
      • 12 na węzłach IV generacji
      • 16 jeżeli korzystamy z kart graficznych na węzłach Tesla
      • 48 w kolejce bigmem na węzłach Tesla

Należy skorzystać z tego parametru, kiedy w jednej części alokacji chcemy uruchomić więcej niż jeden proces MPI.

Przydział może odbywać się w jednej, spójnej części (dla zadań szeregowych lub zrównoleglonych w obrębie jednego komputera) lub kilku (dla zadań zrównoleglonych przy użyciu bibliotek MPI). Deklarację buduje się używając wyrażenia select dla parametru -l polecenia qsub (opisanego w dalszej części). Jej format jest następujący:

select=X:zasób1=wartość1:zasób2=wartość2+Y:zasób3=wartość3:zasób4=wartość4

gdzie:

  • X - liczba części pierwszego zbioru zasobów
  • zasób1=wartość1:zasób2=wartość2 - opis pierwszego zbioru zasobów
  • Y - liczba części drugiego zbioru zasobów
  • zasób3=wartość3:zasób4=wartość4 - opis drugiego zbioru zasobów

Liczba zbiorów zasobów może być różna (równa 1 lub większa).

Przykłady

Zadanie uruchamia 4 procesy w obrębie jednego węzła i wymaga 4096 MB RAM (po 1024 MB na proces)
select=1:ncpus=4:mem=4096MB
Zadanie uruchamia 8 procesów MPI, z których każdy wymaga 512 MB RAM
select=8:ncpus=1:mem=512MB
Zadanie uruchamia 32 procesów MPI, po 4 na każdym węźle (i domyślne 1700 MB na każde 4 procesy)
select=8:ncpus=4:mpiprocs=4
Zadanie wymaga 16GB RAM (i jednego rdzenia)
select=1:mem=16GB
Zadanie wymaga 1 karty GPU i 4 GB pamięci
select=1:ngpus=1:mem=4GB

Wstawianie zadań

Do wstawiania zadań do kolejki służy polecenie qsub. Opis zadania powinien być zawarty w skrypcie powłoki. Natępnie taki skrypt przekazywany jest do kolejki jako parametr polecenia qsub (lub na standardowe wejście tej komendy). Najważniejsze parametry polecenia można znaleźć poniżej:

  • -q - wybór kolejki
  • -l specyfikacja wymagań - wartości parametru mogą być następujące
    • select= - opis wymagań
    • software= - informacja o używanym oprogramowaniu
  • -N - nazwa zadania (jej długość nie może przekraczać 12 znaków)
  • -m - włączenie wysyłania powiadomień o zdarzeniach
    • b - o rozpoczęciu zadania
    • e - o zakończeniu zadania
  • -I - zadanie interaktywne (w tym przypadku nie należy przekazywać skryptu)
  • -X - przekierowanie wyświetlania (ma sens w przypadku zadań interaktywnych, wymaga logowania z przekierowaniem wyświetlania

Cenną cechą programu qsub jest możliwość przekazywania parametrów w skrypcie podanym jako argument, poprzez linie zaczynające się od:

#PBS

Przykłady

Uruchomienie obliczeń na postawie skryptu
  • zawartość skryptu uruchom.sh
#!/bin/bash
#PBS -q short6h
#PBS -l select=1:ncpus=2:mem=2048MB
#PBS -l software=test_qsub
#PBS -m be

# wejscie do katalogu, z ktorego zostalo wstawione zadania
cd $PBS_O_WORKDIR

# uruchom program
./test1 > wynik.txt
  • wstawienie skryptu
qsub uruchom.sh
Uruchomienie zadania interaktywnego (np. w celu kompilacji oprogramowania)
qsub -I -l select=1:ncpus=4:mem=4096MB -l software=GCC_4.7.2
Przekazanie skryptu przez standardowe wejście qsub
  • zawartość pliku skrypt.sh
#!/bin/bash
cat << EOF | qsub
#!/bin/bash
#PBS -q short48h
#PBS -l select=1:mem=512MB
#PBS -l software=qsub_stdin
#PBS -m be

# wejscie do katalogu, z ktorego zostalo wstawione zadania
# \ przez $ jest wymagany, aby powloka nie podmienila
# $PBS_O_WORKDIR na wartosc podczas wstawiania - tylko
# podczas dzialania zadania na wezle

cd \$PBS_O_WORKDIR

# uruchom program
./test1 > wynik.txt
EOF
<pre>
* wstawienie zadania:
<pre>
chmod +x skrypt.sh
./skrypt.sh

Więcej o poleceniu qsub można znaleźć w manualu - poprzez uruchomienie polecenia:

man qsub

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)

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.

Zobacz też: PBSPro, konfiguracja kolejek PBS