Macierz zadań: Różnice pomiędzy wersjami

Z KdmWiki
Przejdź do nawigacji Przejdź do wyszukiwania
 
(Nie pokazano 9 wersji utworzonych przez 2 użytkowników)
Linia 1: Linia 1:
<small>< [[Podręcznik użytkownika KDM]] < [[System kolejkowy]] < Tablica zadań</small>
+
<small>< [[Podręcznik użytkownika KDM]] < [[System kolejkowy]] < Macierz zadań</small>
  
== Czym jest tablica zadań ==
+
== Czym jest macierz zadań ==
Tablica zadań (job array) stanowi zbiór zadań uruchomionych jednocześnie.
+
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 tablicy posiada indeks, który jest przechowywany w zmiennej środowiskowej PBS_ARRAY_INDEX.
+
Każde zadanie w macierzy posiada indeks, który jest przechowywany w zmiennej środowiskowej PBS_ARRAY_INDEX.
  
== Jak utworzyć tablicę zadań? ==
+
== Jak utworzyć macierz zadań? ==
W celu utworzenia tablicy zadań należy użyć w skrypcie opcji –J i podać zakresów indeksów tablicy:
+
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 tablicy dziesięciu zadań indeksowanych od 1 do 10, należy użyć w skrypcie polecenia:
+
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 tablicy zadań można również podać opcję –J przy zlecaniu obliczeń:
+
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 tablicy zadań ==
+
== Jak sprawdzić status macierzy zadań ==
Tablica zadań jest oznaczona w systemie kolejkowym numerem z kwadratowym nawiasem
+
Macierz zadań jest oznaczona w systemie kolejkowym numerem z kwadratowym nawiasem
 
   jobID[]
 
   jobID[]
zatem w celu sprawdzenia statusu tablicy zadań, należy użyć polecenia:
+
zatem w celu sprawdzenia statusu macierzy zadań, należy użyć polecenia:
 
   qstat jobID[]
 
   qstat jobID[]
W celu sprawdzenia statusu wszystkich zadań w tablicy należy użyć polecenia:
+
W celu sprawdzenia statusu wszystkich zadań w macierzy należy użyć polecenia:
 
   qstat –t jobID[]
 
   qstat –t jobID[]
  
   [wcss] 3107mach@bem ~/test_array_jobs > qstat -t 1030789[]
+
   ~/test_array_jobs > qstat -t 1030789[]
 
   Job id                Name            User              Time Use S Queue
 
   Job id                Name            User              Time Use S Queue
 
   ---------------------  ---------------- ----------------  -------- - -----
 
   ---------------------  ---------------- ----------------  -------- - -----
Linia 38: 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 tablicy należy użyć polecenia:
+
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 tablicy zadań należy użyć polecenia:
+
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 tablicy w poszczególnych statusach:
+
Szczególnie przydatne mogą być informacje o ilości zadań z macierzy w poszczególnych statusach:
   [wcss] 3107mach@bem ~/test_array_jobs > qstat -f 1031517[] | grep array_state_count
+
   ~/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?