HPC, Openstack, Storage, Linux Eksperter.

SGE & # 8211; Parallelt miljo (PE)

Parallelt miljo (PE) er det sentrale begrepet SGE og representerer et sett med innstillinger som forteller Grid Engine hvordan man starter, stopper og styrer jobber som kjores av koen av koer som bruker denne PE-en. Det stiller ogsa noen parametere for parallelle meldingsrammer som MPI, som brukes av parallelle jobber.

Vis meg listen over alle PE opprettet qconf -spl Det vanlige syntakset gjelder.

Parallelt miljo er den definerende egenskapen til hver ko. Ma spesifiseres riktig for ko til jobb. Den er spesifisert i pe_list attributt som kan inneholde en enkelt PE eller en liste med PEer. For eksempel:

Hvert parallelt miljo bestemmer en klasse av koer som bruker den og har flere viktige attributter:

slots & # 8211; Maksimalt antall jobbspor som det parallelle miljoet har lov til a oppta samtidig allocation_rule & # 8221; – & gt; se mannens side. $ pe_slots vil allokere alle spor for den jobben pa en enkelt vert. Andre regler stotter a planlegge jobben pa flere maskiner. control_slaves – & gt; nar den er satt til & # 8220; true & # 8221; Grid Engine bryr seg om a starte slaven MPI taks. I dette tilfellet skal MPI kompileres med alternativet -with_sge job_is_first_task Funksjonen job_is_first_task kan settes til SANT eller FALSK. En verdi pa SANT indikerer at jobbskriptet Sun Grid Engine allerede inneholder en av oppgavene til den parallelle applikasjonen (antall spor som er reservert for jobben, er antall spor som er forespurt med -pe-bryteren), mens en verdi av FALSE indikerer at jobbskriptet (og dets barnprosesser) ikke er en del av parallellprogrammet (antall spor som er reservert for jobben, er det antall spor som er forespurt med -pe-bryteren + 1). Hvis wallclock-regnskapet brukes (execd_params ACCT_RESERVED_USAGE og / eller SHARETREE_RESERVED_USAGE satt til TRUE) og control_slaves er satt til FALSE, parameteren job_is_first_task pavirker regnskapet for jobben: En verdi av TRUE betyr at regnskapet for cpu og forespurt minne blir multiplisert med antall spor som er forespurt med -pe-bryteren, hvis job_is_first_task er satt til FALSE, blir regnskapsinformasjonen multiplisert med antall spor + 1. accounting_summary Denne parameteren kontrolleres bare hvis control_slaves (se ovenfor) er satt til SANT og dermed Sun Grid Engine er skaperen av slaveoppgaver av en parallell applikasjon via sge_execd (8) og sge_shepherd (8). I dette tilfellet er regnskapsinformasjon tilgjengelig for hver enkelt slaveoppgave startet av Sun Grid Engine. Parameteren Accounting_summary kan settes til SANT eller FALSK. En verdi av SANT indikerer at kun en enkelt regnskapsfortegnelse er skrevet til regnskapsfilen (5), som inneholder regnskapssammendrag av hele jobben, inkludert alle slaveoppgaver, mens en verdi av FALSE indikerer at en individuell regnskap (5) er registrert for hver slaveoppgave, sa vel som for masteroppgaven.

Merk: Nar du kjorer tett integrerte jobber med SHARETREE_RESERVED_USAGE, og med a ha accounting_summary aktivert i det parallelle miljoet, vil reservert bruk kun bli rapportert av hovedoppgaven til parallelljobben. Ingen per parallell oppgave bruk poster blir sendt fra execd til qmaster, som kan redusere belastningen pa qmaster betydelig nar du kjorer store tett integrerte parallelle jobber.

Noen viktige detaljer er godt forklart i blogginnlegget Konfigurere et nytt parallelt miljo.

23. mars 2007 | DanT & # 8217; s Grid Blog.

Av templedf 23. mars 2007.

Siden dette ser ut til a v re et vanlig emne pa brukerens adresseliste, er dette en rask guide til a sette opp et parallelt miljo pa Grid Engine:

Forst lager / lan / stjele oppstart og nedleggingsskript for det parallelle miljoet du bruker. Du kan finne MPI- og PVM-skript i henholdsvis $ SGE_ROOT / mpi og $ SGE_ROOT / pvm katalogene. Hvis du ikke finner skript for ditt parallelle miljo, ma du opprette dem. Oppstartsskriptet ma forberede det parallelle miljoet for bruk. Med de fleste MPI-implementeringer, er det bare et sporsmal om a lage et & # 8220; -maskiner & # 8221; fil som viser maskinene som skal kjore parallelljobben. Avsluttingsskriptet ma ryddes opp etter parallelljobbets utforelse. MPI-shutdown-skriptet kan bare slette eller gi nytt navn til & # 8220; maskiner & # 8221; fil. Deretter ma du fortelle Grid Engine om ditt parallelle miljo. Du kan gjore det interaktivt med qmon eller qconf -ap & lt; pe_name & gt; eller du kan skrive dataene til en fil og bruk qconf -Ap & lt; filen_name & gt; .For et eksempel pa hvordan en slik fil vil se ut, se $ SGE_ROOT / mpi / mpi.template eller $ SGE_ROOT / pvm / pvm.template.

La oss se pa hva konfigurasjonen av parallell miljo inneholder.

pe_name & # 8211; navnet som det parallelle miljoet vil bli kjent med Grid Engine slots & # 8211; maksimalt antall jobbsessorer som det parallelle miljoet far lov til a okkupere pa en gang users_lists & # 8211; en ACL som angir brukerne som har lov til a bruke det parallelle miljoet. Hvis den er satt til NONE, betyr det at en bruker kan bruke den xusers_list & # 8211; en ACL som spesifiserer brukerne som ikke har lov til a bruke det parallelle miljoet. Brukere i bade user_list og xusers_list har ikke lov til a bruke det parallelle miljoet start_proc_args & # 8211; banen til oppstartsskriptet for det parallelle miljoet etterfulgt av eventuelle nodvendige argumenter. Grid Engine gir noen inline-variabler som du kan bruke som argumenter: $ pe_hostfile & # 8211; banen til en fil skrevet av Grid Engine som inneholder informasjon om hvordan og hvor den parallelle jobben skal kjores $ host & # 8211; verten der det parallelle miljoet blir startet $ job_owner & # 8211; navnet pa brukeren som eier den parallelle jobben $ job_id & # 8211; ID for den parallelle jobben $ job_name & # 8211; navnet pa den parallelle jobben $ pe & # 8211; navnet pa det parallelle miljoet $ pe_slots & # 8211; Antall jobtspor som er tilordnet jobben $ ko & # 8211; navnet pa koen der parallelljobben kjorer.

Verdien av denne innstillingen er kommandoen som vil bli kjort for a starte det parallelle miljoet for hver parallell jobb. stop_proc_args & # 8211; banen til nedleggingsskriptet for det parallelle miljoet etterfulgt av eventuelle nodvendige argumenter. De samme inline-variablene er tilgjengelige som med start_proc_args. allocation_rule & # 8211; Denne innstillingen styrer hvordan jobbspor blir tildelt verter. Det kan ha fire mulige verdier: et tall & # 8211; Hvis det er satt til et nummer, vil Grid Engine tilordne at mange spor til parallelljobben pa hver vert for det tildelte antall jobbsperioder er oppfylt. Hvis du for eksempel angir dette attributtet til 1, betyr det at jobben far en enkelt jobbspor pa hver vert der den er tildelt. Grid Engine vil ikke tildele jobben flere jobbspor enn antall tildelte verter multiplisert med dette attributtets verdi. $ fill_up & # 8211; bruk alle jobbsporene pa en gitt vert for du flytter til neste vert $ round_robin & # 8211; velg ett spor fra hver vert i en runde-robin mote til alle jobbsorter er tildelt. Denne innstillingen kan resultere i mer enn en jobbspor per vert. $ pe_slots & # 8211; plasser alle jobbsporene pa en enkelt maskin. Grid Engine vil bare planlegge en slik jobb til en maskin som kan v re vert for det maksimale antall spor som jobben krever. (Se nedenfor.) Control_slaves & # 8211; Denne innstillingen forteller Grid Engine om parallell miljointegrasjon er & # 8220; tight & # 8221; eller & # 8220; los & # 8221 ;. Se ditt parallelle miljos dokumentasjon for mer informasjon. job_is_first_task & # 8211; Denne innstillingen forteller Grid Engine om den forste oppgaven til parallelljobben egentlig er en jobboppgave, eller om den bare er der for a sla av resten av jobbene. Denne innstillingen er ogsa bestemt av din parallelle miljointegrasjon. urgency_slots & # 8211; Denne innstillingen pavirker hvordan ressursforesporsler pavirker jobbprioritet for parallelle jobber. Verdiene kan v re & # 8220; min, & # 8221; & # 8220; max, & # 8221; & # 8220; avg, & # 8221; eller et tall. For mer informasjon om ressursbaserte jobbprioriteter, se dette hvitt papiret.

For mer informasjon om disse innstillingene, se sge_pe man siden. Det neste trinnet er a aktivere ditt parallelle miljo for koene der det skal v re tilgjengelig. Du kan legge parallellmiljoet til en ko interaktivt med qmon eller qconf -mq & lt; queue & gt; eller i en enkelt handling med qconf -aattr ko pe_list & lt; pe_name & gt; & Lt; ko & gt; . Na er du klar til a teste ditt parallelle miljo. Kjor qsub -pe & lt; pe_name & gt; & Lt; slisser & gt; . Bortsett fra de vanlige utgangs- og feilfilene (& lt; job_name & gt; .o & lt; job_id & gt; og & lt; job_name & gt; .e & lt; job_id & gt ;, henholdsvis), bor du ogsa lete etter oppstartsproduksjon og feilfiler for parallell miljo, & lt; job_name & gt; -po & lt; job_id & gt; og & lt; job_name & gt; .pe & lt; job_id & gt ;.

Det er alt der er til det! Bare for a sikre at vi klare pa alt, la oss gjore et eksempel. La ‘s lage et parallelt miljo som starter et RMI-register og lagrer portnummeret i en fil slik at jobben kan finne den.

Det forste vi ma gjore er a skrive oppstarts- og shudown-skriptene for RMI-parallellmiljoet. Her ser de ut som:

Neste ting vi ma gjore er a legge til vart parallelle miljo til Grid Engine. Forst oppretter vi en fil, si / tmp / rmi_pe, med folgende innhold:

V r oppmerksom pa at control_slaves er sant og job_is_first_task er feil. Fordi vi skriver integrasjonsskriptene, er valget noe vilkarlig, men det pavirker hvordan jobbskriptene skal skrives, slik vi ser nedenfor. Det pavirker ogsa om qmaster er i stand til a beholde regnskapsposter pa slaveoppgavene. Hvis control_slaves er feil, har qmaster ingen oversikt over hvor mye ressurser som slaver oppgavene bruker.

Na legger vi parallellmiljoet med qconf -Ap / tmp / rmi_pe. Vi kunne ha hoppet over et trinn ved a kjore qconf -ap rmi og skrive inn dataene i redigeringsprogrammet som kommer opp, men de maten vi har gjort det her, er scriptable.

Det neste trinnet er a legge til vart parallelle miljo i koen var med qconf -aattr queue pe_list rmi all.q. Igjen kan vi ha kjort qconf -mq all.q og redigert pe_list-attributtet i redigeringsprogrammet, men maten vi har gjort det, kan skrives.

Siste ting a gjore er a teste ut vart parallelle miljo. Forst trenger vi et jobbskript:

La oss se pa dette jobbscriptet et oyeblikk. Det forste du ma legge merke til er bruk av qrsh-inherit. Inverter-bryteren er spesifikt for a sla av slaveoppgaver. Det krever at malvertenavnet leveres. For a fa malvertsnavnet leser vi maskinfilen som oppstartsskriptet genereres fra den ene Grid Engine som folger med.

Den andre tingen a legge merke til er hvor stygg bruken av qrsh-erherit er. RMI er egentlig ikke et parallelt miljo. Det er en kommunikasjonsramme. Det gjor ikke arbeidet med a avbryte eksterne prosesser for deg. Sa i stedet ma vi gjore det selv i jobbscriptet. Med et ekte parallelt miljo, som noen av MPI-smaker, tar rammen ogsa seg av a starte de eksterne prosessene, ofte gjennom rsh. I MPI-skriptene som folger med Grid Engine, er et rsh wrapper-skript inkludert, som gjennomsiktig erstatter anrop til rsh med anrop til qrsh-inherit. Ved a bruke det innpakningsskriptet, kan parallellmiljoets samtaler til rsh omdirigeres via rutenettet via qrsh uten a matte endre det parallelle miljoet selv for a arbeide med Grid Engine.

Den siste tingen a merke seg er hvordan dette skriptet korrelerer til kontroll_slaves og job_is_first_task attributter av parallell miljokonfigurasjon. La & # 8217; s starte med first_job_is_task. I var konfigurasjon setter vi den til feil. Det betyr at dette master jobbscriptet ikke regnes som en jobb og gjor ikke noe virkelig arbeid. Det er derfor vart skript ikke gjor noe annet enn a koble av deloppgaver. Hvis job_is_first_task hadde v rt sant, ville vart jobbskript forventes a kjore en av RMIApp-forekomsten selv.

La na snakke om kontroll_slavesattributtet. Hvis control_slaves er sant, har vi lov til a bruke qrsh-herre for a kaste av vare underoppgaver. Qmaster vil imidlertid ikke tillate oss a sparke flere deltakere enn antall spor vi har blitt tildelt (minus 1 hvis job_is_first_task er sant). Fordelen med a bruke qrsh-inherit er at underoppgavene spores av Grid Engine som vanlige jobber. Hvis control_slaves er feil, ma vi bruke en mekanisme som er ekstern til Grid Engine, for eksempel rsh eller ssh, for a sla av vare underoppgaver, noe som betyr at Grid Engine ikke kan spore dem og faktisk ikke er fullt kjent med dem. Det er derfor jobb_is_first_task er meningslost nar control_slaves er feil.

For a teste var jobb trenger vi et Java-program kalt RMIApp. Som det er utenfor eksempens omfang, la vi bare late som vi har et parallelt Java-program som bruker RMI-registeret for intra-prosesskommunikasjon. For a sende inn var jobb bruker vi qsub -pe rmi 2-4 rmi_job.sh. Ramm 2-4-argumentet forteller qmaster at vi bruker rmi parallellmiljoet og vi vil ha 4 jobbsperioder som er tildelt jobben var, men vi aksepterer sa fa som 2. Fordi vart jobbskript starter en sub- Oppgave for hver oppforing i vertsfilen, vil det starte riktig antall underoppgaver, uansett hvor mange spor vi er tildelt. Hadde vi skrevet jobbskriptet for a starte noyaktig to deloppgaver, matte vi bruke -p rmi 2 slik at vi kunne v re sikre pa at vi hadde akkurat to jobbsperre.

Mens jobben kjorer, kjor qstat -f. Du far se utdata noe slikt:

Fra denne utgangen kan vi se at jobben er planlagt og har blitt tildelt fire jobbspor. Disse fire jobbsporene utgjor kun de fire deloppgavene. Mastergaven i seg selv regnes ikke fordi funksjonen job_is_first_task er feil.

Etter at jobben er fullfort, ser vi i var hjemmekatalog (som er der Grid Engine vil sette utdatafilene siden vi ikke fortalte det ellers), finner vi fire nye filer: rmi_job.sh.e253, rmi_job. sh.o253, rmi_job.sh.pe253 og rmi_job.sh.o253, forutsatt selvfolgelig at var jobb var nummer 253. \ *. o253 og \ *. e253-filene skulle v re kjent. De er utgangs- og feilstrommene fra jobbskriptet. \ *. Po253 og \ *. Pe253 filene er nye. De er utgangs- og feilstrommene fra de parallelle miljooppstartings- og nedleggingsskriptene.

Sa, der har du det. Et komplett, topp til bunn eksempel pa a opprette, konfigurere og kjore et parallelt miljo.

MPI jobber og SGE parallell miljo.

For de fleste parallelle jobber, inkludert de som bruker OpenMP og IntelMPI, ma en SGE Parallel Environment spesifiseres riktig.

For MPI bor du sette & # 8220; job_is_first_task FALSE & # 8221; og & # 8220; control_slaves TRUE & # 8220 ;.

Denne PE fungerer som lim som sikrer at SGE og det parallelle, dvs. multiprosessprogrammet, leker pent sammen. To parametere er spesielt viktige:

control_slaves Denne parameteren kan settes til SANT eller FALSK (standard). Det indikerer om Sun Grid Engine er skaperen av slaveoppgaver av en parallell applikasjon via sge_execd (8) og sge_shepherd (8), og har dermed full kontroll over alle prosesser i en parallell applikasjon som muliggjor muligheter som ressursbegrensning og korrekt regnskap .

For a fa kontroll over slaveoppgaver for en parallell soknad, bor den settes til SANT. Eksempel pa PE-miljoer er tilgjengelig via din Sun Grid Engine-stotte. I dette tilfellet ma du gi tilgang til filvertsfilen (som inneholder listen over noder som skal kjores parallelt) pa alle noder (for eksempel ved a sette den pa NFS).

Vennligst sett parameteren control_slaves til feil for alle andre PE-grensesnitt. For eksempel.

Allokeringsregel.

Allokeringsregelen tolkes av sge_schedd (8) og hjelper planleggeren a bestemme hvordan man distribuerer parallelle prosesser blant de tilgjengelige maskinene. Hvis for eksempel et parallelt miljo kun er bygget for fellesminneapplikasjoner, ma alle parallelle prosesser tilordnes en enkelt maskin. Hvis imidlertid parallellmiljoet folger det distribuerte minneparadigmet, kan en jevn fordeling av prosesser blant maskiner v re gunstig. Den nav rende versjonen av planleggeren forstar bare folgende tildelingsregler.

integer_number: Et heltall som fester antall prosesser per vert. Hvis tallet er 1, ma alle prosessene ligge pa forskjellige verter. $ pe_slots Hvis den spesielle nevneren $ pe_slots er brukt, ma hele spekteret av prosesser som spesifisert med qsub (1) -pe-bryteren tildeles pa en enkelt vert. $ fill_up: Fra den best egnede verten / koen er alle tilgjengelige plasser tildelt. Ytterligere verter og koer er fylt opp & # 8221; sa lenge en jobb fortsatt krever spor for parallelle oppgaver. $ round_robin: Allokeringsordningen gar gjennom egnede verter i en best egnet forste rekkefolge.

Typiske operasjoner.

Vis tilgjengelige parallelle miljoer.

Vist parallell miljo.

PE gjor i de fleste tilfeller standard og er installert med SGE-installasjon.

Legg til et nytt parallelt miljo:

Fra en mal.

Det andre eksempelet viser at du kan spesifisere strt opp og stopp prosedyrer.

Nyttige kommandoer.

Se ogsa avsnittet «Administrere spesielt miljo» i administrasjonsveiledningen fra sun.com hvis du trenger mer informasjon om PE-konfigurasjon.

Legg til den nye PE fra filen config_file: qconf -spl – vis alle PE som er tilgjengelig for oyeblikket; qconf -sp & lt; PE_name & gt; & # 8211; liste spesiell PE; qconf-dp & lt; PE_name & gt; & # 8211; fjern en PE; qconf -mp & lt; PE_name & gt; & # 8211; endre en eksisterende PE. qconf -sql – for a se alle koer tilgjengelig; qconf -mq & lt; queue_name & gt; & # 8211; for a endre koens innstillinger. qconf -sq & lt; queue_name & gt; & # 8211; liste ko.