Macierz zadań: Różnice pomiędzy wersjami
(Nie pokazano 10 wersji utworzonych przez 2 użytkowników) | |||
Linia 1: | Linia 1: | ||
− | <small>< [[Podręcznik użytkownika KDM]] < [[System kolejkowy]] < | + | <small>< [[Podręcznik użytkownika KDM]] < [[System kolejkowy]] < Macierz zadań</small> |
− | == Czym jest | + | == Czym jest macierz zadań == |
− | + | Macierz zadań (job array) stanowi zbiór zadań uruchomionych jednocześnie. | |
Mechanizm ten pozwala w łatwy i szybki sposób uruchomić kilka zadań jednocześnie. | Mechanizm ten pozwala w łatwy i szybki sposób uruchomić kilka zadań jednocześnie. | ||
− | Każde zadanie w | + | Każde zadanie w macierzy posiada indeks, który jest przechowywany w zmiennej środowiskowej PBS_ARRAY_INDEX. |
− | == Jak utworzyć | + | |
− | W celu utworzenia | + | == Jak utworzyć macierz zadań? == |
+ | W celu utworzenia macierzy zadań należy użyć w skrypcie opcji –J i podać zakresów indeksów macierzy: | ||
#PBS -J i-f:s | #PBS -J i-f:s | ||
gdzie i to indeks początkowy, f – końcowy, a s definiuje krok. Parametr s jest opcjonalny, domyślnie przyjmuje wartość 1. | gdzie i to indeks początkowy, f – końcowy, a s definiuje krok. Parametr s jest opcjonalny, domyślnie przyjmuje wartość 1. | ||
− | W celu utworzenia | + | W celu utworzenia macierzy dziesięciu zadań indeksowanych od 1 do 10, należy użyć w skrypcie polecenia: |
#PBS -J 1-10 | #PBS -J 1-10 | ||
− | W celu utworzenia | + | W celu utworzenia macierzy zadań można również podać opcję –J przy zlecaniu obliczeń: |
qsub -l walltime=1:00:00 -J 1-3 hello.sh | qsub -l walltime=1:00:00 -J 1-3 hello.sh | ||
Powyższa komenda spowoduje uruchomienie trzech zadań zdefiniowanych w skrypcie hello.sh. Zadania te mają przypisane kolejno indeksy 1, 2 i 3, które są przechowywane w zmiennej PBS_ARRAY_INDEX. | Powyższa komenda spowoduje uruchomienie trzech zadań zdefiniowanych w skrypcie hello.sh. Zadania te mają przypisane kolejno indeksy 1, 2 i 3, które są przechowywane w zmiennej PBS_ARRAY_INDEX. | ||
− | == Jak sprawdzić status | + | == Jak sprawdzić status macierzy zadań == |
− | + | Macierz zadań jest oznaczona w systemie kolejkowym numerem z kwadratowym nawiasem | |
jobID[] | jobID[] | ||
− | zatem w celu sprawdzenia statusu | + | zatem w celu sprawdzenia statusu macierzy zadań, należy użyć polecenia: |
qstat jobID[] | qstat jobID[] | ||
− | W celu sprawdzenia statusu wszystkich zadań w | + | W celu sprawdzenia statusu wszystkich zadań w macierzy należy użyć polecenia: |
qstat –t jobID[] | qstat –t jobID[] | ||
− | + | ~/test_array_jobs > qstat -t 1030789[] | |
Job id Name User Time Use S Queue | Job id Name User Time Use S Queue | ||
--------------------- ---------------- ---------------- -------- - ----- | --------------------- ---------------- ---------------- -------- - ----- | ||
Linia 37: | Linia 38: | ||
1030789[3].ossachilles hello.sh 3107mach 00:00:00 R vshort | 1030789[3].ossachilles hello.sh 3107mach 00:00:00 R vshort | ||
− | W celu sprawdzenia statusu pojedynczego zadania w | + | W celu sprawdzenia statusu pojedynczego zadania w macierzy należy użyć polecenia: |
qstat jobID[indeks] | qstat jobID[indeks] | ||
− | W celu sprawdzenia szczegółowych informacji o | + | W celu sprawdzenia szczegółowych informacji o macierzy zadań należy użyć polecenia: |
qstat –f jobID[] | qstat –f jobID[] | ||
− | Szczególnie przydatne mogą być informacje o ilości zadań z | + | Szczególnie przydatne mogą być informacje o ilości zadań z macierzy w poszczególnych statusach: |
− | + | ~/test_array_jobs > qstat -f 1031517[] | grep array_state_count | |
array_state_count = Queued:4 Running:16 Exiting:0 Expired:0 | array_state_count = Queued:4 Running:16 Exiting:0 Expired:0 | ||
Działające macierze zadań są oznaczone w systemie kolejkowym literą B “batch”, a nie R „running”. | Działające macierze zadań są oznaczone w systemie kolejkowym literą B “batch”, a nie R „running”. | ||
+ | == Przykład użycia == | ||
+ | Poniższy skrypt pozwala na jednoczesne uruchomienie kilku zadań w programie Gaussian2016. Skrypt można wywołać w katalogu zawierającym pliki inputowe programu Gaussian2016. Wywołanie skryptu spowoduje utworzenie macierzy zadań, której elementami będą zadania powiązane z poszczególnymi plikami inputowymi. | ||
+ | |||
+ | #!/bin/bash | ||
+ | |||
+ | # tworzenie listy, której elementami są pliki inputowe znajdujące się w bieżącym katalogu | ||
+ | list=(`ls *.inp`) | ||
+ | # liczba plików inputowych pomniejszona o 1 | ||
+ | number=$(( ${#list[*]} - 1 )) | ||
+ | |||
+ | cat <<EOF | qsub | ||
+ | #!/bin/bash | ||
+ | # deklaracja liczby zadań macierzy równej liczbie plików inputowych | ||
+ | #PBS -J 0-${number} | ||
+ | # parametry zadania | ||
+ | #PBS -l select=1:ncpus=4:mem=2000MB | ||
+ | #PBS -N Zadanie | ||
+ | #PBS -l software=Gaussian_2016-C01 | ||
+ | #PBS -l walltime=1:00:00 | ||
+ | # deklaracja nazwy plików ze standardowym wyjściem i standardowym wyjściem błędów | ||
+ | # pliki stdout i stderr zostaną zapisane w katalogu Job^array_index^ | ||
+ | #PBS -o Job^array_index^/stdout | ||
+ | #PBS -e Job^array_index^/stderr | ||
+ | |||
+ | list=(`ls *.inp`) | ||
+ | cd `pwd` | ||
+ | # utworzenie katalogów Job0, Job1, ..., w których zapisane zostaną pliki stdout i stderr | ||
+ | mkdir Job\$PBS_ARRAY_INDEX | ||
+ | |||
+ | module load gaussian/g16.C.01 | ||
+ | |||
+ | # uruchomienie zadań zapisanych na liście | ||
+ | g16 \${list[\$PBS_ARRAY_INDEX]} | ||
+ | |||
+ | EOF | ||
+ | |||
+ | W celu odwołania się do indeksu podzadania macierzy w dyrektywie PBS (#PBS) należy użyć składni: ^array_index^, a nie zmiennej BASH: PBS_ARRAY_INDEX. | ||
+ | |||
+ | |||
+ | '''Zobacz też:''' [[Jak korzystać z kolejek PBS]]? | ||
[[Kategoria:Systemy kolejkowe]] | [[Kategoria:Systemy kolejkowe]] | ||
[[Kategoria:Podręcznik użytkownika]] | [[Kategoria:Podręcznik użytkownika]] |
Aktualna wersja na dzień 08:23, 19 maj 2020
< Podręcznik użytkownika KDM < System kolejkowy < Macierz zadań
Czym jest macierz zadań
Macierz zadań (job array) stanowi zbiór zadań uruchomionych jednocześnie.
Mechanizm ten pozwala w łatwy i szybki sposób uruchomić kilka zadań jednocześnie.
Każde zadanie w macierzy posiada indeks, który jest przechowywany w zmiennej środowiskowej PBS_ARRAY_INDEX.
Jak utworzyć macierz zadań?
W celu utworzenia macierzy zadań należy użyć w skrypcie opcji –J i podać zakresów indeksów macierzy:
#PBS -J i-f:s
gdzie i to indeks początkowy, f – końcowy, a s definiuje krok. Parametr s jest opcjonalny, domyślnie przyjmuje wartość 1.
W celu utworzenia macierzy dziesięciu zadań indeksowanych od 1 do 10, należy użyć w skrypcie polecenia:
#PBS -J 1-10
W celu utworzenia macierzy zadań można również podać opcję –J przy zlecaniu obliczeń:
qsub -l walltime=1:00:00 -J 1-3 hello.sh
Powyższa komenda spowoduje uruchomienie trzech zadań zdefiniowanych w skrypcie hello.sh. Zadania te mają przypisane kolejno indeksy 1, 2 i 3, które są przechowywane w zmiennej PBS_ARRAY_INDEX.
Jak sprawdzić status macierzy zadań
Macierz zadań jest oznaczona w systemie kolejkowym numerem z kwadratowym nawiasem
jobID[]
zatem w celu sprawdzenia statusu macierzy zadań, należy użyć polecenia:
qstat jobID[]
W celu sprawdzenia statusu wszystkich zadań w macierzy należy użyć polecenia:
qstat –t jobID[]
~/test_array_jobs > qstat -t 1030789[] Job id Name User Time Use S Queue --------------------- ---------------- ---------------- -------- - ----- 1030789[].ossachilles hello.sh 3107mach 0 B vshort 1030789[1].ossachilles hello.sh 3107mach 00:00:00 E vshort 1030789[2].ossachilles hello.sh 3107mach 00:00:00 R vshort 1030789[3].ossachilles hello.sh 3107mach 00:00:00 R vshort
W celu sprawdzenia statusu pojedynczego zadania w macierzy należy użyć polecenia:
qstat jobID[indeks]
W celu sprawdzenia szczegółowych informacji o macierzy zadań należy użyć polecenia:
qstat –f jobID[]
Szczególnie przydatne mogą być informacje o ilości zadań z macierzy w poszczególnych statusach:
~/test_array_jobs > qstat -f 1031517[] | grep array_state_count array_state_count = Queued:4 Running:16 Exiting:0 Expired:0
Działające macierze zadań są oznaczone w systemie kolejkowym literą B “batch”, a nie R „running”.
Przykład użycia
Poniższy skrypt pozwala na jednoczesne uruchomienie kilku zadań w programie Gaussian2016. Skrypt można wywołać w katalogu zawierającym pliki inputowe programu Gaussian2016. Wywołanie skryptu spowoduje utworzenie macierzy zadań, której elementami będą zadania powiązane z poszczególnymi plikami inputowymi.
#!/bin/bash # tworzenie listy, której elementami są pliki inputowe znajdujące się w bieżącym katalogu list=(`ls *.inp`) # liczba plików inputowych pomniejszona o 1 number=$(( ${#list[*]} - 1 )) cat <<EOF | qsub #!/bin/bash # deklaracja liczby zadań macierzy równej liczbie plików inputowych #PBS -J 0-${number} # parametry zadania #PBS -l select=1:ncpus=4:mem=2000MB #PBS -N Zadanie #PBS -l software=Gaussian_2016-C01 #PBS -l walltime=1:00:00 # deklaracja nazwy plików ze standardowym wyjściem i standardowym wyjściem błędów # pliki stdout i stderr zostaną zapisane w katalogu Job^array_index^ #PBS -o Job^array_index^/stdout #PBS -e Job^array_index^/stderr list=(`ls *.inp`) cd `pwd` # utworzenie katalogów Job0, Job1, ..., w których zapisane zostaną pliki stdout i stderr mkdir Job\$PBS_ARRAY_INDEX module load gaussian/g16.C.01 # uruchomienie zadań zapisanych na liście g16 \${list[\$PBS_ARRAY_INDEX]} EOF
W celu odwołania się do indeksu podzadania macierzy w dyrektywie PBS (#PBS) należy użyć składni: ^array_index^, a nie zmiennej BASH: PBS_ARRAY_INDEX.
Zobacz też: Jak korzystać z kolejek PBS?