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

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.

Primer posla, na katerem se izvaja ukaz sbatch:

 $  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

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).