Skip to content

Osnove Slurm

Slurm je odprtokodni in zelo skalabilni sistem, ki je toleranten na napake ter se uporablja za upravljanje gruč in razporejanje poslov.

Glavna naloga sistema Slurm je upravljanje samih delovnih obremenitev na gruči in ima tako tri ključne funkcije. Prvič, uporabnikom zagotavlja dostop do virov na računskih vozliščih za določeno obdobjem, da lahko uporabniki na teh vozliščih delaj in izvajajo posle. Drugič, nudi okvir za zagon, izvajanje in nadziranje poslov na nabodu dodeljenih vozlišč in tretjič, upravlja tudi vrste poslov, ki čakajo na sprostitev virov in se bodo torej lahko začeli izvajati.

Za uporabo gruče prek sistema Slurm mora uporabnik pridobiti dostop do prijavnega vozlišča na izbrani gruči. Prijavno vozlišče je računalnik, ki je neposredno povezan s sistemom in ustrezno konfiguriran za komunikacijo z upravljalnim prikritim procesom in ima vgrajena orodja z ukazno vrstico. Uporabnik se lahko poveže s prijavnim vozliščem prek povezave SSH za prijavo na svoj uporabniški račun izbrane gruče in tako dobi dostop do oddaljene lupine na prijavnem vozlišču, od koder lahko nato oddaja posle, ki jih na koncu prevzame Slurm.

Slurm uporablja štiri osnovne korake za upravljanje virov CPU za posel:

  • Izbira vozlišč
  • Dodelitev CPU-jev iz izbranih vozlišč
  • Distribucija nalog za izbrana vozlišča
  • Izbirna distribucija in vezanje (angl. binding) nalog dodeljenim CPU-jem v vozlišču (afiniteta naloge).

Ukazi za uporabnike in administratorje

Pomembna orodja za ukaze so:

  • sinfo – preverjanje podatkov o statusu sistema.
  • squeue – preverjanje informacij o statusu naloge.
  • scancel – preklic posla v vrsti ali med izvajanjem.
  • sview – grafični ogled prikazanih informacij o statusu poslov, particij in vozlišč, ki jih upravlja Slurm.
  • scontrol – za nadzor gruče, administracijo in konfiguracijo.
  • sstat – prikaz statusa poslov v izvajanju.

Uporabniški ukazi

  • srun – uporablja se za izvajanje nalog v realnem času. Posel se lahko vsebuje več korakov posla, ki se izvajajo sekvenčno ali vzporedno na neodvisnih ali deljenih virih znotraj dodelitve vozlišča posla. Srun ima širok razpon možnosti za določanje zahtev po virih, vključno z minimalnim in maksimalnim številom vozlišč, številom procesorjev, določenimi vozlišči, ki se naj uporabljajo ali ne, in določenimi lastnostmi vozlišč (količina potrebnega pomnilnika, potreben prostor na disku, nekatere zahtevane funkcije itd.).
  • salloc – uporablja se za dodeljevanje virov za posel v realnem času. Običajno se to uporablja za dodelitev virov in za izdelavo lupine. Lupina se nato uporabi z izvajanje ukazov srun za zagon vzporednih nalog.
  • sbatch – uporablja se za zagon izvršljivih datotek, ki se bodo izvršile, ko se postavijo v vrsto. Izvršljiva datoteka lahko vsebuje več ukazov srun za izvajanje poslov. Vendar pa se pri uporabi takšne tehnike oddaje poslov poslu dodeli identifikacijska številka v vrsti.

Ukazi za administratorje

  • sacctmgr – za upravljanje baze podatkov, podatkov o gruči, uporabnikih, računih in particijah.
  • sview – grafični ogled prikazanih informacij o statusu poslov, particij in vozlišč, ki jih upravlja Slurm.
  • sreport – prikaz informacij od računovodske baze podatkov o poslih, uporabnikih, gručah.

Drugi uporabni ukazi

  • sprio – uporablja se za prikaz podrobnega pogleda komponent, ki vplivajo na prioriteto dela.
  • sacct – preverjanje podatkov na trenutnih in zaključenih poslih in nalogah ter generiranje poročil.
  • sattach – za pripenjanje standardnega vhoda, izhoda in napačnih ter signalnih zmožnosti poslu ali koraku posla, ki se trenutno izvaja.
  • sbcast, sgather – uporablja se za prenos datoteke iz lokalnega diska na lokalni disk na vozliščih, dodeljenih poslu, in obratno.

Slurm implementira dokumentiran API za vse naštete funkcije.

Ukaz (salloc) se uporablja za dodeljevanje virov (nabor vozlišč) za izvajanje operacij na teh virih, v najboljšem primeru z nekaj omejitvami (npr. število procesorjev na vozlišče). Ko ukaz salloc uspešno pridobi zahtevano dodelitev, izvede uporabniško specifični ukaz. Ko je določen ukaz zaključen, salloc odpove dodelitev posla. Ukaz je lahko kateri koli program, ki ga uporabnik želi izvesti. Nekaj tipičnih ukazov: xterm, batch-skripta, ki vsebuje ukaze srun, in celo samostojni ukaz srun. Če ni določen noben ukaz, salloc zažene uporabnikovo privzeto lupino.

Čeprav se lahko ukaz salloc uporabi tudi v kombinaciji z ukazom srun, se običajno uporablja v kombinaciji z ukazom sbatch.

Možnosti, ki se lahko pripnejo ukazom srun, salloc in sbatch

Možnost Sbatch Privzeta vrednost Opis
--nodes=<number> 1 Število vozlišč za dodelitev.
-N <number>
--ntasks=<number> 1 Število nalog (procesi MPI). Se lahko izpusti, če je podano --nodes in --ntasks-per-node.
-n <number>
--ntasks-per-node=<num> 1 Število nalog na vozlišče. Če se ključna beseda izpusti, se uporabi privzeta vrednost.
--cpus-per-task=<number> 1 Število niti (logičnih jeder) na nalogo. Uporablja se za OpenMP ali hibridne posle.
-c <number>
--mem=<size[units]> - Zahtevana količina pomnilnika.
--mem-per-cpu=<num[units]>
--mem-per-gpu=<num[units]> Opomba: Če se specifikacija velikosti pomnilnika ne določi, se dostop do posla dodeli celotnemu pomnilniku na vsakem določenem vozlišču.
--mail-user=<email> - Elektronski naslov za obvestila.
--output=<path>/<file pattern> slurm-%j.out Standardna izhodna datoteka.
-o <path>/<file pattern> (%j = JobID)
--error=<path>/<file pattern> slurm-%j.err Standardna datoteka z napako.
-e <path>/<file pattern> (%j = JobID)
--time=<walltime> odvisno od particije Zahtevana omejitev časa za izvedbo posla.
-t <walltime>
--partition=<name> brez Particija za izvajanje posla.
-p <name>
--constraint=<list> brez Lastnosti vozlišča, zahtevanega za posel.
-C <list> Glejte konfiguracijo za razpoložljive lastnosti.
--job-name=<jobname> ime skripte posla Ime posla.
-J <jobname>
--account=<project account> brez Projekt, ki se mora zaračunati.
-A <project_account>
--exclude=<nodelist> - Izloči določena vozlišča iz dodelitve opravil.
-x <nodelist>
--nodelist=<nodelist> - Zahteva določena vozlišča za dodelitev poslov (po potrebi se bodo dodala dodatna vozlišča za izpolnjevanje potreb po številu vozlišč).
-w <nodelist>
--requeue or --no-requeue no-requeue Določa, ali se batch-posel ponovno postavi v vrsto po napaki na vozlišču. Pozor: če se posel ponovno posatvi v vrsto, se celotna batch-skripta inicializira od začetka.