Navod k D0 simulacim v Praze


       Proces samotneho spousteni simulaci pro D0 se sklada ze 3 fazi :

  1. Vyroba hlavniho makra

  2. Spusteni simulacniho retezce
  3. Deklarace/ulozeni vystupu na SAM






Vyroba hlavniho makra


    Pro uspesne spusteni simulaci je nutne nejdrive ziskat informace o danem requestu, ktere jednotlive simulacni faze ke svemu behu potrebuji. Jelikoz se informace o requestu stahuji ze SAMu ve FNAL, je treba nasledujici akce provadet na lokalnim stroji, kde je instalovan SAM, tj. na sam.farm.particle.cz. Navic se zminene akce musi provadet pod uctem, ktery je zaregistrovan ve Fermilab, tedy nutno uzit nejaky osobni ucet, nikoli d0mc.
    Tyto informace a nastaveni ruznych promennych musi byt shrnuty v samostatnem souboru, hlavnim ridicim makru, ktere se ziska provedenim nasledujicich kroku :
  1. Zjistit, ktery request je na rade ke zpracovani

    • Na d0minu provest :
      • setup sam_user_api v5_0_0_21
      • python /home/bertram/Queue.py
    • Pokud nefunguje postup uvedeny v predchozim bodu, lze cislo requestu ktery je na rade, zjistit na WWW strance : www-d0.fnal.gov/computing/mcprod/request_details/Request.html

  2. Vyrobit hlavni ridici makro

    • Nastavit potrebne cesty a promenne :
      • setup sam : nastavit SAM
      • setup python : nastavit python verzi 2.0 a vyssi
      • setup mc_runjob v05-00-03 : nastavit aktualni verzi mc_runjobu

    • sam get request details --request-id=5257 --dictfmt > Request_5257.py
      Timto prikazem se z FNAL SAMu stahne python skript s potrebnymi informacemi o requestu (zde request c.5257), tento skript je pak nutno dale zpracovat :

    • python translate.py Request_5257.py > Request_5257.macro
      Timto prikazem se vyrobi kyzene ridici makro, zde je treba mit k dispozici soubory translate.py, macro.default a Defaults.py.
    Nebo je mozne pouzit skript getrequest na samu v adresari /home/soustruz/mc_macros, ktery provede vsechny uvedene prikazy z bodu 2 automaticky.
 
  • syntaxe : getrequest cislo_requestu       napr. ./getrequest 5257
  • vystup : hlavni makro Request_cislorequestu.macro       napr. Request_5257.macro

    !!! POZOR !!!    Hlavni makro je nutne jeste upravit a to v polozkach:
  • samglobal : uvest spravne Request ID !!!
  • pythia : nastavit pocet eventu/job
  • merger : MergeLocation musi byt pro kazdy request jine !!!
    navic musi byt jine i pro kazdou skupinu jobu stejneho requestu, jejichz thumbnaily se budou spojovat !!!
  • dale je vhodne vsude zkontrolovat verzi releasu !!!
    Priklad takoveho ridiciho makra je zde.



Spusteni simulacniho retezce

    Pokud jiz mame hlavni ridici makro pro zadany request, je treba ho ze samu prenest na goliase, do direktorie /home/d0mc/mc_macros. Potom jiz muzeme zacit s vlastnimi simulacemi, tok dat v simulacich je znazornen na tomto schematu.

    Pozor !!!   Pred spustenim jobu je treba si rozmyslet, kolik jobu spustit a v kolika sadach. Toto je treba skloubit s poctem jobu, jejichz vystup se bude spojovat dohromady. Iain Bertram doporucil spojovat zhruba 10 souboru, nespojovat vice nez 20-30 souboru kvuli naslednym potizim s metadaty.

    Pri spousteni jobu pro dany request je treba provest :
  1. Nastavit potrebne cesty a promenne prostredi :
    • export SRT_LOCAL=/home/d0mc
    • source /home/d0mc/mcc-dist/mcc_dist_setup.sh : zakladni setup
    • export BFCURRENT=p13.08.00 : nastavit verzi releasu (zde p13.08.00)
    • setup mc_runjob v05-00-03 : nastavit verzi mc_runjobu
    • setup python : nastavit python verzi 2.0 a vyssi

  2. Spustit mc_runjob s ridicim makrem jako parametrem :
    • mc_runjob -macro=Macroname.macro : toto da na vystupu shell skript, ktery spusti 1 konkretni job (vytvori i direktorii pro tento job na /home/d0mc/data/mcc/production/inputs)

  3. Spustit vlastni job do D0 fronty :
    • qsub -q d0 jobscriptname.sh : timto prikazem se spusti 1 job
    Joby, jejichz vystup se ma spojovat, se musi poustet postupne, jeden za druhym, nikoliv soucasne. Toto osetruje skript mc_submitseq (v direktorii /home/d0mc/mc_macros). Pokud se joby spousti soucasne (v cyklu), nastavaji problemy s jejich spojovanim.
 
  • syntaxe : mc_submitseq   jmeno_hlavniho_makra.macro   pocet_jobu
  • vystup : tento skript vytvari soubory
    • job"RequestID" : udava pocet spustenych sad jobu pro dany request (napr. job5257)
    • jobparams.dat : obsahuje RequestID, timestamp, PBS jobID a zadany pocet eventu kazdeho spusteneho jobu
    • lots"RequestID"-"jobseriesnumber".dat : seznam timestamp hodnot vsech jobu dane serie, (napr. lots5257-1.dat)
    • current.request : obsahuje cislo aktualniho requestu
  • napr. : mc_submitseq Request_5257.macro 12 :     spusti 12 jobu definovanych makrem Request_5257.macro
  • Pozor, na radce definujici promennou requestid :     requestid=$(expr "$(more $1|grep RequestID)" : '.*\( ....\)')
    pocet tecek na konci vyrazu odpovida poctu cifer cisla requestu !!!
    Pozor !!!   Dale je treba zmenit na SAMu status requestu, ktery se zacal zpracovavat :
 
  • sam modify request --requestId=5257 --status=running : na zacatku, po spusteni prvnich jobu
  • sam modify request --requestId=5257 --status=finished : po dokonceni requestu


Vystup ze simulaci

    Kazda cast simulacniho retezce, viz obrazek, vytvari vystup, ktery slouzi jako vstup pro cast nasledujici. Tento vystup je ulozen v direktorii /home/d0mc/data/mcc/production/outputs, v podadresari prislusne sekvence simulacniho retezce, napr. vystup z d0gstaru je v podadresari d0gstar.
    Vystup se sklada ze souboru obsahujiciho vlastni vystup (data) a python skriptu (metadata), pricemz vystup konkretniho jobu lze jednoznacne identifikovat podle timestamp, ktere je obsazeno v nazvech vystupnich souboru a je jednoznacne prirazeno k danemu jobu. Timestamp ma vyznam casoveho udaje vztahujiciho se k okamziku spusteni jobu a sklada se z 11 cislic s nasledujicim vyznamem :
  • prvni 2 cislice oznacuji posledni dvoucisli roku
  • dalsi 3 cislice jsou poradovym cislem dne v danem roce
  • nasledujicich 6 cislic pak ukazuje cas spusteni ve tvaru "hhmmss"
    Jmena vystupnich souboru (data) maji tvar :
  • gen-* : vystup z generatoru
  • d0g-* : vystup z d0gstaru
  • sim-* : vystup z d0sim
  • tsim-* : vystup z d0trigsim
  • reco-*, nebo tmb-* : vystup z d0reco
  • d0reco-merger-* : vystup z copyd0om
    Metadata soubory pak maji nazvy ve tvaru : import_kw-*.py.


Kontrola kvality

    Po ukonceni jobu je treba zkontrolovat, zda jeho vystup je v poradku a bez chyb. Existuje nekolik zpusobu, nebo urovni, jak zkontrolovat, zda nedoslo k chybam pri simulaci. Ne vsechny zpusoby kontroly zarucuji odhaleni pripadnych chyb. Moznosti kontroly jsou nasledujici :
  • Vystupni soubory z PBS pro dane joby, ktere se objevi po ukonceni jobu v direktorii, odkud byl job spusten. Nejjednodussi a nejrychlejsi kontrola. Tyto soubory by mely obsahovat casove udaje o spusteni jobu a ukonceni jednotlivych casti simulacniho retezce a celeho jobu. V pripade chyby se zde objevi text "ERROR FOUND processing ...". Tento zpusob kontroly neni zcela spolehlivy, odhali prakticky jen chyby, ktere vedou k zhrouceni nektere z casti simulacniho retezce (ten se tim neprerusi, ale pokracuje dale s chybnymi vysledky).
  • mc_runjob_error_log : soubor v hlavni direktorii daneho jobu, tj. /home/d0mc/data/mcc/production/inputs/jmeno_jobu. Tento soubor obsahuje sekvenci "ERROR", pokud k nejake chybe doslo, v opacnem pripade pak retezec "no errors". Ani tento zpusob neni zcela spolehlivy. Neodhali spatne vyplneni, a tedy nepouzitelnost dat, udaju v metadata souborech.
  • Log fily jednotlivych casti simulacniho retezce : poskytuji podstatne podrobnejsi informace o jejich prubehu a tedy i o pripadnych chybach. Nachazeji se v podadresarich jednotlivych simulacnich fazi pro dany job (napr. /home/d0mc/data/mcc/production/inputs/jmeno_jobu/d0gstar/ cislo_releasu/*.log). Zde je nutno se hlavne pidit po veticce "finishing metadata file ..." na uplnem konci log souboru, nasledovat by mel seznam doplnenych udaju jako "replaced STARTDATE: 11/12/2003 16:27:22, replaced FINISHDATE: 11/12/2003 16:27:48, replaced EVENTS: Events(1, 5, 5), replaced FILESIZE: 128, atd. Pokud tam nic takoveho neni, nebo dokonce nalezneme neco jako "***mc_runjob***: WARNING: Cannot finish metadata for file: jmeno souboru", pak muzeme job zahodit. Toto je spolehlivy zpusob detekce chyb, jen ponekud zdlouhavy.
  • Metadata soubory jednotlivych fazi simulacniho retezce musi mit spravne vyplnene udaje, aby se mohly predat do faze nasledujici. V opacnem pripade job sice pokracuje, ale jeho vystupy nejsou pouzitelne. Spravne vyplnene metadata soubory (import_kw_*.py skripty) musi na 3. radce mit jmeno datoveho souboru, k nemuz nalezi ("filename = 'jmeno souboru'"), na dalsi radce by melo nasledovat napr. : "t = SAMMCFile(filename,Events(1, 5, 5),"reconstructed", appfamily,"11/12/2003 16:59:23","11/12/2003 17:2:31",1698, ...", zde si vsimnete vyplnenych udaju o poctu eventu (zde : Events(1, 5, 5)), dale casu spusteni a dokonceni jobu (zde : 11/12/2003 16:59:23 a 11/12/2003 17:2:31) a jeste velikosti souboru (zde : 1698). Pokud misto konkretnich udaju nalezname pouze jmena promennych (EVENTS,STARTDATE,FINISHDATE,FILESIZE), pak metadata soubor neni spravne vyplnen a tudiz vystup z jobu muzeme zahodit. Existence spravne vyplnenych metadata souboru je spolehlivou zarukou uspesneho probehnuti jobu !!!
    Ke kontrole kvality (vyskytu chyb) ve vystupnich souborech jobu lze uzit skriptu  jobcontrol   z direktorie /home/d0mc/mc_macros na goliasi.
 
  • syntaxe : source jobcontrol   filename ,     kde "filename" je jmeno souboru se seznamem timestamp hodnot jobu dane sady
  • napr. : source jobcontrol   lots5257-1.dat



Deklarace/ulozeni vystupu na SAM

    Vystup z bezchybne probehlych jobu je treba bud deklarovat, nebo primo ulozit na SAM. Pri deklaraci vystupu se manipuluje pouze s metadata souborem (python skript), ktery se zaregistruje (nebo i ulozi ?) v SAM databazi, zatimco pri ukladani se na SAM presune vlastni datovy soubor.
    Syntaxe techto SAM prikazu je nasledujici :
  • sam declare --source=/my/metadata/dir myMetadataFile.py
    • kde za "--source" nasleduje cesta k datovemu souboru
    • myMetadataFile.py : metadata import_kw_*.py python skript
    • z vlastni zkusenosti mohu doporucit deklaraci primo z adresare, kde jsou oba (data i metadata) soubory, tudiz --source=.

  • sam store --source=/path/to/data/file --descrip=myMetadataFile.py
    • vyznam symbolu, viz "sam declare"
    • opet doporucuji uzit --source=.
    Jak deklaraci tak samotne ukladani vystupu na SAM nutno provadet ze stroje, kde je nainstalovan SAM, tj. ze stroje sam.farm.particle.cz a to pod Fermilabu znamym uctem (osobni ucet), ucet d0mc uzit nelze.

    Co ukladat :
p14.02.00
  • d0gstar vystup
  • d0reco vystup
  • spojene thumbnaily
  p14.05.01
  • d0reco vystup
  • spojene thumbnaily

    POZOR !!! nejdrive se musi deklarovat vsechny thumbnaily vytvorene jednotlivymi joby, ktere se maji spojovat, a teprve pote lze ulozit tyto thumbnaily spojene do jednoho souboru.

    O presun dat na SAM se postara skript move2sam, ktery je na samu v direktorii /home/soustruz/mc_macros.
  • syntaxe : move2sam   timestamp
  • napr. : move2sam   03316174500     zajisti prenos dat jobu s timestamp 03316174500




  Last update : Karel Soustruznik, 13th December 2003