Sändning av binärer i Grid Engine 6.x Grid Engine 6 stöder direkt inlämning av binärer via qsub och qrsh via det nya argumentet - b yn. Standardbeteendet förutsätter - b n. använd - b för att direkt anropa en binär körbar. workgroupcluster: www qrsh - b y usrbinuptime 7:49 upp 107 dagar, 35 minuter, 0 användare, lägsta medelvärde: 0,12 0,03 0,01 arbetsgruppskluster: Kommandot qsub (1) kan inte användas för att direkt skicka in binära filer som jobb. Även om man kunde skriva ett litet omslagsskript runt binärer för att skicka in dem, finns det två praktiska tekniker för att skicka binärer som jobb helt enkelt utan att involvera ett separat skript. Skriv qsub-kommandot tillsammans med önskade flaggor och alternativ och tryck sedan på Retur utan att ange ett jobbskript. Du kommer då att se en sekundär shell prompt. Vid den här prompten kan du skriva in namnet på det binära. Du kan sedan trycka på retur och fortsätt att ange fler binära eller skalkommandon. När du är redo att ange ditt jobb, tryck på Control-D. qsub - l archsolaris64 sleep 60 ltctrl-Dgt ditt jobb 47427 (quotSTDINquot) har skickats Skriv in qsub-kommandot tillsammans med önskade flaggor och alternativ, använd sedan STDIN-omdirigeringskonstruktionen ltlt ltMARKERgt. Skriv in en eller flera rader som innehåller en kombination av binärer och skalkommandon vid sekundärprompten som ovan. Skriv sedan på LTMARKERgt på en rad av sig själv och tryck på Retur. qsub - N test ltt EOF sova 60 EOF ditt jobb 47428 (quottestquot) har skickats in Båda teknikerna ovan dra fördel av det faktum att qsub använder STDIN-strömmen som ett jobbskript om du inte anger en skriptfil som argument. För att integrera vissa applikationer i din miljö med ett Grid Engine-kluster kan det vara nödvändigt att skriva ett anpassat omslagsskript som gör vissa installationsarbeten innan du kör ett jobb. Den andra tekniken från ovan kan inbäddas i sådana omslagskript. Exempel: Skapa omslag för att skicka in ett binärt batchjobb från en SunRay till en back-end-gård. För att göra detta måste du ändra LDPRELOAD-variabeln för att ta bort SunRay-specifik post. Ett generiskt binärt inlämningsskript quotqbsubquot finns på denna länk. Den kan användas som en kvotisk version av qsub. Omslagsscriptet gör det möjligt för avsändaren att använda standardinställningsflaggarna, och det står också för de flaggor som anges i qtaskfilen (som används av qtcsh när det skickas binärt till systemet automatiskt). Ett exempel på användningen av det här skriptet är: Detta kör binära binära netscape samtidigt som VIS-miljövariabeln uttryckligen upprätthålls. OBS! Du måste självklart se till att binären matchar arkitekturen där den så småningom kommer att springa. Du kan t. ex. ange det här: Sun Grid Engine (SGE) QuickStart Sun Grid Engine Queue System är användbart när du har många uppgifter att utföra och vill distribuera uppgifterna över ett kluster av maskiner. Du kan till exempel behöva springa hundratals simuleringsexperiment med varierande parametrar eller behöva konvertera 300 videoklipp från ett format till ett annat. Att använda ett köningssystem i dessa situationer har följande fördelar: Schemaläggning - gör att du kan schemalägga en praktiskt taget obegränsad mängd arbete som ska utföras när resurser blir tillgängliga. Det innebär att du enkelt kan skicka in så många uppgifter (eller jobb) som du vill, och låt köningssystemet hantera att utföra dem alla. Lastbalansering - distribuerar automatiskt uppgifter över klustret så att någon nod inte blir överbelastad jämfört med resten. MonitoringAccounting - förmåga att övervaka alla inlämnade jobb och fråga vilka klusternoder de8217r körs på, oavsett om de är färdiga, stöter på ett fel etc. Låter också att jobba historia för att se vilka uppgifter som utfördes på ett visst datum, av en viss användare etc. Naturligtvis, bara för att ett kösystem är installerat betyder inte att du behöver använda det alls. Du kan köra dina uppgifter över klustret på något sätt som du ser lämpligt och köningssystemet bör inte störa. Men du kommer sannolikt att sluta behöva implementera ovanstående funktioner på något sätt för att optimalt utnyttja klustret. Sända jobb Ett jobb i SGE representerar en uppgift som ska utföras på en nod i klustret och innehåller kommandoraden som används för att starta uppgiften. Ett jobb kan ha specifika resursbehov, men i allmänhet bör det vara agnostiskt till vilket nod i klustret det löper så länge som resursbehoven är uppfyllda. Alla jobb kräver åtminstone en ledig plats på en nod i klustret som ska köras. Sändning av jobb sker genom att använda kommandot qsub. Let8217s försöker skicka in ett enkelt jobb som kör värdnamnskommandot på en given klusternummer: - V-alternativet till qsub anger att jobbet ska ha samma miljövariabler som skalet utför qsub (rekommenderas) - b-alternativet till qsub anger att Kommando som körs kan vara ett enda binärt körbart eller ett bash script. I detta fall är kommandot värdnamn ett enda binärt. Detta alternativ tar ett y eller n-argument som anger antingen ja kommandot är ett binärt eller nej det är inte ett binärt. Alternativet - cwd till qsub berättar Sun Grid Engine att jobbet ska köras i samma katalog som qsub heter. Det sista argumentet för qsub är det kommando som ska utföras (värdnamn i det här fallet) Observera att qsub-kommandot, när det är framgångsrikt, kommer att skriva ut jobbnummeret till stdout. Du kan använda jobbnummeret för att övervaka statusen för job8217 och framsteg i kön som vi8217ll ser i nästa avsnitt. Övervakning av jobb i köen Nu när vårt jobb har skickats, let8217s ta en titt på job8217s status i köen med kommandot qstat: Från den här utgången kan vi se att jobbet är i qw-staten som står för kö och väntar . Efter några sekunder övergår jobbet till ett r. eller springa. ange vid vilken tid jobbet ska börja utföras: När jobbet är klart kommer jobbet att tas bort från kön och visas inte längre i utmatningen av qstat: Nu när jobbet är klart, går let8217s vidare till nästa avsnitt för att se hur vi ser en job8217s produktion. Visa en Job8217s Output Sun Grid Engine skapar stdout och stderr-filer i job8217s arbetsmapp för varje jobb som utförs. Om några ytterligare filer skapas under genomförandet av job8217 kommer de också att vara placerade i arbetsgruppens arbetsgrupp, om de inte uttryckligen sparas någon annanstans. Job8217s stdout - och stderr-filer namnges efter jobbet med förlängningen som slutar i job8217s nummer. För det enkla jobbet ovan har vi: Observera att Sun Grid Engine automatiskt namngav jobb värdnamn och skapade två utdatafiler: värdnamn. e1 och värdnamn. o1. E står för stderr och o för stdout. Den 1 i slutet av filstaven files8217 är jobbnummeret. Så om jobbet hade fått namnet mynewjob och jobbades 23, så skulle utdatafilerna se ut: Övervaka klusteranvändning Efter ett tag kan du vara nyfiken på att se lasten på Sun Grid Engine. För att göra detta använder vi qhost-kommandot: Utmatningen visar arkitekturen (ARCH), antalet cpus (NCPU), den aktuella belastningen (LOAD), det totala minnet (MEMTOT) och det aktuella minnet (MEMUSE) och byteutrymmet ( SWAPTO) för varje nod. Du kan också se den genomsnittliga belastningen (loadavg) per nod med hjälp av alternativet 8216-f8217 till qstat: Skapa en jobbskript I avsnittet 8216Sändning av en Job8217 inlämnades ett enda värdnamn. Det här är användbart för enkla jobb men för mer komplexa jobb där vi behöver ta med lite logik kan vi använda ett så kallat jobbskript. Ett arbetsskript är i grunden ett bash-skript som innehåller en del logik och exekverar ett antal externa programskript: Som du kan se utför detta skript bara några kommandon (t. ex. eko, datum, katt etc.) och utgångar. Allt som skrivs ut på skärmen läggs i job8217s stdout-fil av Sun Grid Engine. Eftersom detta bara är ett bash-skript kan du lägga till någon form av logik som är nödvändig i jobbskriptet (det vill säga om uttalanden, medan slingor, för slingor etc.) och du kan ringa något antal externa program som behövs för att slutföra jobbet. Let8217 ser hur du kör det här nya jobbskriptet. Spara skriptet ovan till homesgeadminjobscript. sh på din StarCluster och kör följande som sgeadmin-användaren: Nu när jobbet har skickats letar vi upp call qstat periodiskt tills jobbet är klart eftersom det här jobbet bara tar en sekund att köra när it8217s körs : Nu när jobbet är klart letar let8217s en titt på utdatafilerna: Vi ser att vi tittar på utgången att stdout-filen innehåller utmatningen av echo-, datum - och kattanslutningarna i jobbskriptet och att stderr-filen är blank betyder att det inte fanns några fel under job8217s utförande. Hade något misslyckats, till exempel ett kommando som inte hittade fel till exempel, hade dessa fel uppstått i stderr-filen. Ta bort ett jobb från köet Om ett jobb fastnat i kön tar det för lång tid att köra eller helt enkelt startades med felaktiga parametrar. Du kan radera ett jobb från kön med kommandot qdel i Sun Grid Engine. Nedan startar vi ett enkelt 8216sleep8217-jobb som sover i 10 sekunder så att vi kan döda det med qdel: Efter att ha kört qdel you8217ll är jobbet borta från köen: OpenMPI och Sun Grid Engine OpenMPI måste sammanställas med SGE-support (8211with-sge ) för att utnyttja den snäva integrationen mellan OpenMPI och SGE som dokumenterat i detta avsnitt. Det här är fallet på alla StarCluster8217s offentliga AMI. OpenMPI stödjer en snabb integration med Sun Grid Engine. Denna integration möjliggör att Sun Grid Engine hanterar att ge värdar till parallella jobb och för att korrekt redovisa parallella jobb. OpenMPI Parallel Environment StarCluster ställer som standard in en parallell miljö, kallad 8220orte8221, som har konfigurerats för OpenMPI integration inom SGE och har ett antal slitsar lika med det totala antalet processorer i klustret. Du kan inspektera SGE-parallellmiljön genom att köra: Det här är standardkonfigurationen för ett två-nods, c1.xlarge kluster (16 virtuella kärnor). Round Robin vs Fill Up Modes Observera allokeringsinställningen i utgången av qconf-kommandot i föregående avsnitt. Detta definierar hur man tilldelar slots till ett jobb. Som standard konfigurerar StarCluster roundrobinallokering. Detta innebär att om ett jobb begär 8 slitsar till exempel, går det till den första maskinen, ta en enda slits om det är tillgängligt, gå till nästa maskin och ta en enda slits om det finns, och så vidare omklara om kluster igen om det behövs att fördela 8 slitsar till jobbet. Du kan också konfigurera parallellmiljön för att försöka lokalisera slots så mycket som möjligt med hjälp av fillup-allokeringsregeln. Med denna regel, om en användare begär 8 spår och en enda maskin har 8 spår tillgängliga, kommer det här jobbet att köras helt på en maskin. Om 5 luckor är tillgängliga på en värd och 3 på en annan, tar det alla 5 på den värden och alla 3 på den andra värden. Med andra ord kommer denna regel gärna ta alla slitsar på en given nod tills spaltkravet för jobbet är uppfyllt. Du kan byta mellan roundrobin och fillup-lägen med följande kommando: Detta öppnar vi (eller någon redigerare definierad i EDITOR env-variabel) och låter dig redigera de parallella miljöinställningarna. För att byta från roundrobin till fillup i ovanstående exempel, ändra allocationrule-linjen från: Skicka in OpenMPI-jobb med en parallell miljö Det allmänna arbetsflödet för att köra MPI-kod är: Kompilera koden med mpicc, mpicxx, mpif77, mpif90 etc. Kopiera den resulterande körbar till samma väg på alla noder eller till en NFS-delad plats på huvudnoden. Det är viktigt att sökvägen till körbarheten är identisk på alla noder för att mpirun ska kunna starta din parallella kod korrekt. Det enklaste sättet är att kopiera den körbara någonstans under hemma på masternoden eftersom hemmet är NFS-delat över alla noder i klustret. Kör koden på X-antal maskiner med: där värdfilen ser något ut: Men när du använder en SGE-parallellmiljö med OpenMPI behöver du inte längre ange alternativen - np, - hostfile, - host, etc. till mpirun. Detta beror på att SGE automatiskt tilldelar värdar och processorer som används av OpenMPI för ditt jobb. Du behöver inte heller skicka 8211byslot och 8211bynode-alternativen till mpirun med tanke på att dessa mekanismer hanteras nu av fillup - och roundrobin-lägena som anges i SGE-parallellmiljön. I stället för att använda ovanstående formulering skapar du ett enkelt jobbskript som innehåller ett mycket förenklat mpirunsamtal: Skicka sedan in jobbet med kommandot qsub och parallellmiljön för orte automatiskt konfigurerad för dig av StarCluster: Den - pe alternativtypen som parallell miljö ska använda och hur många slots att begära. Ovanstående exempel begär 24 luckor (eller processorer) med hjälp av parallellmiljön. Parallellmiljön tar hand om att distribuera MPI-jobbet bland generaldirektoratets nodar med hjälp av den tilldelningsruta som definieras i miljö8217s inställningar. Du kan också göra detta utan ett jobbskript som så: qsub (1) - Linux man sida Den här handboken är en del av POSIX Programmeringshandboken. Linux-implementeringen av detta gränssnitt kan skilja sig från (se motsvarande Linux-manualsida för detaljer om Linux-beteende), eller gränssnittet får inte implementeras på Linux. qsub - skicka ett skript Beskrivning Att skicka ett skript är att skapa ett batchjobb som kör skriptet. Ett skript skickas av en förfrågan till en batchserver. Qsub-verktyget är en användar tillgänglig batch-klient som skickar ett skript. Efter framgångsrikt slutförande ska qsub-verktyget ha skapat ett batchjobb som ska utföra det inlämnade skriptet. Qsub-verktyget ska skicka ett skript genom att skicka en köjobbförfrågan till en batchserver. Qsub-verktyget ska placera värdet av följande miljövariabler i attributet VariableList för batchjobbet: HOME. LANG. LOGNAME. PATH. POST . SHELL. och TZ. Namn på miljövariabeln ska vara det aktuella namnet prefixat med strängen PBSO. Obs! Om det aktuella värdet för HOME-variabeln i miljöområdet för qsub-verktyget är aabbcc. då ska qsub placera PBSOHOME aabbcc i attributet VariableList i batchjobbet. Förutom de variabler som beskrivs ovan ska qsub-verktyget lägga till följande variabler med de angivna värdena på variabelistan: PBSOWORKDIR Den absoluta sökvägen för den aktuella arbetsmappen i qsub-hjälpprocessen. PBSOHOST Namnet på den värd som qsub-verktyget körs. Qsub-verktyget ska överensstämma med grunddefinitionsvolymen i IEEE Std 1003.1-2001, avsnitt 12.2, Utility Syntax Guidelines. Följande alternativ ska stödjas av implementeringen: - a datetime Ange vilken tidpunkt ett batchjobb blir berättigat till körning. Qsub-verktyget ska godkänna ett alternativargument som överensstämmer med syntaxen för touch-verktyget i operativsystemet. Tabell: Miljövariabelvärden (Verktyg) Obs! Servern som initierar utförandet av batchjobbet lägger till othervariabler i batchjobbens miljö, se Batchjobbutförande. Qsub-verktyget ska ange exekveringshastigheten för batchjobbet till antal sekunder sedan Epochthat motsvarar den lokala tiden som uttrycks av värdet av datetimealternativargumentet. Epoken definieras i Basis Definition-volymen i IEEE Std 1003.1-2001, avsnitt 3.149, epok. Operands Input-filer Miljövariabler Asynkrona händelserSändning av ditt batchjobb Hur man skickar in en batchjobb Icke-interaktiva batchjobb skickas med qsub-kommandot. Den allmänna formen av kommandot är: Till exempel, för att skicka printenv-kommandot till batchsystemet, kör: Alternativet - b y berättar batchsystemet att följande kommando är en binär körbar. Utmatningsmeddelandet i qsub-kommandot skriver ut jobb-id, som du kan använda för att övervaka statusen job8217 i kön. Medan jobbet körs skapar batchsystemet stdout - och stderr-filer i arbets8217s arbetsmapp, som är uppkallat efter jobbet med förlängningen som slutar i job8217s nummer, för ovanstående exempel printenv. o jobbID och printenv. e jobID. Den första kommer att innehålla utmatningen av kommandot och den andra kommer att få listan över fel, om någon, som inträffade när jobbet kördes. När du kör ett program som kräver argument och skickar ytterligare alternativ till batchsystemet, blir det snabbt användbart att spara dem i en skriptfil och skicka detta skript som ett argument till qsub-kommandot. Exempelvis kommer följande script script. sh att utföra ett enkelt MATLAB-jobb: Obs! För att behandlas korrekt måste skriptet innehålla en tom linje i slutet av filen. För att skicka in denna script. sh-fil till batchsystemet, kör: För ytterligare MATLAB-batchprocedurer, se Running MATLAB Batch på SCC. Generella arbetsinsökningsdirektiv Det finns ett antal direktiv (alternativ) som användaren kan överföra till batchsystemet. Dessa direktiv kan antingen tillhandahållas som argument till qsub-kommandot eller inbäddade i jobbskriptet. I en skriptfil börjar linjerna som innehåller dessa direktiv med symbolerna 8211 här är ett exempel: Nedan är listan över de mest använda direktiven:
No comments:
Post a Comment