...
Za raspoređivanje i upravljanje poslovima na računalnom klasteru SupekPadobran, koristi se PBS Pro (Portable Batch System Professional) koji obavlja raspoređivanje poslova unutar klastera. Njegova primarna zadaća je raspodjela računalnih zadataka, tj. paketnih poslova, među dostupnim računalnim resursima.
U ovom dokumentu opisano je korištenje PBS Pro 202222.105.1 verzije.
...
...
11 verzije
Izvođenje poslova
Korisničke aplikacije (u nastavku poslovi) koji se pokreću pomoću sustava PBS moraju biti opisani startnom shell skritpom (sh, bash, zsh...). Unutar startne skripte iznad normalnih naredbi, navode se PBS parametri. Te parametre moguće je navesti i prilikom podnošenja posla.
...
Code Block |
---|
|
qsub -q cpu -l walltime=10:00:00 -l select=1:ncpus=4:mem=10GB moj_posao.pbs |
...
Code Block |
---|
|
# pokreni qsub
[korisnik@x3000c0s25b0n0korisnik@padobran:~] $ qsub
Job script will be read from standard input. Submit with CTRL+D.
echo "Hello world"
14571.x3000c0s25b0n0.hsn.hpc.srce.hr
# ispiši sadržaj direktorija
[korisnik@x3000c0s25b0n0korisnik@padobran:~] $ ls -l
total 5140716
-rw------- 1 korisnik hpc 0 Jun 1 07:44 STDIN.e14571
-rw------- 1 korisnik hpc 12 Jun 1 07:44 STDIN.o14571
# ispiši sadržaj izlazne datoteke
[korisnik@x3000c0s25b0n0korisnik@padobran:~] $ cat STDIN.o14571
Hello world |
...
Code Block |
---|
|
# ispiši datoteku hello.sh
[korisnik@x3000c0s25b0n0korisnik@padobran:~] $ cat hello.sh
#!/bin/bash
#PBS -N hello
echo "Hello world"
# podnošenje skripte posla
[korisnik@x3000c0s25b0n0korisnik@padobran:~] $ qsub hello.sh
14572.x3000c0s25b0n0.hsn.hpc.srce.hr
# ispis sadržaja direktorija
[korisnik@x3000c0s25b0n0korisnik@padobran:~] $ ls -l
total 5140721
-rw------- 1 korisnik hpc 0 Jun 1 07:44 STDIN.e14571
-rw------- 1 korisnik hpc 12 Jun 1 07:44 STDIN.o14571
-rw------- 1 korisnik hpc 0 Jun 1 08:02 hello.e14572
-rw------- 1 korisnik hpc 12 Jun 1 08:02 hello.o14572
-rw-r--r-- 1 korisnik hpc 46 Jun 1 07:55 hello.sh
# ispis sadržaja datoteke
[korisnik@x3000c0s25b0n0korisnik@padobran:~] $ cat hello.o14572
Hello world |
...
Code Block |
---|
|
# hostname na pristupnom poslužitelju
[korisnik@x3000c0s25b0n0korisnik@padobran:~] $ hostname
x3000c0s25b0n0padobran.srce.hr
# otvaranje interaktivne sjednice
[korisnik@x3000c0s25b0n0korisnik@padobran:~] $ qsub -I -N hello-interactive
qsub: waiting for job 14574.x3000c0s25b0n0.hsn.hpc.srce.hr106.admin to start
qsub: job 14574.x3000c0s25b0n0.hsn.hpc.srce.hr106.admin ready
# hostname na glavnom radnom čvoru
[korisnik@x8000c0s3b0n0korisnik@node034:~] $ hostname
x8000c0s3b0n0node034.padobran |
U slučaju polja poslova, korištenjem opcije qsub -J X-Y[:Z]
možemo podnijeti zadani broj identičnih poslova u rangu X
do Y
s korakom Z
:
Code Block |
---|
|
# podnošenje polja poslova
[korisnik@x3000c0s25b0n0korisnik@padobran:~] $ qsub -J 1-10:2 hello.sh sh
14575107[].x3000c0s25b0n0.hsn.hpc.srce.hradmin
# ispis sadržaja datoteke
[korisnik@x3000c0s25b0n0:~] $ ls -l
total 5140744
-rw------- 1 korisnik hpc 0 Jun 1 07:44 STDIN.e14571
-rw------- 1 korisnik hpc 12 Jun 1 07:44 STDIN.o14571
-rw------- 1 korisnik hpc 0 Jun 1 08:02 hello.e14572
-rw------- 1 korisnik hpc 0 Jun 1 08:21 hello.e14575.1
-rw------- 1 korisnik hpc 0 Jun 1 08:21 hello.e14575.3
-rw------- 1 korisnik hpc 0 Jun 1 08:21 hello.e14575.5
-rw------- 1 korisnik hpc 0 Jun 1 08:21 hello.e14575.7
-rw------- 1 korisnik hpc 0 Jun 1 08:21 hello.e14575.9
-rw------- 1 korisnik hpc 12 Jun 1 08:02 hello.o14572
-rw------- 1 korisnik hpc 12 Jun 1 08:21 hello.o14575.1
-rw------- 1 korisnik hpc 12 Jun 1 08:21 hello.o14575.3
-rw------- 1 korisnik hpc 12 Jun 1 08:21 hello.o14575.5
-rw------- 1 korisnik hpc 12 Jun 1 08:21 hello.o14575.7
-rw------- 1 korisnik hpc 12 Jun 1 08:21 hello.o14575.9
-rw-r--r-- 1 korisnik hpc 46 Jun 1 07:55 hello.sh |
...
Code Block |
---|
language | bash |
---|
title | moj_posao.pbs |
---|
|
#!/bin/bash
#PBS -P testni_primjer
#PBS -e /home/moj_direktorij
#PBS -q cpu
#PBS -e /home/moj_direktorijl walltime=00:01:00
#PBS -l select=21:ncpus=10
module load gcc/12.1.0mpi/openmpi-x86_64
gccmpicc --version |
Osnovni PBS parametri
...
Code Block |
---|
language | bash |
---|
title | Primjer maila |
---|
|
#!/bin/bash
#PBS -q cpu
#PBS -l selectwalltime=1:ncpus=00:01:00
#PBS -l select=1:ncpus=2
#PBS -M <ime>@srce.hr,<ime2>@srce.hr
#PBS -m be
echo $PBS_JOBNAME > out
echo $PBS_O_HOST |
...
Code Block |
---|
language | text |
---|
title | Početak posla |
---|
|
PBS Job Id: 2686.x3000c0s25b0n0.hsn.hpc.srce.hr110.admin
Job Name: pbs.pbs
Begun execution |
...
Code Block |
---|
language | text |
---|
title | Završetak posla |
---|
|
PBS Job Id: 2686.x3000c0s25b0n0.hsn.hpc.srce.hr110.admin
Job Name: pbs.pbs
Execution terminated
Exit_status=0
resources_used.cpupercent=0
resources_used.cput=00:00:00
resources_used.mem=0kb
resources_used.ncpus=2
resources_used.vmem=0kb
resources_used.walltime=00:00:01 |
...
-l select=3:ncpus=2 | Traženje 3 komada(chunk-a) čvora po 2 jezgre (ukupno 6 jezgri) |
-l select=1:ncpus=10:mem=20GB | Traženje 1 komada(chunka-a) čvora sa 10 jezgri i 20GB radne memorije |
-l ngpus=2 | Traženje 2 gpu-a |
-l walltime=00:10:00 | Maksimalno vrijeme izvršenja posla. Više na redovi poslova |
PBS varijable okoline
Ime | Opis |
---|
PBS_JOBID | Identifikator posla koji daje PBS kada se posao preda. Stvoreno nakon izvršenja naredbe qsub. |
PBS_JOBNAME | Naziv posla koji je dao korisnik. Zadani naziv je naziv podnešene skripte. |
PBS_NODEFILE | Popis radnih čvorova, odnosno procesorskih jezgri na kojima se izvršava posao |
PBS_O_WORKDIR | Radni direktorij u kojem je podnesen posao, odnosno u kojem je pozvana naredba qsub. |
OMP_NUM_THREADS | OpenMP varijabla koju PBS izvozi u okolinu, a koja je jednaka vrijednosti opcije ncpus iz zaglavlja PBS skripte |
NCPUS | Broj zatraženih jezgara. Odgovara vrijednosti iz opcije ncpus iz zaglavlja PBS skripte. |
TMPDIR | Putanja do scratch direktorija. |
...
Tip |
---|
title | Određivanje radnog direktorija |
---|
|
Dok je u PBS pro određena putanja za output i error datoteke u direktoriju u kojem se izvode, input i output datoteke samog programa se zadano učitavaju/spremaju u $HOME direktorij. PBS Pro nema opciju određivanja izvođenja posla u trenutnom direktoriju u kojem se nalazimo stoga je potrebno ručno promijeniti direktorij. Poslije zaglavlja potrebno je napisati: cd $PBS_O_WORKDIR Prebacit će izvođenje posla u direktorij u kojem je pokrenuta skripta. |
...
Code Block |
---|
language | bash |
---|
linenumbers | true |
---|
|
#!/bin/bash
#PBS -q cpu
#PBS -l walltime=10:00:00
#PBS -l ncpus=8
cd ${PBS_O_WORKDIR}
xtb C2H4BrCl.xyz --chrg 0 --uhf 0 --opt vtight |
...
Ukoliko Vaša aplikacija koristi paralelizaciju isključivo na razini MPI procesa i može se širiti van jednog radnog čvora (odnosno radi s raspodijeljenom memorijom), posao možete pozvati na način kako je prikazano u primjeru Quantum ESPRESSO aplikacije niže. Za izvođenje aplikacija koje koriste paralelizaciju MPI (ili hibridno MPI+OMP) potrebno je učitati mpi modul prije pozivanja naredbe mpiexec ili mpirun.
Tip |
---|
Vrijednost varijable select iz iz zaglavlja PBS skripte odgovara broju MPI procesa. |
...
Code Block |
---|
language | bash |
---|
linenumbers | true |
---|
|
#!/bin/bash
#PBS -q cpu
#PBS -l walltime=10:00:00
#PBS -l select=16
module load mpi/openmpi-x86_64
cd ${PBS_O_WORKDIR}
mpiexec pw.x -i calcite.in |
...
Code Block |
---|
language | bash |
---|
linenumbers | true |
---|
|
#!/bin/bash
#PBS -q cpu
#PBS -l walltime=10:00:00
#PBS -l select=8:ncpus=4
cd $module load mpi/openmpi-x86_64
cd ${PBS_O_WORKDIR}
mpiexec -d ${OMP_NUM_THREADS} --cpu-bind depth gmx mdrun -v -deffnm md |
cray-pals
Za izvođenje aplikacija koje koriste paralelizaciju MPI (ili hibridno MPI+OMP) potrebno je podignuti modul cray-pals
prije pozivanja naredbe mpiexec
, čime se osigurava ispravna integracija aplikacije sa sustavom za podnošenje poslova PBS Pro i Crayevom inačicom aplikacije MPI mpiexec
baziranoj na implementaciji MPICH.
Primjer pozivanja ovog modula i izvršavanje paralelne aplikacije na dva procesora:
Code Block |
---|
language | bash |
---|
linenumbers | true |
---|
|
#!/bin/bash
#PBS -l ncpus=2
module load cray-pals
mpiexec -np 2 moja_aplikacija_MPI
|
Varijable okoliša koje će naredba mpiexec podesiti na svakom od rangova MPI biti će:
...
Note |
---|
title | Znanstvene aplikacije na Supeku i cray-pals |
---|
|
Znanstvene aplikacije koje su dostupne na Supeku putem modulefiles alata u sebi već pozivaju ovaj modul, stoga ga nije potrebno opet podizati. -v -deffnm md |
Praćenje i upravljanje izvođenja posla
...
Code Block |
---|
|
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
2663.x3000c0s25b*111.admin mpi+omp_s kmrkalj 00:36:09 R cpu |
...
Code Block |
---|
|
$ tracejob 2670111
Job: 2670.x3000c0s25b0n0.hsn.hpc.srce.hr111.admin
03/30/2023 11:23:24 L Considering job to run
03/30/2023 11:23:24 S Job Queued at request of mhrzenja@x3000c0s25b0n0.hsn.hpc.srce.hr mhrzenja@node034, owner =
mhrzenja@x3000c0s25b0n0.hsn.hpc.srce.hrmhrzenja@node034, job name = mapping, queue = cpu
03/30/2023 11:23:24 S Job Run at request of Scheduler@x3000c0s25b0n0.hsn.hpc.srce.hrScheduler@node034 on exec_vnode
(x8000c0s0b0n0node034:ncpus=40:mem=104857600kb)
03/30/2023 11:23:24 L Job run
03/30/2023 11:23:24 S enqueuing into cpu, state Q hop 1
03/30/2023 11:23:56 S Holds u set at request of mhrzenja@x3000c0s25b0n0.hsn.hpc.srce.hrmhrzenja@node034
03/30/2023 11:24:22 S Holds u released at request of mhrzenja@x3000c0s25b0n0.hsn.hpc.srce.hrmhrzenja@node034
|
Upravljanje poslovima
Poslom se može upravljati i nakon pokretanja.
...
Ako želimo da posao1
započne nakon uspješnog završetka posao0
:
Code Block |
---|
[korisnik@x3000c0s25b0n0korisnik@padobran] $ qsub posao0
1000.x3000c0s25b0n0.hsn.hpc.srce.hradmin
[korisnik@x3000c0s25b0n0korisnik@padobran] $ qsub -W depend=afterok:1000 posao1
1001.x3000c0s25b0n0.hsn.hpc.srce.hradmin
[korisnik@x3000c0s25b0n0korisnik@padobran] $ qstat 1000 1001
Job id Name User Time Use S Queue
--------------------- ---------------- ---------------- -------- - -----
1000.x3000c0s25b0n0admin posao0 korisnik 00:00:00 R cpu
1001.x3000c0s25b0n0admin posao1 korisnik 0 H cpu |
Ako želimo da posao0
započne tek nakon uspješnog završetka posao1
:
Code Block |
---|
[korisnik@x3000c0s25b0n0korisnik@padobran] $ qsub -W depend=on:1 posao0
1002.x3000c0s25b0n0.hsn.hpc.srce.hr
admin
[korisnik@x3000c0s25b0n0korisnik@padobran] $ qsub -W depend=beforeok:1002 posao1
1003.x3000c0s25b0n0.hsn.hpc.srce.hradmin
[korisnik@x3000c0s25b0n0korisnik@padobran] $ qstat 1002 1003
Job id Name User Time Use S Queue
--------------------- ---------------- ---------------- -------- - -----
1002.x3000c0s25b0n0admin posao0 korisnik 0 H cpu
1003.x3000c0s25b0n0admin posao1 korisnik 00:00:00 R cpu |
...