Glavna stran
Vsebina
Osnovni vir: https://doc.sling.si/slurm-usage/
Ureditev dostopa
Dostop do sistema xantipa je omogočen vsakemu, ki pridobi od odbora ustrezno dovoljenje. Z dovoljenjjem pridobi tudi prijavne podatke za prijavo v sistem. Pridobiti je mogoče osebni ali projektni dostop.
Za delo s sistemom SLURM potrebujete dobro razumevanje ukazne vrstice/lupine ter okolja UNIX in GNU/Linux (bash, delo z datotekami, upravljanje s procesi, ssh in scp, vsaj skriptno programiranje).
Lokalni prostor na DGX-1 Na DGX-1 je na voljo 7TB prostora - SSD diski v raid 0, kar je mountano v /raid
sda 8:0 0 446,6G 0 disk ├─sda1 8:1 0 487M 0 part /boot/efi └─sda2 8:2 0 446,2G 0 part / sdb 8:16 0 7T 0 disk └─sdb1 8:17 0 7T 0 part /raid
Upporabniški prostor za podatke je na /raid. Ta prostor ni namenjen dolgoročni hrambi podatkov, zato se za podatke shranjene na sistemu ne jamči.
SLURM: Simple Linux Utility for Resource Management
SLURM opravlja vlogo lokalnega upravitelja virov (Local Resource Management System, LRMS), ki je hkrati upravitelj vrst in nadzornik poslov. Pri tem je integriran s sodobnimi metodami za upravljanje z viri v sistemih GNU/Linux, ne zahteva sprememb v jedru operacijskega sistema in v distribucijah, podpira splošno opremo, a tudi specializirano opremo superračunalniških okolij ter uživa visoko stopnjo podpore tako v odprtokodni skupnosti kot pri proizvajalcih specializirane opreme.
SLURM omogoča neposredno izkoriščanje specifičnih zmogljivosti sistema. Če potrebujete višjo stopnjo poenotenja, skušajte doseči dogovor z administratorji za usklajena okolja za izvajanje, uporabljajte vsebnike ali v svoji skupnosti vzpostavite avtomatiziran sistem delotokov in programske opreme.
SLURM je:
- sistem vrst, upravitelj virov, upravitelj poslov
- razvit za moderno tehnologijo okolja GNU/Linux in sodobne gruče, podpira pa tudi druge sisteme, ki implementirajo standard POSIX, npr. FeeBSD
- omogoča upravljanje poslov na osnovi vrste parametrov:
fairshare, QOS, starost, velikost in zahteve posla ipd.
- scalability: gruče 3+ milijonov jeder
- podpira sodobne tehnologije, kot so MPI, InfiniBand, GPGPU; podpira tudi specifične tehnologije vrste superračunalnikov, kot so IBM BlueGene/Q, Cray Shasta, Tianhe in Sugon
- cilji arhitekture: odpornost na napake, prenosljivost in skalabilnost
- razširljivost:
- več kot 100 vtičnikov, izvedbe za različne arhitekture (overjanje, MPI, popis porabe, mrežna topologija, oddaja poslov)
- aplikativni programski vmesnik REST in standardizirana baza omogočata programabilnost in integracijo
- projekt odprte kode (GPL)
Izvorna koda: git clone git://github.com/SchedMD/slurm.git Spletna stran projekta: https://slurm.schedmd.com/
Ustroj sistema SLURM Slurm uporablja arhitekturo storitev v okolju UNIX, kjer posamezne funkcije opravljajo ločene aplikacije (ali demoni), konfiguracija je shranjena v običajnih konfiguracijskih datotekah, podpira pa standardni REST API za razširljivost in programabilni dostop, programe na ukazni vrstici za komunikacijo ter API za vtičnike za razširljivost.
Za osrednji nadzor na distemom skrbi demon slurmctld, ki opravlja osrednji nadzor nad viri in nalogami. Zadošča ena instanca, a sistem omogoča vzpostavitev rezervnih instanc, da omogoča neprekinjeno delovanje v primeru napak.
Na vsakem delovnem vozlišču teče demon slurmd, ki deluje kot operater vozlišča:
- omogoča komunikacijo med vozlišči (analogno kot namenski sshd)
- sprejema naloge in jih izvaja
- spremlja delovanje nalog
- sporoča o stanju nalog in uporabi virov
Tipično je v sistemu konfiguriran demon slurmdbd (Slurm DataBase Daemon), ki sprejema podatke (lahko tudi z več gruč) o porabi virov in jih shranjuje v bazo podatkov. Omogoča komunikacijo po REST API.
Konfiguracija, upravljanje in uporaba sistema poteka s pomočjo uporabniških orodij, ki so prikazana v nadaljevanju. Ta orodja so, med drugimi:
- sbatch, salloc, srun : zagon posla
- scancel: preklic posla v vrsti ali v teku
- smd: sprememba alokacje posla, npr. v primeru strojne napake
- sinfo: podatki o stanju sistema
- squeue, sprio, sjstat: podatki o stanju nalog in vrst
- sacct, sreport: podatki o tekočih in končanih poslih in nalogah, generiranje poročil
- sview, smap: grafičen prikaz stanja sistem, poslov in mrežne topologije
- sattach: pripojitev seji tekoče naloge/posla
- sbcast, sgather: prenos datotek z delovnih vozlišč
- scontrol: administracija, spremljanje in konfiguracijo gruče
- sacctmgr upravljanje z bazo, podatki o gručah, uporabnikih, računih in particijah
Za vse naštete funkcije SLURM implementira dokumentiran API, tako da jih je mogoče klicati programatično.
Gruče in viri
SLURM vire v gruči razume kot vozlišča (nodes), ki so enota računske kapacitete, particije (partitions), ki so logične množice vozliš, posle ali alokacije (jobs, allocations), ki so nabor dodeljenih virov posameznemu uporabniku za določen čas, ter korake (job steps), ki so posamezne naloge, zaporedne ali vzporedne, kakor se izvajajo v okviru posamezne alokacije ali posla.
Particije so logične enote, ki so hkrati vrste za izvajanje nalog, a tudi enote, na katerih je mogoče nastavljati parametre ter omejitve, kakor so: * omejiteve velikosti alokacije/posla/naloge/koraka * časovne omejitve izvajanja * dovoljenja in prioritete za uporabnike in skupine * pravila za obravnavo prioritet * dostopnost virov v particijah (vozlišča, procesorji, pomnilnik, vektorske enote GPGPU ipd.)
Alokacija je abstrakten koncept, ki velja so posamezen posel (npr. skripto sbatch) in vse paralelne ali zaporedne naloge oz.\ korake v njem. Alokacija torej lahko podpira en sam program, ki porablja vse vire, vrsto hkrati vzporedno zagnanih programov, ob različnih trenutkih zagnane programe ali poljubno kompleksne kombinacije.
Alokacija je lahko interaktivna - dejansko se na enem od vozlišč zažene naloga oz. korak bash, uprabnik pa preko internega kanala komunicira z ukazno lupino, ki teče v alokaciji. srun tedaj omogoča interaktivno upravljanje z viri v alokaciji in testiranje. Ker SLURM upravlja z viri v alokacijah, bodo tako oddane zahteve izvedene vzporedno, dokler bodo to dodeljene kapacitete dopuščale, potem pa bodo naslednji koraki čakali v vrsti, da se kapacitete sprostijo.
Pošiljanje nalog preko sistema SLURM
Uporaba treh ukazov:
- sbatch se uporablja za zagon izvršljivih datotek, ki se bodo izvedle, ko pridejo na vrsto. Izvršljiva datoteka lahko vsebuje več srun ukazov za zagon poslov. Pri oddaji posla preko sbatch, dobimo ID/številko naloge v vrsti.
- salloc se uporablja za dodeljevanje virov za izvajanje posla v realnem času.
Praviloma se uporabi, da se ustvari lupina, ki se nato uporabi za izvedbo zagona posla s srun.
- srun se uporablja za izvedbo nalog v realnem času. Posel lahko vsebuje več nalog oz. korakov (ang.: steps), ki se izvedejo zaporedno ali vzporedno, na neodvisnih ali skupnih virih v dodeljevanju posla vozlišču.
Navadno se srun uporablja v kombinaciji s sbatch ali salloc, torej v okviru obstoječe alokacije (izbranih virov).
Če ste že vajeni sistema za uporavljanje vrst, si lahko pomagate s primerjava sistema SLURM z drugimi upravljavci vrst, ki vključuje analogne ukaze, koncepte in spremejivke: https://slurm.schedmd.com/rosetta.pdf
srun - Zagon paralelnih poslov s sistemom SLURM
SLURM srun pogosto enačimo z mpirun za posle tipa MPI. Če ne gre za paralelne naloge tega tipa, je bolje uporabiti sbatch. Primer uporabe:
Primer 1: srun hostname Primer 2: srun -n 4 hostname -n ali --ntasks: število nalog v poslu
Primer 3: zagon skripte v sliki singularity BATCH --job-name=test
- SBATCH --output=res.txt
- SBATCH --ntasks=1
- SBATCH --time=10:00
- SBATCH --mem-per-cpu=100
singularity run --nv ime_slike.sif ime_skripte.py
sbatch - Pošiljanje izvršljive datoteke preko sistema SLURM
Osnovni primer, skripte, ki juh poženemo z ukazom
sbatch test.sh
Vsebina datoteke test.sh:
#!/bin/bash # #SBATCH --job-name=test #SBATCH --output=res.txt # #SBATCH --ntasks=1 #SBATCH --time=10:00 #SBATCH --mem-per-cpu=100 srun hostname srun sleep 60
Primer skripte sbatch. Privzeti in trenutno edini nastavljen račun (account) je clarin.
#!/bin/bash #SBATCH --job-name=testpy #SBATCH --output=res-testpy.txt #SBATCH --account="clarin" #SBATCH --partition=compute #SBATCH --nodes=1 #SBATCH --mem=100M #SBATCH --time=00:01:00 #SBATCH --job-name=helloworld #SBATCH --cpus-per-task=1 #SBATCH --gres=gpu:0 python3 helloworld.py
Primer 3: zagon skripte znotraj slike singularity
Vsebina datoteke test.sh:
#!/bin/bash # #SBATCH --job-name=test #SBATCH --output=res.txt # #SBATCH --ntasks=1 #SBATCH --time=10:00 #SBATCH --mem-per-cpu=100 singularity run --nv ime_slike.sif python3 skripta.py
Uporaba GPU
Za uporabo na primer štirih GPU-jev se uporabi: sbatch --gres=gpu:4
CUDA je nameščena na sistemu in uporablja prevajalnik /usr/bin/cuda-gcc
Osnovni pregled vrste
squeue
Programska oprema
Singularity
Singularity zagotavlja dobro kompatibilnost in enostaven prehod iz docker slik. Singularity sliko lahko zgradimo iz definicijske datoteke ali iz obstoječe slike (singularity ali docker).
Gradnja iz Docker z uporabo metode pull
singularity build ime_image.sif docker://nvidia/cuda:10.2-runtime-ubuntu16.04
Gradnja iz definicijske datoteke
Dokumentacija singularity o definicijskih datotekah: https://sylabs.io/guides/3.5/user-guide/definition_files.html Primer definicijske datoteke ime_recepta.def:
BootStrap: docker From: nvidia/cuda:10.2-runtime-ubuntu16.04 %post apt-get update && apt-get install -y vim chmod 755 /root
Nato zgradimo sliko z ukazom:
singularity build --fakeroot ime_slike.sif ime_recepta.def
==== Gradnja singularity slike iz docker slike na PC-ju uporabnika
singularity build ime_slike.sif docker-daemon://ime:version
Zagon slike
singularity run --nv ime_slike.sif
Zagon vsebnika
singularity instance.start --nv ime_slike.sif ime_vsebnika
Pregled maksimalnih nastavljenih vrednosti
scontrol show partitions
Viri: