Jak korzystać z kolejek PBS: Różnice pomiędzy wersjami
Linia 49: | Linia 49: | ||
* mpiprocs - liczba procesów MPI (domyślnie 1) | * mpiprocs - liczba procesów MPI (domyślnie 1) | ||
* mem - ilość pamięci (domyślnie 2000 MB) | * mem - ilość pamięci (domyślnie 2000 MB) | ||
− | |||
− | |||
− | |||
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. | 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. | ||
Linia 58: | Linia 55: | ||
* Zadanie liczące się na 1 węźle, potrzebujące 4 rdzeni oraz 7500 MB RAM | * Zadanie liczące się na 1 węźle, potrzebujące 4 rdzeni oraz 7500 MB RAM | ||
− | -l select=1:ncpus=4:mem=7500MB | + | -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. | 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] | * 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 | + | -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): | 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] | * 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 | + | -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 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. | ||
Linia 166: | Linia 163: | ||
Generowanie i przechowywanie plików tymczasowych w katalogach domowych jest zabronione. | Generowanie i przechowywanie plików tymczasowych w katalogach domowych jest zabronione. | ||
− | |||
− | |||
− | |||
− | |||
'''Zobacz też:''' [[PBSPro]], [[konfiguracja kolejek PBS]] | '''Zobacz też:''' [[PBSPro]], [[konfiguracja kolejek PBS]] |
Wersja z 09:10, 29 sie 2011
< 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, Nova) 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.
- 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)
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ć.
! | 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. |
! | 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 qstat
. Zobacz też: konfiguracja kolejek PBS.
$ 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 |
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 Nova 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
Systemy kolejkowe |
PBSPro |
---|