Jak korzystać z kolejek PBS: Różnice pomiędzy wersjami
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 | ||
− | ''' | + | == 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]]}} | ||
− | + | 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: | |
− | + | <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). | ||
− | + | === 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> | ||
− | == | + | == 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 | ||
+ | {{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 | ||
− | + | Cenną cechą programu '''qsub''' jest możliwość przekazywania parametrów w skrypcie podanym jako argument, poprzez linie zaczynające się od: | |
− | |||
− | |||
− | |||
<pre> | <pre> | ||
− | + | #PBS | |
− | |||
− | |||
− | |||
− | |||
</pre> | </pre> | ||
− | + | === 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 | ||
− | + | # wejscie do katalogu, z ktorego zostalo wstawione zadania | |
+ | cd $PBS_O_WORKDIR | ||
− | + | # 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> | ||
− | + | ; 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 | ||
− | + | # 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 | ||
+ | </pre> | ||
− | + | Więcej o poleceniu '''qsub''' można znaleźć w manualu - poprzez uruchomienie polecenia: | |
− | + | <pre> | |
− | + | man qsub | |
− | + | </pre> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | == | + | == 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]] | '''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
! | 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
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
! | Zadanie wymagające GPU trafi na specyficzny węzeł roboczy. Więcej informacji o tym można znaleźć w artykule Tesla |
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
! | 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
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
Systemy kolejkowe |
PBSPro |
---|