Skip to content

srun

Najenostavnejši način, kako začeti posel, je z uporabo ukaza srun, pri čemer je eden lahko en ukaz v eni ukazni vrstici ustvari dodelitev vira in zažene naloge za določen korak posla. Z ukazom srun se lahko zaženejo vzporedne transakcije na sistemu Slurm. Slurm srun se pogosto enači z mpirun za transakcije tipa MPI. Če to niso vzporedne naloge takšnega tipa, je bolje uporabiti sbatch.

Na voljo je veliko možnosti, ki se lahko dodelijo ukazu srun. Te možnosti zlasti omogočajo uporabniku nadzirati, kateri viri se dodelijo in kako se naloge distribuirajo med temi viri.

V spodnjem primeru se izvede ukaz hostname, in sicer izvedejo se štiri naloge (-n 4) na dveh vozliščih (-N 2), v izhodnem signalu (-l) pa so tudi vključene številke nalog. Privzeto se uporabi particija, saj ni specifično določena. Vendar pa se privzeto uporabi tudi en posel na vozlišče.

[user@login0004 ~]$ srun -N 2 -n 4 hostname
cn0321
cn0321
cn0320
cn0320

V naslednjem primeru, ko zaženete posel imena gostitelja, sta potrebni dve vozlišči, vsako z desetimi nalogami na vozlišče, dva CPU-ja na nalogo (40 CPU-jev skupno), 1 GB pomnilnika na particiji, imenovani express, za eno uro:

 srun --partition=cpu --nodes=2  --ntasks 10 --cpus-per-task 2 \
 --time=00:00:30 --mem=1G hostname

V primeru, da uporabnik dela na več projektih, je pomembno, da račun spremenite po tej povezavi: Popis in uporaba.

Več informacij o zagonu poslov z uporabo ukaza srun je na voljo na povezavi.

sbatch

Ukaz (sbatch) posreduje uporabniško generirano batch skripto sistemu Slurm. Batch skripta se lahko dodeli ukazu sbatch z imenom datoteke na ukazni vrstici, če pa ni določeno nobeno ime, pa sbatch odčita skripto iz standardnega vnosa. Vsaka skripta se mora začeti z vrstico #!/bin/sh in batch skripta lahko tudi vsebuje veliko število možnosti, vendar mora biti pred vsako vrstico z navedeno možnostjo vrstica #SBATCH. Potrebni viri in drugi parametri za izvedbo posla (izbira tipa particije ali particije same, trajanje naloge, določitev izhodne datoteke itd.) se lahko določijo s parametri #SBATCH, ki jim sledi poljubno število nalog, zagnanih z ukazom srun.

#!/bin/bash
#SBATCH --job-name=test
#SBATCH --output=result.txt
#SBATCH --ntasks=1
#SBATCH --time=10:00
#SBATCH --mem-per-cpu=100
srun hostname
srun sleep 60

Ukaz sbatch zaustavi nadaljnjo obdelavo direktiv #SBATCH, ko je v skripti dosežena prva vrstice brez presledkov, kar ni komentar, in ukaz sam se izklopi, takoj ko je skripta uspešno prenesena na upravljalnik Slurm in ji je dodeljen ID posla. Viri ne rabijo biti dodeljeni batch skripti takoj, saj je lahko skripta v vrsti kar nekaj časa, preden so potrebni viri na voljo.

Privzeto sta standardni izhod in standardna napaka usmerjena v datoteko, imenovano "slurm-% j.out", kjer "% j" zamenja dodelitev posla in datoteka se ustvari na prvem vozlišču za dodelitev posla. Z izjemo same batch skripte Slurm ne premika uporabniških datotek.

V primeru, da uporabnik dela na več projektih, je pomembno, da račun spremenite po tej povezavi: Popis in uporaba.

Primer posla, na katerem se izvaja ukaz sbatch na cpu in longcpu particijah:

 $  sbatch --partition=cpu --job-name=test --mem=4G \
   --time=5-0:0 --output=test.log myscript.sh

Kar je enako kot:

 $  sbatch -p cpu -J test --mem=4G -t 5-0:0 -o test.log \
 myscript.sh

In isto kot:

#!/bin/bash
#SBATCH --partition=longcpu
#SBATCH --job-name=test
#SBATCH --mem=4G
#SBATCH --time=5-0:0
#SBATCH --output=test.log
sh myscript.sh

Dobra praksa: Uporabite -n ali -N s stikalom --ntasks-per-node. Dodajte izvršljivi bit svoji skripti: chmod a + x my_script.sh

Primer posla, na katerem se izvaja ukaz sbatch na particijo gpu:

#!/bin/bash
#SBATCH --job-name="test"
#SBATCH --time=00:10:00
#SBATCH --nodes=1
#SBATCH --gres=gpu:4
#SBATCH --ntasks-per-core=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1
#SBATCH --partition=gpu
#SBATCH --mem=4GB
#SBATCH --signal=INT@60

srun genga_super -R -1

Z uporabo stikala #SBATCH --partition=gpu uporabnik samo izbere računsko vozišče z GPU particijo, ne zahteva noben grafični vir. Da lahko uporabite vse grafične vire na eno računsko vožlišče dodajte stikalo: SBATCH --gres=gpu:4. Če zahtevate samo en grafični vir dodajte stikalo:#SBATCH --gres=gpu:1.

Razlika med srun in sbatch

  • Oba ukaza se izvršita z istimi stikali (možnosti).
  • sbatch je edini, ki pozna nabor poslov z istim vhodom – nizi poslov.
  • srun je edini, ki pozna možnost izvajanja dodelitve --exclusive, ki omogoča dodelitev celotnega vozlišča in tako izvedbo številnih vzporednih nalog znotraj ene dodelitve virov (iz SLURM v20.02, vključno z dodatnimi viri gres, npr. GPU).