Glavna stran

Navodila za uporabo sistema xantipa

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. Arch.gif

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

Entities.gif

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

  1. SBATCH --output=res.txt
  2. SBATCH --ntasks=1
  3. SBATCH --time=10:00
  4. 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:

  1. https://devblogs.nvidia.com/how-to-run-ngc-deep-learning-containers-with-singularity/
  2. https://docs.nvidia.com/ngc/ngc-getting-started-guide/index.html