Podstawy:SLURM vs PBS: Różnice pomiędzy wersjami

Z Komputery Dużej Mocy w ACK CYFRONET AGH
Skocz do:nawigacja, szukaj
Linia 51: Linia 51:
 
</pre>
 
</pre>
  
====Zadanie wielowątkowe (OpenMP)====
+
==Zadanie wielowątkowe (OpenMP)==
  
 
PBS:
 
PBS:
Linia 62: Linia 62:
 
</pre>
 
</pre>
  
====Zadanie wieloprocesowe/rozproszone (MPI)====
+
==Zadanie wieloprocesowe/rozproszone (MPI)==
  
 
Typowe zadanie MPI, gdzie uruchamiany jeden proces na każdy rdzeń. Przykładowe zadanie korzysta z dwóch węzłów po 12 rdzeni, co przekłada się na 24 ranki.
 
Typowe zadanie MPI, gdzie uruchamiany jeden proces na każdy rdzeń. Przykładowe zadanie korzysta z dwóch węzłów po 12 rdzeni, co przekłada się na 24 ranki.
Linia 82: Linia 82:
 
</pre>
 
</pre>
  
====Zadanie hybrydowe (MPI + OpenMP)====
+
==Zadanie hybrydowe (MPI + OpenMP)==
  
 
Przykładowe zadanie składa się z 2 procesów po 12 wątków, co w sumie przekłada się na 2 węzły po 12 rdzeni. Zadanie będzie wymagało dodatkowych opcji przy komendzie <tt>mpiexec</tt> (w postaci zależnej od wykorzystywanej biblioteki OpenMP) tak aby każdy proces wiedział, że ma uruchomić po 12 wątków.
 
Przykładowe zadanie składa się z 2 procesów po 12 wątków, co w sumie przekłada się na 2 węzły po 12 rdzeni. Zadanie będzie wymagało dodatkowych opcji przy komendzie <tt>mpiexec</tt> (w postaci zależnej od wykorzystywanej biblioteki OpenMP) tak aby każdy proces wiedział, że ma uruchomić po 12 wątków.
Linia 106: Linia 106:
 
</pre>
 
</pre>
  
===Najważniejsze zmienne systemowe===
+
=Najważniejsze zmienne systemowe=
 
{| class="wikitable"
 
{| class="wikitable"
 
! width=50% |Zmienna SLURM    !!width=50%|Zmienna PBS
 
! width=50% |Zmienna SLURM    !!width=50%|Zmienna PBS
Linia 123: Linia 123:
 
Wartość <tt>PBS_NP</tt> możemy wyliczyć za pomocą <tt>SLURM_NTASKS</tt> * <tt>SLURM_CPUS_PER_TASK</tt> przy założeniu, że zadanie posiada więcej niż 1 rdzeń per proces. W innym przypadku <tt>PBS_NP</tt> jest równe <tt>SLURM_NTASKS</tt>.
 
Wartość <tt>PBS_NP</tt> możemy wyliczyć za pomocą <tt>SLURM_NTASKS</tt> * <tt>SLURM_CPUS_PER_TASK</tt> przy założeniu, że zadanie posiada więcej niż 1 rdzeń per proces. W innym przypadku <tt>PBS_NP</tt> jest równe <tt>SLURM_NTASKS</tt>.
  
===Najważniejsze komendy===
+
=Najważniejsze komendy=
 
{| class="wikitable"
 
{| class="wikitable"
 
! width=50% |Komenda SLURM    !!width=50%|Komenda PBS
 
! width=50% |Komenda SLURM    !!width=50%|Komenda PBS

Wersja z 17:07, 8 gru 2017


Strona zawiera krótkie podsumowanie różnić w specyfikowaniu zasobów dla zadań w systemach SLURM i PBS. Strona może być pomocna dla osób przenoszących swoje skrypty pomiędzy tymi dwoma systemami kolejkowymi, ale nie jest wyczerpującym źródłem wiedzy. W przypadku wątpliwości prosimy o kontakt lub przestudiowanie dokumentacji do danego systemu kolejkowego.

Dyrektywa systemu kolejkowego dla plików batchowych

SLURM PBS
#SBATCH #PBS

Najważniejsze opcje oraz parametry

Opcja SLURM Opcja PBS
-N (--nodes=) -l nodes=
--ntasks-per-node= -l ppn=
--cpus-per-task= -l ppn=
--mem-per-cpu= -l pmem=
--mem= -l mem=
-t (--time=) -l walltime=
-p (--partition=) -q
-o filename -e filename -j oe
--mail-type= -m
--mail= -M

Typowe konfiguracje zadań

SLURM w odróżnieniu od PBS pozwala na bardziej granularne wyspecyfikowanie zasobów. Dzięki temu, że system kolejkowy dysponuje taką informacją możliwe jest zautomatyzowanie i optymalizacja procesu uruchamiania aplikacji.

Zadanie jednordzeniowe

PBS:

qsub -q plgrid -A nazwa_grantu -l nodes=1 -l walltime=12:00:00 job.sh

SLURM:

sbatch -q plgrid -A nazwa_grantu -N 1 -n 1 --time=12:00:00 job.sh

Zadanie wielowątkowe (OpenMP)

PBS:

qsub -q plgrid -A nazwa_grantu -l nodes=1:ppn=12 -l walltime=12:00:00 job.sh

SLURM:

sbatch -q plgrid -A nazwa_grantu --time=12:00:00 -N 1 -n 1 --cpus-per-task=12 job.sh

Zadanie wieloprocesowe/rozproszone (MPI)

Typowe zadanie MPI, gdzie uruchamiany jeden proces na każdy rdzeń. Przykładowe zadanie korzysta z dwóch węzłów po 12 rdzeni, co przekłada się na 24 ranki.

PBS:

qsub -q plgrid -A nazwa_grantu -l nodes=2:ppn=12 -l walltime=12:00:00 job.sh

w samym skrypcie:
mpiexec applikacja.mpi

SLURM:

sbatch -q plgrid -A nazwa_grantu --time=12:00:00 -N 2 -n 24 --ntasks-per-node=12 job.sh

w samym skrypcie:
mpiexec applikacja.mpi

Zadanie hybrydowe (MPI + OpenMP)

Przykładowe zadanie składa się z 2 procesów po 12 wątków, co w sumie przekłada się na 2 węzły po 12 rdzeni. Zadanie będzie wymagało dodatkowych opcji przy komendzie mpiexec (w postaci zależnej od wykorzystywanej biblioteki OpenMP) tak aby każdy proces wiedział, że ma uruchomić po 12 wątków.

PBS:

qsub -q plgrid -A nazwa_grantu -l nodes=2:ppn=12 -l walltime=12:00:00 job.sh

w samym skrypcie:
OMP_NUM_THREADS=12

mpiexec aplikacja.mpi

SLURM:

sbatch -q plgrid -A nazwa_grantu --time=12:00:00 -N 2 -n 2 --ntasks-per-node=1 --cpus-per-task=12 job.sh

w samym skrypcie:
OMP_NUM_THREADS=12

mpiexec aplikacja.mpi

Najważniejsze zmienne systemowe

Zmienna SLURM Zmienna PBS
SLURM_SUBMIT_DIR PBS_O_WORKDIR
SLURM_NTASKS brak odpowiednika
brak odpowiednika PBS_NP
SLURM_JOB_ID PBS_JOBID
SLURM_ARRAY_TASK_ID PBS_ARRAYID

Wartość PBS_NP możemy wyliczyć za pomocą SLURM_NTASKS * SLURM_CPUS_PER_TASK przy założeniu, że zadanie posiada więcej niż 1 rdzeń per proces. W innym przypadku PBS_NP jest równe SLURM_NTASKS.

Najważniejsze komendy

Komenda SLURM Komenda PBS
sbatch qsub
squeue qstat
scancel qdel