Porównanie SLURM i PBS
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.
Spis treści
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 ...
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 ...
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 |