1 / 22

Analyse distribuée

Analyse distribuée. Une plongée dans PyROOT et l’accès aux données : CPU et réseau. Plan :. Contexte Comment fonctionne PyROOT Ouverture et lecture des fichiers Différents environnements de travail Interactif : lappsl4 Données sur lapp_data Données sur le SE (SAM et DAS)

bowen
Download Presentation

Analyse distribuée

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Analyse distribuée Une plongée dans PyROOT et l’accès aux données : CPU et réseau

  2. Plan : • Contexte • Comment fonctionne PyROOT • Ouverture et lecture des fichiers • Différents environnements de travail • Interactif : lappsl4 • Données sur lapp_data • Données sur le SE (SAM et DAS) • Sur la grille • Jobs sur différents WN • Jobs sur même WN

  3. Contexte : But : - Comparer CPU / réseau - Pour : - différentes localisations des données - différentes façons de travailler ( série / parallèle ) - jobs sur WN ou UI ? ROOT : • PyROOT (interface Python) • - chainage des fichiers à analyser • ( fichiers concaténés lors de leur ouverture ) • lecture de l’ensemble des fichiers • merger les fichiers pour n’en avoir que un seul •  CPU mesuré = CPU utilisé pour remplir des histogrammes / données

  4. Setup PyRoot (http://root.cern.ch/root/HowtoPyROOT.html) • Versions de ROOT: • /grid_sw/lhcb/lib/lcg/external/root • Versions de python: • /grid_sw/lhcb/lib/lcg/external/python setenv ROOTSYS /grid_sw/lhcb/lib/lcg/external/root/5.18.00d/slc4_ia32_gcc34/root setenv PYTHONDIR /grid_sw/lhcb/lib/lcg/external/Python/2.5/slc4_ia32_gcc34/ setenv PATH ${ROOTSYS}/bin:${PYTHONDIR}/bin:${PATH} setenv LD_LIBRARY_PATH ${ROOTSYS}/lib:${PYTHONDIR}/lib:${LD_LIBRARY_PATH} setenv PYTHONPATH ${ROOTSYS}/lib:${PYTHONPATH} #librairie castor ln -s ${LCG_LOCATION}/lib/libdpm.so libshift.so.2.1 setenv LD_LIBRARY_PATH ${PWD}:${LD_LIBRARY_PATH}

  5. PyROOT • Module(s) à importer • import ROOT • from ROOT import **** (Tfile, TH1F,…) • Ouverture de fichiers • Les uns à la suite des autres • input = TFile.Open(“Name.root”) • mytree=input.Get('n1') • pas plus de 30Mo de fichiers • Chainer les fichiers et les ouvrir tous en même temps • chain = TChain('n1') • chain.Add(“Name.root”) • entries=chain.GetEntries() => Mélanger les fichiers ou autre méthode ROOT

  6. Création d’un arbre avec une branche contenant des feuilles fNewFile = TFile("Name","Create,Recreate,…") fNewTree=TTree("Name", "Name") sBranch_struct="structcluster_t{\ Int_t size;\ Float_teX[SIZE];\ };" sClusters_struct=sClusters_struct.replace("SIZE",str()) gROOT.ProcessLine(sClusters_struct); self.Views.Branch('clusters',cluster_t,'@size/I:clusters.eX['+str(self.nPoints)+']/F') clusters.eX=array('f',range(self.nPoints)) for j in range(0,self.nPoints): clusters.eX[j]=float(self.Variables[0][0][j]) self.Views.Fill() Crée new file and new tree Crée structure branche avec feuilles Accrocher structure sur arbre Rempli variables de la branche

  7. Script utilisé for File in sFileList: sRootName = '/lapp_data/lhcb/rospabe/Bs_JPsiEta/Prod/'+File chain.Add(sRootName) #get the entries entries=chain.GetEntries() #declaration of the variables R = array( 'l' , [0] ) chain.SetBranchAddress("R",R) BsM = defineArray( 'd' , 20000 ) chain.SetBranchAddress("BsM",BsM) nEvt=nEvt+chain.GetEntriesFast() for jentry in xrange(0,nEvt ): nb=chain.GetEntry(jentry) #loop over reconstructed Bd for j in range(0,R[0]): nBs+=1 mBs.Fill(BsM[j]/1000.) file.write("MeanHisto = "+str(mBs.GetMean())+"\n") Liste de fichiers à ouvrir concaténation dans chain Matcher les entrées Variables Remplissage histo Maximum histo

  8. PyROOT au niveau réseau et CPU • Import ROOT et dépendances (depuis Lappsl) : • Exemple de plots que l’on va voir • CPU utilisé • Network CPU(kb) Transfert (∆b) Sleeping t(s) t(s)

  9. Ouverture et lecture des fichiers (SE) • Ouverture fichiers a la suite : • input = TFile.Open(“rfio:…..root”) (0.4’’) • mytree=input.Get('n1') (0.1’’) • Pas plus de 30Mo de fichiers ⇒ memory leak ~13’’ CPU(kb) ~13’’ Transfert (∆b) t(s) t(s) Import ROOT Getting trees

  10. Ouverture et lecture des fichiers (lapp_data) • Ouverture fichiers a la suite : • input = TFile.Open(/lapp_data/……root”) (0.1’’) • mytree=input.Get('n1') (0.1’’) • Pas plus de 30Mo de fichiers => Mélanger les fichiers et autre methode ROOT CPU(kb) 1.2’’ Transfert (∆b) Getting tree t(s) t(s) Getting trees

  11. SE Accès depuis une UI de fichiers sur disque locaI / SE WN UI 710’’ Chainer les fichiers et les ouvrir en même temps avec PyROOT ( 200 fichiers : tot = 500Mo) Fichiers sur Data_Local (gpfs) ou sur le SE (rfio) du Lapp • Accès plus rapide vers Data_Local que SE • CPUmax 380MB • Réseaumax 17MB.s-1 • Réseaumax 2MB.s-1 60’’ <Débit> 9MB/s Protocoles ≠ <Débit> 0.9MB/s

  12. SE Accès depuis une UI de fichiers sur disque locaI / SE WN UI 70’’ Un seul fichier de 500Mo (5int, 1 double, 115 float) • Accès plus rapide vers Data_Local que SE (rfio) (5’’ de différence) • CPUmax 530MB • Réseaumax 18MB.s-1 • Protocoles ≠ mais effet atténué car 1 seul fichier <Débit> 13MB/s

  13. SE Accès depuis un WN de fichiers sur SE WN UI 710’’ 200 fichiers ou un seul fichier de 500Mo (5int, 1 double, 115 float) • Accès plus rapide avec un seul fichier que 200 • Temps ~ que depuis une UI • Temps < que depuis une UI • CPUmax 530MB • Réseaumax 17MB.s-1 • Réseaumax 5MB.s-1 50’’ <Débit> 15MB/s <Débit> 1MB/s

  14. Tableau résumé d’accès à distance • Merger les fichiers diminue temps total car moins d’I/O • Pas d’effet de cache car le taux de renouvellement des fichiers contenus dans le cache est très élevé

  15. SE Accès depuis une UI de fichiers sur disque local / SE WN UI • Trois étapes itératives : • copier n fichiers localement (rfcp parallélisés) analyser les n fichiers pendant copie des suivants effacer fichiers analysés

  16. SE Conclusion WN UI • Temps rfcp >> rfio lorsque le nombre de fichiers augmente • Réseau utilisé plus optimal avec plusieurs fichiers copiés en même temps • Max du réseau interne Lapp de 1Gb/s

  17. SE Accès depuis un WN de fichiers sur SE WN UI Closer to reality : fichiers de 1G0 • Essais avec N fois X fichiers de 1Go X.N=100 • tcalcul>ttransfert et tcalcul X =>ttot100’’/1Go si X<40 • Limitation vient du calcul ... ...

  18. SE Résumé WN UI • Temps total pour transfert en // et calcul est équivalent qq soit le nombre de fichiers < 40 • Limitation vient du calcul

  19. SE Accès depuis un WN de fichiers sur SE Jobs sur un même WN ( blade 4 cores) WN UI • Blade de 4 WN sortit spécialement pour ces tests (période calme : Atlas_P) • X jobs mêmes WN (X=1,2,3,4) • Travail en rfcp // • Réseau même dans 4 cas • Les jobs se pénalisent entre eux : la vitesse lecture/écriture des données sur le disque du blade est bloquante. • Max du réseau cluster WNSE 2*1Gb/s

  20. Conclusions • en “normal” : • cpumax 500MB • <débit>: 17 et débitmax: 50MB/s • en // : pointminavec 60fichiers (200MB) • UI : débitmax = 70MB/s • WN : débitmax = 110MB/s • Fichiers 1Go : même effet (2Go en //) • Sur même WN • Transferts fichiers : même débit (100MB/s) • CPU partagées => compétition entre jobs • Limite d’accès aux données copiées sur disque du blade • Pas ce genre de problème avec des open rfio

  21. Conclusions • Fichiers mergés plutôt que série de petits fichiers • “open rfio” plus performant que rfcp mais dépend de l’activité sur cluster • Capacités maximum du réseau Lapp interne et cluster atteint (1Gb/s) 1 Fichier de 1G0 100 fichiers de 1G0 en //

  22. 1/2/3/4 open rfio sur blade • Temps : • import root et dépendances : 11.6’’ et 0.4’’ • add chain 0’’ • getting entries : 180’’ • lecture données : 8320/8420/8830/9000’’ CPU(kb) Transfert (∆b) Working Working Getting entries t(s) t(s) Getting entries

More Related