„Budapest2 klaszter” változatai közötti eltérés
146. sor: | 146. sor: | ||
slicenses | slicenses | ||
</code> | </code> | ||
+ | |||
+ | ==== Karbantartás ellenőrzése ==== | ||
+ | A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást: | ||
+ | <code> | ||
+ | sreservations | ||
+ | </code> | ||
+ | |||
+ | ==== Összesített felhasználás ==== | ||
+ | Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le: | ||
+ | <code> | ||
+ | susage | ||
+ | </code> | ||
+ | |||
+ | ==== Teljes fogyasztás ==== | ||
+ | Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni: | ||
+ | <code> | ||
+ | sreport -t Hours Cluster AccountUtilizationByUser Accounts=ACCOUNT Start=2015-01-01 | ||
+ | </code> | ||
+ | |||
+ | === Feladatok futtatása === | ||
+ | Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a <code>#SBATCH</code> direktívával kell megadni. | ||
+ | |||
+ | ==== Kötelező paraméterek ==== | ||
+ | A következő paramétereket minden esetben meg kell adni: | ||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | #SBATCH -A ACCOUNT | ||
+ | #SBATCH --job-name=NAME | ||
+ | #SBATCH --time=TIME | ||
+ | #SBTACH --gres=gpu:N | ||
+ | </pre> | ||
+ | ahol az <code>ACCOUNT</code> a terhelendő számla neve (elérhető számláinkről az <code>sbalance</code> parancs ad felvilágosítást), a <code>NAME</code> a job rövid neve, a <code>TIME</code> pedig a maximális walltime idő (<code>DD-HH:MM:SS</code>). A következő időformátumok használhatók: | ||
+ | "minutes", "minutes:seconds", "hours:minutes:seconds", "days-hours", "days-hours:minutes" és "days-hours:minutes:seconds". | ||
+ | |||
+ | Az <code>N</code> a GPU-k/node számát adja meg, ami 1 és 2 lehet maximum. | ||
+ | |||
+ | A jobok feladását a következő parancs végzi: | ||
+ | <code> | ||
+ | sbatch slurm.sh | ||
+ | </code> | ||
+ | |||
+ | Sikeres feladás esetén a következő kimenetet kapjuk: | ||
+ | <pre> | ||
+ | Submitted batch job JOBID | ||
+ | </pre> | ||
+ | ahol a <code>JOBID</code> a feladat egyedi azonosítószáma. | ||
+ | |||
+ | A feladat leállítását a következő parancs végzi: | ||
+ | <code> | ||
+ | scancel JOBID | ||
+ | </code> | ||
+ | |||
+ | ==== Nem újrainduló jobok ==== | ||
+ | Nem újrainduló jobokhoz a következő direktívát kell használni: | ||
+ | <pre> | ||
+ | #SBATCH --no-requeue | ||
+ | </pre> | ||
+ | |||
+ | ==== Feladat sorok ==== | ||
+ | A szupergépeken két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a <code>test</code> sor és a <code>prod</code> sor. Utóbbi az éles számolásokra való, előbbi fejlesztés és tesztelés céljára használható. A teszt sorban összesen 1 node-ot, maximum fél órára lehet lefoglalni. Az alapértelmezett sor a <code>prod</code>. A teszt partíciót a következő direktívával lehet kiválasztani: | ||
+ | <pre> | ||
+ | #SBATCH --partition=test | ||
+ | </pre> | ||
+ | A teszt partícióban 1 GPU található (<code>--gres=gpu:1</code>) | ||
+ | |||
+ | ==== A szolgáltatás minősége (QOS) ==== | ||
+ | A szolgáltatást alapértelmezett minősége <code>normal</code>, azaz nem megszakítható a futás. | ||
+ | |||
+ | ===== Magas prioritás ===== | ||
+ | A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat. | ||
+ | <pre> | ||
+ | #SBATCH --qos=fast | ||
+ | </pre> | ||
+ | |||
+ | ===== Alacsony prioritás ===== | ||
+ | Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni. | ||
+ | <pre> | ||
+ | #SBATCH --qos=lowpri | ||
+ | </pre> | ||
+ | |||
+ | ==== Memória foglalás ==== | ||
+ | Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk: | ||
+ | <pre> | ||
+ | #SBATCH --mem-per-cpu=MEMORY | ||
+ | </pre> | ||
+ | ahol <code>MEMORY</code> MB egységben van megadva. Budapesten és Szegeden a maximális memória/core 3000 MB. | ||
+ | |||
+ | ==== Email értesítés ==== | ||
+ | Levél küldése job állapotának változásakor (elindulás,leállás,hiba): | ||
+ | <pre> | ||
+ | #SBATCH --mail-type=ALL | ||
+ | #SBATCH --mail-user=EMAIL | ||
+ | </pre> | ||
+ | ahol az <code>EMAIL</code> az értesítendő emial cím. | ||
+ | |||
+ | ==== Tömbfeladatok (arrayjob) ==== | ||
+ | Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a <code>SLURM_ARRAY_TASK_ID</code> környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a <code>slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out</code> fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. [http://slurm.schedmd.com/job_array.html Bővebb ismertető] | ||
+ | |||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | #SBATCH -A ACCOUNT | ||
+ | |||
+ | #SBATCH --job-name=array | ||
+ | #SBATCH --time=24:00:00 | ||
+ | #SBATCH --array=1-96 | ||
+ | srun envtest.sh | ||
+ | </pre> | ||
+ | |||
+ | ==== Soros (serial) jobok ==== | ||
+ | Több soros job futtatását a tömbfeladatokhoz hasonlóan kell indítani. | ||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | |||
+ | #SBATCH -A ACCOUNT | ||
+ | #SBATCH --job-name=serial | ||
+ | #SBATCH --time=24:30:00 | ||
+ | #SBATCH -n 3 | ||
+ | #SBATCH --partition=test | ||
+ | srun -n 1 program input1 & | ||
+ | srun -n 1 program input2 & | ||
+ | srun -n 1 program input3 | ||
+ | wait | ||
+ | </pre> | ||
+ | |||
+ | ==== OpenMPI feladatok ==== | ||
+ | MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (<code>#SBATCH --ntasks-per-node=</code>). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az <code>mpirun</code> paranccsal kell indítani. | ||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | #SBATCH -A ACCOUNT | ||
+ | #SBATCH --job-name=mpi | ||
+ | #SBATCH -N 2 | ||
+ | #SBATCH --ntasks-per-node=20 | ||
+ | #SBATCH --time=12:00:00 | ||
+ | mpirun PROGRAM | ||
+ | </pre> |
A lap 2015. május 20., 12:09-kori változata
Klaszter | Budapest2 |
Típus | HP |
core / node | 10 × 2 Xeon E5-2680v2 2.80GHz |
GPU / node | 2 × Nvidia K20 |
CN szám | 14 |
Tartalomjegyzék
[elrejtés]Belépés
ssh USER@login.budapest2.hpc.niif.hu
Nem alapértelmezett kulcs használata esetén a -i KULCS
kapcsolóval megadása szükséges (SSH és SCP parancsok).
Fájlok másolása SCP-vel
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:
Fel: scp FILE USER@login.budapest2.hpc.niif.hu:FILE Le : scp USER@login.budapest2.hpc.niif.hu:FILE FILE
Adatszinkronizáció
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni
Fel: rsync -a -e ssh DIRECTORY USER@login.budapest2.hpc.niif.hu:/home/USER Le : rsync -a -e ssh USER@login.budapest2.hpc.niif.hu:/home/USER/DIRECTORY
A törölt fájlok szinkronizálásához a --delete
opciót kell megadni.
Felhasználói felület
rövid CWD
|
BUDAPEST2[login] ~ (0)$
| | |
HPC állomás | |
rövid gép név |
előző parancs exit kódja
Modul környezet
Az elérhető modulok listáját a következő paranccsal kapjuk meg:
module avail
a már betöltött modulok listáját:
module list
Alkalmazást a következő paranccsal tölthetünk be:
module load APP
A NIIF által beállított környezeti változókat nce
parancs listázza ki.
Adatok megosztása projekt tagok számára
Fájlok ill. könyvtárak megosztásához ACL-eket kell beállítani. A HOME könyvtárat más felhasználó (OTHER) számára olvashatóvá, így tehetjük
setfacl -m u:OTHER:rx $HOME
Addott könyvtárat (DIRECTORY) írahtóvá:
setfacl -m u:OTHER:rxw $HOME/DIRECTORY
A kiterjesztett jogokat a következő paranccsal kérhetjük le:
getfacl $HOME/DIRECTORY
Közös home könyvtár használata
A szuperszámítógépek login gépeit összekötő közös fájlrendszer a következő könyvtár alatt található:
/mnt/fhgfs/home/$USER
Biztonsági mentést a közös könyvtárba a következő paranccsal tudunk végezni:
rsync -avuP --delete $HOME/DIRECTORY /mnt/fhgfs/home/$USER
SLURM ütemező használata
A szupergépen CPU óra (gépidő) alapú ütemezés működik. A felhasználóhoz tartozó Slurm projektek (Account) állapotáraól a következő parancs ad információt:
sbalance
A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyeik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még alérhető (Available) gépidőről ad tájékoztatást.
Scheduler Account Balance ---------- ----------- + ---------------- ----------- + ------------- ----------- User Usage | Account Usage | Account Limit Available (CPU hrs) ---------- ----------- + ---------------- ----------- + ------------- ----------- bob * 7 | foobar 7 | 1,000 993 alice 0 | foobar 7 | 1,000 993
A gépidő becslése
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:
sestimate -N NODES -t WALLTIME
ahol a NODES
a lefoglalni kívánt node-ok száma, a WALLTIME
pedig a futás maximális ideje.
Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az sacct
paranccsal is ellenőrizni.
Állapotinformációk
Az ütemezőben lévő jobokról az squeue
, a klaszter általános állapotáról az sinfo
parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:
scontrol show job JOBID
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:
sacct -l -j JOBID
A felhasznált memóriáról a következő parancs ad tájékoztatást:
smemory JOBID
A lemezhasználatról pedig a
sdisk JOBID
Slurm figyelmeztető üzenetek
Resources/AssociationResourceLimit - Erőforrásra vár AssociationJobLimit/QOSJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva Piority - Alacsony prioritás miatt várakozik
Az utóbbi esetben, csőkkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.
Licenszek ellenőrzése
Az elérhető és éppen használt licenszekről a következő parancs ad információt:
slicenses
Karbantartás ellenőrzése
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:
sreservations
Összesített felhasználás
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:
susage
Teljes fogyasztás
Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:
sreport -t Hours Cluster AccountUtilizationByUser Accounts=ACCOUNT Start=2015-01-01
Feladatok futtatása
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a #SBATCH
direktívával kell megadni.
Kötelező paraméterek
A következő paramétereket minden esetben meg kell adni:
#!/bin/bash #SBATCH -A ACCOUNT #SBATCH --job-name=NAME #SBATCH --time=TIME #SBTACH --gres=gpu:N
ahol az ACCOUNT
a terhelendő számla neve (elérhető számláinkről az sbalance
parancs ad felvilágosítást), a NAME
a job rövid neve, a TIME
pedig a maximális walltime idő (DD-HH:MM:SS
). A következő időformátumok használhatók:
"minutes", "minutes:seconds", "hours:minutes:seconds", "days-hours", "days-hours:minutes" és "days-hours:minutes:seconds".
Az N
a GPU-k/node számát adja meg, ami 1 és 2 lehet maximum.
A jobok feladását a következő parancs végzi:
sbatch slurm.sh
Sikeres feladás esetén a következő kimenetet kapjuk:
Submitted batch job JOBID
ahol a JOBID
a feladat egyedi azonosítószáma.
A feladat leállítását a következő parancs végzi:
scancel JOBID
Nem újrainduló jobok
Nem újrainduló jobokhoz a következő direktívát kell használni:
#SBATCH --no-requeue
Feladat sorok
A szupergépeken két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a test
sor és a prod
sor. Utóbbi az éles számolásokra való, előbbi fejlesztés és tesztelés céljára használható. A teszt sorban összesen 1 node-ot, maximum fél órára lehet lefoglalni. Az alapértelmezett sor a prod
. A teszt partíciót a következő direktívával lehet kiválasztani:
#SBATCH --partition=test
A teszt partícióban 1 GPU található (--gres=gpu:1
)
A szolgáltatás minősége (QOS)
A szolgáltatást alapértelmezett minősége normal
, azaz nem megszakítható a futás.
Magas prioritás
A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.
#SBATCH --qos=fast
Alacsony prioritás
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.
#SBATCH --qos=lowpri
Memória foglalás
Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:
#SBATCH --mem-per-cpu=MEMORY
ahol MEMORY
MB egységben van megadva. Budapesten és Szegeden a maximális memória/core 3000 MB.
Email értesítés
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):
#SBATCH --mail-type=ALL #SBATCH --mail-user=EMAIL
ahol az EMAIL
az értesítendő emial cím.
Tömbfeladatok (arrayjob)
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a SLURM_ARRAY_TASK_ID
környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out
fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. Bővebb ismertető
#!/bin/bash #SBATCH -A ACCOUNT #SBATCH --job-name=array #SBATCH --time=24:00:00 #SBATCH --array=1-96 srun envtest.sh
Soros (serial) jobok
Több soros job futtatását a tömbfeladatokhoz hasonlóan kell indítani.
#!/bin/bash #SBATCH -A ACCOUNT #SBATCH --job-name=serial #SBATCH --time=24:30:00 #SBATCH -n 3 #SBATCH --partition=test srun -n 1 program input1 & srun -n 1 program input2 & srun -n 1 program input3 wait
OpenMPI feladatok
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (#SBATCH --ntasks-per-node=
). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az mpirun
paranccsal kell indítani.
#!/bin/bash #SBATCH -A ACCOUNT #SBATCH --job-name=mpi #SBATCH -N 2 #SBATCH --ntasks-per-node=20 #SBATCH --time=12:00:00 mpirun PROGRAM