Darbs ar klasteri

Darbs ar klasteri iedalāms 4 etapos.

  1. Pieslēgšanās klasterim
  2. Uzdevuma (skripta) ievietošana rindā
  3. Uzdevums izpilde un sekošanai tai.
  4. Rezultātu saņemšana

Uzdevums – no angļu job/task. Simulācija vai programmas kods, kuru lietotājs izpilda klasterī.

Lietotāja darba apgabals

Katram lietotājam ir izveidots darba apgabals, kur var glabāt ar uzdevumiem saistītos failus. Pieslēdzoties piekļuves servera komandrindai, automātiski nonāksiet savā darba direktorijā:

/home/username

Failu sistēma starp klastera mezgliem un piekļuves serveri ir koplietota (NFS – Network File System), tāpēc nav nepieciešama failu kopēšana uz un no izpildes mezgla un starp mezgliem. Tas nozīmē – ja iekopēsiet failu piekļuves serverī, tas būs pieejams arī visos citos mezglos. Tāpat – visas izmaiņas, ko veiksiet failiem piekļuves serverī, atainosies arī mezglos.

Savā darba apgabalā lietotājs var arī instalēt/kompilēt klasterī izmantojamu lietojumprogrammatūru, ja instalācijas process neprasa administratora (root) tiesības.

Vides sagatavošana (moduļi)

Lai sagatavotu klastera vidi dažādu lietojumprogrammu, kompilatoru, bibliotēku izmantošanai, lietotāji var izmantot moduļus (Environment Modules). Moduli ielādē ar komandu:

module load module_name

Komanda uzstāda ceļu (PATH) uz attiecīgās programmatūras direktoriju un citus nepieciešamos vides mainīgos. Lai iegūtu visu moduļu (lietojumprogrammatūru un rīku) sarakstu, izpildiet:

module avail

Linux distributīvā iekļautajiem rīkiem parasti moduļu ielādē nav nepieciešama.

Modulim jābūt ielādētam uz tā mezgla, kur tiek startēta programma. Ja uzdevums tiek izpildīts uz skaitļošanas mezgla/iem, tad modulis jāielādē arī katrā no tiem.

Lai atiestatītu vidi:

module unload module_name

Vairāk par moduļu lietošanu: http://modules.sourceforge.net/

Kur izpildās uzdevums?

Darbā ar klasteri parasti iesaistīti 3 komponenti:

  • lietotāja dators
  • klastera piekļuves serveris (ui-1.hpc.rtu.lv)
  • skaitļošanas mezgls (piem., wn02)

Pieslēdzoties klastera piekļuves serverim un izpildot komandu termināli (arī atverot lietojumprogrammas GUI), vēl nenodrošina, ka uzdevums automātiski izpildīsies uz skaitļošanas mezgliem.  Visdrīzāk tas noslogos piekļuves serveri.

Uzdevuma ievietošana rindā

Pirms uzdevums nonāk skaitļošanas mezglā un sāk izpildīties, tas tiek ievietots virtuālā rindā. Rinda organizē resursu sadali daudzlietotāju sistēmā, kur uzdevumu skaits un prasības var pārsniegt brīvo resursu  (CPU, atmiņas) apjomu. Atbrīvojoties resursiem, parasti nākamais izpildīsies tas uzdevums, kas rindā gaidījis visilgāk. Lietotājam nav jāseko, kad resursi atbrīvosies – uzdevuma pārvietošanās rindā un izpildes sākšana notiek automātiski. Ja rindas nav (ir brīvi resursi), tad uzdevums sāk izpildīties uzreiz. RTU klasterī ir vairākas rindas, kas atšķiras pēc uzdevumu izpildes ilguma un pieejamā resursu apjoma:

  • batch
  • fast
  • long

Detalizēts rindu apraksts sadaļā “Uzdevumu rindas“.

Vienkāršs uzdevums

Uzdevuma ievietošana rindā notiek ar speciāliem Torque/Moab klastera klienta rīkiem (izstrādātāja dokumentācija http://docs.adaptivecomputing.com/torque/6-1-2/adminGuide/torque.htm

Komanda vienkārša uzdevuma (skripta) ievietošanai rindā:

qsub test.sh

test.sh ir bash valodas (Linux komandrindas) skripts, kurā lietotājs ieraksta secīgi izpildāmās komandas, uzdevumam nonākot skaitļošanas mezglā. Tas nodrošina pakešuzdevuma (batch) izpildi bez lietotāja līdzdalības. Skripts var saturēt, piemēram, šādu komandu:

#!/bin/bash
echo “Hello world from node `/bin/hostname`”

Komanda izdrukā skaitļošanas mezgla vārdu. Varat izpildīt to arī lokāli.

Skripta paraugs, lai skaitļošanas mezglā palaistu jūsu programmu ar parametriem:

#!/bin/bash

./myprogram 12 3

Ja nepieciešams, pirms programmas izpildes ielādējiet attiecīgo moduli (skat. sadaļā “Vides sagatavošana”).

Lietojumprogrammu palaišanas skriptu piemērus un citu noderīgu informāciju atradīsiet direktorijā:

/opt/exp_soft/user_info
Interaktīvs uzdevums

Alternatīvi pakešuzdevumam var izmantot interaktīvu uzdevumu veidu. Interaktīvais režīms ērts uzdevumu testēšanai un atkļūdošanai, kā arī, ja izmantojiet grafiskus rīkus. Sākt interaktīvu uzdevumu:

qsub –I

Automātiski tiks atvērts attālināts terminālis uz skaitļošanas mezgla, kur varēsiet izpildīt nepieciešamās komandas, rakstot tās komandrindā. Komanda līdzvērtīga “ssh wn[xx]” ar atšķirību, ka resursi tiks rezervēti un neradīsies konflikti ar citiem lietotājiem.

Ja interaktīvā režīmā nepieciešams atvērtu grafisku logu, pievienojiet –X parametru:

qsub –X –I

Par grafiskās sesijas pārsūtīšanu vairāk lasiet sadaļā “Grafiskie rīki“.

Uzdevuma parametri un prasības

Jūs variet norādīt uzdevuma parametrus un prasības, piemērām, nosaukumu, kuru rindu izmantot vai cik laika būs nepieciešams uzdevuma izpildei. Šo informāciju rindu sistēma izmantos, lai atrastu uzdevumam piemērotākos resursus.

qsub –N my_job –q fast –l walltime=00:00:30 test.sh

Uzdevuma prasības var pievienot palaišanas skripta sākumā:

Komentārs. Parametrus var norādīt vienlaicīgi gan komandrindā, gan skriptā, tomēr, dublēšanās gadījumā, komandrindas parametri tiks ņemti vērā ar augstāku prioritāti.

Kā pieprasīt konkrētus skaitļošanas resursus?  Definējiet prasības ar “qsub –l”, kā parametrus norādot:

  • mezglu un kodolu skaitu
-l nodes=1:ppn=12
  • konkrētu mezglu (var nākties ilgāk gaidīt rindā)
-l nodes=wn44:ppn=12
  • grafisko procesoru (GPU) skaitu
-l nodes=1:ppn=12:gpus=2
  • nepieciešamo atmiņas apjomu
-l nodes=1:ppn=12:pmem=1g 

atmiņas apjoms uz katru kodolu (procesu)

-l nodes=1:ppn=12:mem=12g

kopējais uzdevuma atmiņas apjoms

  • pieprasīt skaitļošanas mezglus ar noteiktām iezīmēm (features). Iezīmes parasti tiek izmantotas klasteros ar dažādiem mezgliem (nehomogēnos)
-l nodes=1:ppn=12:mem=12g,features=centos7

Mezglu nosaukumus (hostnames), parametrus un iezīmes variet noskaidrot sadaļā “Mezglu saraksts“.

Vairāk par qsub komandu un parametriem varat iegūt informāciju, izpildot:

man qsub
Paralēls (MPI) uzdevums

Uzdevums tiek sadalīts uz vairākiem kodoliem vai klastera mezgliem, izmantojot Message Passing Interface (MPI) protokolu.

Ievietot rindā paralēlu uzdevumu, kam izpildei nepieciešami 24 kodoli (2 mezgli × 12 kodoli katrā mezglā):

qsub -l nodes=2:ppn=12 run_mpi.sh

vai nenorādot konkrētu mezglu skaitu

qsub -l procs=24 run_mpi.sh

run_mpi.sh skripta piemērs:

MPI piemērus atradīsiet klastera direktorijā: /opt/exp_soft/users_info/mpi

Uzdevuma mainīgie

Uzdevuma skriptā parocīgi izmantot mainīgos, kuri uzstādās automātiski uzdevumam nonākot uz skaitļošanas mezgla.

$PBS_O_WORKDIR
$PBS_NODEFILE
$PBS_GPUFILE	
$PBS_NP
$ PBS_JOBID

Piemēram, lai pārietu uz direktoriju, no kuras uzdevums tika ievietots rindā:

cd $PBS_O_WORKDIR

Lai iegūtu sarastu ar visiem mainīgajiem, sāciet interaktīvu uzdevumu (qsub –I) un izpildiet komandu:

env | grep PBS
Uzdevuma pārtraukšana

Izpildē esošu vai rindā gaidošu uzdevumu patrauc ar komandu:

qdel job_id

vai

canceljob job_id

job_id – uzdevumu identifikators.

Pārtraukt visus lietotāja uzdevumus:

qdel ‘all’
Rindas, mezglu un uzdevumu monitorings

Komanda, lai pārbaudītu rindā ievietoto uzdevumu izpildes gaitu:

qstat

R – running, C – completed, Q – queued

vai lai redzētu kopējo uzdevumu rindu (par visiem lietotājiem):

showq

Komanda, lai noskaidrotu pieejamos skaitļošanas resursus:

showbf

vai detalizētākai informācijai:

pbsnodes

Lai iegūtu detalizētu informāciju par uzdevuma izpildi, kā arī iemesliem uzdevuma aizturēšanai rindā:

checkjob job_id -vvv
Uzdevuma izpildes efektivitāte

CPU izmantošanas efektivitāte izpildē esošiem uzdevumiem.

showq –r

skat. kolonu EFFIC

Pārbaudīt  uzdevuma radīto sistēmas noslodzi un efektivitāti skaitļošanas mezglā.

1. Noskaidrot, kurā mezglā uzdevums izpildās

qstat -n job_id

2. Attālināti pieslēgties attiecīgajam mezglam, piemēram, node10

ssh wn01

3. Izmantot Linux rīkus monitoringam:

htop
nvidia-smi
iostat 
nfsstat
  • CPU izmantošanas efektivitātei ar komandu htop
  • Sekot GPU izmantošanas efektivitātei