Οδηγίες Χρήσης Παράλληλης Μηχανής 160 πυρήνων (rbs.marie.hellasgrid.gr) 26/11/2018 V4, Αλλαγές στην Φάση 4 για Windows 06/12/2018 V5, μικρές αλλαγές (φραστικές και μορφοποίησης), ΝΕΟ Φάση 6. Φάση 1 η : Δημιουργία Κλειδιού RSA Η πιστοποίηση χρηστών γίνεται με τοv κρυπταλγο ριθμο ασύμμετρου κλειδιού RSA. Θα χρειαστεί να δημιουργήστε ένα RSA κλειδί σε linux ή windows. Συνιστάται σε linux α. Σε linux με την εντολή ssh-keygen -t rsa 1. Ζητάει ο νομα αρχείου για την αποθήκευση του κλειδιού. Πατήστε enter (default). 2. Ζητάει να ορίσετε ένα passphrase, εισάγετε ένα string, (αλλά ο χι τον κωδικο σας) και 3. στην ερώτηση επιβεβαίωσης εισάγετε πάλι το string που δώσατε πριν. 4. Σημειώστε το string, θα το χρειαστείτε ως τον κωδικο προ σβασης στην παράλληλη μηχανή. 5. Στον φάκελο ~/.ssh θα έχουν δημιουργηθούν τα αρχεία id_rsa (το ιδιωτικο σας κλειδί), id_rsa.pub (το δημο σιο κλειδί) και (ίσως) known_hosts. β. Σε Windows χρησιμοποιήστε το puttygen, μέρος του putty. Για οδηγίες χρήσης δείτε στο https://docs.oracle.com/en/cloud/paas/event-hub-cloud/admin-guide/generatessh-key-pair-using-puttygen.html. Θα δημιουργηθούν τα αρχεία id_rsa (το ιδιωτικο σας κλειδί), id_rsa.pub (το δημο σιο κλειδί). Θα σας ζητήσει passphrase, σημειώστε το string, θα το χρειαστείτε ως τον κωδικο προ σβασης στην παράλληλη μηχανή. Φάση 2 η : Πιστοποίηση Χρήστη (Authorization) 1. Με Browser connect to Web Address https://rbs.marie.hellasgrid.gr 2. Επιλογή (Not a Member) Register 3. Στην επο μενη οθο νη εισάγετε τα στοιχεία σας Full Name (ονοματεπώνυμο), User Name (για το μελλοντικο σας login), email, Password+Confirmation, CAPTCHA. 4. Σημειώστε το Password που βάλατε 5. Πατήστε Register 6. Άμεσα λαμβάνετε email απο Resources Booking System - Registration Confirmation (it@iasa.gr) με οδηγίες ενεργοποίησης του λογαριασμού. Οι ανωτέρω φάσεις 1, 2 απαιτούνται να γίνουν μο νο μια φορά, εκτο ς αν θέλετε να αλλάξετε το κλειδί, κλπ. Φάση 3η: Challenge Request 1. Μετά την ενεργοποίηση μπορείτε να κάνετε login στην Web Page rbs.marie.hellasgrid.gr (username+password) 2. Την πρώτη φορά subscribe to challenges 3. Βγαίνει User::Info με οδηγίες 4. Upload Public key (copy paste all contents of public key file - text) and submit 5. Click subscriptions section 6. Make request to Subscribe to available challenges (εμφανίζονται δυο, 4-6/10 και 17-30/11) 7. Θα λάβετε email ο ταν εγκριθεί το αίτημα (request) σας.. 8. Μετά απο Request Granted, σας δίδεται λογαριασμο ς) της μορφής psdixxx για login στο frontend μηχάνημα με προ σβαση σε cluster 20 κο μβων-μηχανών των 8 πυρήνων (160 cores).
Η Φάση 3 γίνεται στην αρχή κάθε challenge (περίοδο που οι 20 μηχανές θα είναι διαθέσιμες), δηλαδή μο νο μια φορά ανά challenge. Προβλέπεται να έχουμε 3 challenges ανά ακαδημαϊκο έτος, ένα ανοικτο εργαστήριο για ο λους (αρχή Νοεμβρίου), και δυο περιο δους που θα κάνετε μετρήσεις για την εργασία που παραδώσετε μια εβδομάδα αργο τερα για Φεβρουάριο και Σεπτέμβριο ΠΡΟΣΟΧΗ ΜΗΝ ΧΑΣΕΤΕ ΤΗΝ ΔΟΥΛΕΙΑ ΠΟΥ ΕΧΕΤΕ ΚΑΝΕΙ Οι λογαριασμοί θα διατηρούνται μόνο για 1 εβδομάδα μετά το τέλος κάθε challenge. Μετά κλείνουν οι λογαριασμοί και καταστρέφονται όλα τα αρχεία. Να μεταφέρετε όποια αρχεία χρειάζεστε σε δικό σας χώρο μετά την λήξη του challenge. Είναι σημαντικό, ιδιαίτερα αν έχετε δημιουργήσει δικά σας scripts, έχετε αναπτύξει εν μέρει το πρόγραμμά σας, έχετε αρχεία μετρήσεων, profiling, κλπ σημαντικά για την εργασία σας. Στην αρχή κάθε challenge θα σας δίδεται νέος λογαριασμός, όπου θα πρέπει να μεταφέρετε τα αρχεία της Φάσης 4 ή/και άλλα δικά σας από προηγούμενο challenge. Φάση 4 η : Login to Front-End of Parallel Machine Με τον λογαριασμο (username) κάνετε login στο front-end της παράλληλης μηχανής απο κονσο λα του υπολογιστή σας με χρήση του Private Key και Passphrase (χωρίς άλλο password) a. Απο κονσο λα linux υπολογιστή με την εντολή ssh -i [path_to_your_private_key] psdixxx@rbs.marie.hellasgrid.gr b. Απο Windows με putty, δυο επιλογές Στο Run command ( Wind+R) δίνουμε την εντολή putty.exe ssh i [path_to_your_private_key] psdixxx@rbs.marie.hellasgrid.gr Ανοίγει κονσο λα στον front-end, αναγνωρίζει το username και ζητάει το Passphrase. Τρέχετε το pageant (putty authentication agent), εμφανίζεται εικο να στο task bar. Ανοίγετε, εισάγετε την θέση του private key, σας ζητάει το passphrase. Ανοίγετε το putty (ή και το WinSCP) και με σύνδεση στο rbs.marie.hellasgrid.gr κάνει αυτο ματα login και authentication. Μετά την σύνδεση δημιουργήστε ένα directory MpiDemo (mkdir MpiDemo), μετακινηθείτε σε αυτο ν (cd MpiDemo) και αντιγράψτε 1. Το αρχείο Commands.txt αρχείο απο ο που μπορείτε να κάνετε copy-paste τις εντολές που ακολουθούν (για την ευκολία σας). Δεν συνιστώ copy-paste απο το pdf. wget --no-check-certificate https://eclass.uoa.gr/modules/document/file.php/d36/instructionsiasa/commands.txt 2. MPI program ring.c χρήσιμο στην φάση 5 της μεταγλώττισης του wget --no-check-certificate https://eclass.uoa.gr/modules/document/file.php/d36/instructionsiasa/ring.c 3. Ένα script χρήσιμο στην φάση 6 για την εκτέλεση του μεταγλωττισμένου ring.c : wget --no-check-certificate https://eclass.uoa.gr/modules/document/file.php/d36/instructionsiasa/mypbsscript.txt 4. Επειδή το class δεν αφήνει να ανεβάσω *.sh αρχεία, έχω βάλει κατάληξη.txt, επομένως μετονομάζετε mv mypbsscript.txt mypbsscript.sh Επιπλέον Πληροφορίες για το wget στο https://www.computerhope.com/unix/wget.htm} Για να κατεβάσετε εν γένει αρχεία απο το eclass (απο ανοικτο μάθημα) με δεξί κλικ εμφανίζεται ο σύνδεσμος (URL) του αρχείου, τον οποίο με copy-paste συμπληρώνετε την εντολή wget --no-check-certificate <URL>
Φάση 5η: Compiling MPI Programs Activate modules for openmpi 3.0.0 (η βιβλιοθήκη) and mpip (profiler) μια φορά ανά session module load openmpi mpip (or just module load openmpi) Compile yourprog εδώ ring.c με ή χωρίς profiling a. Compile an MPI program : mpicc -O3 ring.c -o ring.x b. Compile MPI with mpip for profiling mpicc -O3 -g ring.c -L$MPIPROOT/lib -lmpip -lbfd -lunwind -o ringp.x Για προγράμματα OpenMp ή υβριδικά προγράμματα MPI+OpenMp χρειάζεται flag -fopenmp Φάση 6 η : Running MPI Programs Έχετε ήδη κατεβάσει και μετονομάσει το scipt mypbsscript.sh. Μπορείτε να δείτε τι περιέχει με more, less, cat, κλπ. Το αρχείο περιέχει εξηγήσεις, που θα αναλύσουμε περισσο τερο αργο τερα. Σημειώνουμε ο τι η δομή είναι με του torque 4.1, βασικές εντολές του 1. Submit this script file : qsub mypbsscript.sh Θα σας δώσει το jobid (int) ή μήνυμα λάθους στο script, Εάν πχ. ppn>8 (αριθμο ς διεργασιών σε κάθε επεξεργαστή-node μεγαλύτερος απο τον αριθμο των διαθέσιμων πυρήνων σε κάθε κο μβο). 2. Examine queue and status: qstat (βλέπετε τον jobid στη ουρά). Αν δεν υπάρχει, η εργασία έχει ήδη τελειώσει (για μικρά προγράμματα είναι πολύ συνηθισμένο) 3. Σε περίπτωση που θέλετε να ακυρώσετε την εκτέλεση, διαγράφετε με qdel <id> Όταν η εκτέλεση τελειώσει θα δείτε στο home dir δυο αρχεία της μορφής myjob.o<id> (για το output) και myjob.e<id> (για λάθη εκτέλεσης) Όπου το myjob ορίζεται στο script (δες επο μενη σελίδα) Οποιοδήποτε άλλο αρχείο, πχ.έξοδος του mpip, θα εμφανιστεί στον κατάλογο απο τον οποίο εκτελέσατε το qsub. Ακολουθεί ανάλυση για την Δομή και Χρήση του PBS script (torque) για καθαρά MPI προγράμματα και υβριδικά MPI+OpenMp
Η Δομή του PBS Script για καθαρά MPI προγράμματα Με πράσινο bold οι τιμές που μπορείτε να αλλάξετε κατά περίπτωση #!/bin/bash #Max VM size #PBS -l pvmem=2g #2GByte per node Max # Max Wall time #PBS -l walltime=0:01:00 # Example, 1 minute # How many nodes and MPI tasks per node #PBS -l nodes=2:ppn=8 # 2 nodes with 8 mpi tasks/node => 16 tasks #Which Queue #PBS -q parsys #PBS -N myjob # This is the only accessible queue for rbs # Jobname - it gives the stdout/err filenames ### Merge std[out err] #PBS -k oe #Change Working directory to SUBMIT directory cd $PBS_O_WORKDIR # THIS IS MANDATORY, PBS Starts everything from $HOME, one should change to submit directory #OpenMP Threads export OMP_NUM_THREADS=1 # Για καθαρά MPI προγράμματα ΠΑΝΤΑ 1 # OMP_NUM_THREADS is the default number of threads in openmp # Having modules mpip and openmpi loaded module load mpip openmpi mpirun ring.x # That was compiled on front-end Για δημιουργία MPI διεργασιών σε N κο μβους των 8 πυρήνων με πλήρη χρήση ορίζουμε #PBS -l nodes=ν:ppn=8 # Ν nodes with 8 mpi tasks/node => 8*Ν tasks με απλή κλήση Για δημιουργία Μ διεργασιών μη πολλαπλάσιων του 8 (Μ mod 8 0), π.χ. 25, 36, 49 κλπ δεσμεύετε Ν= Μ/8 πλήρεις κο μβους με #PBS -l nodes=ν:ppn=8 Π.χ. 25 διεργασίες - 4 κο μβοι, 25/8= 3.125, N=4 [8,8,8,1] #PBS -l nodes=4:ppn=8 36 διεργασίες 5 κο μβοι, 36/5=4.5, N=5 [8,8,8,8,4] #PBS -l nodes=5:ppn=8 ΑΛΛΑ εκτελούμε με το switch np <number of processes> mpirun -np Μ <εκτελέσιμο>
Προσαρμογή PBS script για Υβριδικά προγράμματα MPI+OpenMp Για υβριδικά προγράμματα χρειάζεται εν γένει α) να δημιουργούμε λιγο τερες απο 8 διεργασίες σε κάθε κο μβο και β) να δημιουργούμε νήματα σε κάθε διεργασία. α) Για να δημιουργήσουμε λιγο τερες διεργασίες υπάρχουν 2 προσεγγίσεις, μια απλή, αλλά δεν καλύπτει ο λες τις περιπτώσεις και μια γενική. 1η Προσέγγιση (ειδική) Δημιουργούμε P MPI processes/node σε κάθε έναν απο Ν nodes, δηλαδή P*N διεργασίες με #PBS -l nodes=n:ppn=p π.χ 2 διεργασίες/κο μβο σε 4 κο μβους #PBS -l nodes=4:ppn=2 και τρέχουμε με 2η Προσέγγιση (γενική) Για κάποιο λο γο μια διεργασία ανά κο μβο, δηλαδή #PBS -l nodes=n:ppn=1 δεν λειτουργεί σωστά, αλλά το προ βλημα διορθώνεται και καλύπτει ο λες τις δυνατές περιπτώσεις. Για P διεργασίες ανά κο μβο σε N κο μβους, δηλαδή N*P διεργασίες: 1. Δεσμεύουμε τους Ν κο μβους και ο λους τους πυρήνες 8 τους #PBS -l nodes=ν:ppn=8 2. Ορίζουμε τον αριθμο διεργασιών Ν*P, ο που το Ν το παίρνουμε αυτο ματα με $PBS_NUM_NODES Procs=$[ $PBS_NUM_NODES * P ] 3. Εκτελούμε με 2 switches -np και-npernode mpirun -np $Procs -npernode P <εκτελέσιμο> β) Έχοντας ορίσει αριθμο διεργασιών ανά κο μβο μπορούμε να ορίσουμε στο script τον προεπιλεγμένο (default) αριθμο νημάτων T που δημιουργεί κάθε διεργασία με export OMP_NUM_THREADS=T Ο Τ μπορεί να είναι Τ>=1 με ανώτατο ο ριο εξαρτώμενο απο την αρχιτεκτονική, τυπικά κοντά στις 10 9,. Πρακτικά εμείς θα θεωρήσουμε 1, 2, 4, 8, 16, το πολύ 32 νήματα για δοκιμές. Διευκρινίζουμε ο τι με το OMP_NUM_THREADS ορίζουμε τον προεπιλεγμένο (default) αριθμο νημάτων, που δημιουργεί ένα προ γραμμα και μπορούμε να το διαπιστώσουμε στο προ γραμμα με int omp_get_num_threads(void); Μπορούμε φυσικά στο προ γραμμα μας να αλλάξουμε τον «προεπιλεγμένο» αυτο ν αριθμο με void omp_set_num_threads(int num_threads); ή ακο μα να τον αναιρέσουμε προσωρινά με την ιδιο τητα (attribute) num_threads(τ1) #pragma omp parallel num_threads(3) //π.χ. Τ1=3 Επομένως το OMP_NUM_THREADS είναι μο νο για ευκολία μας, ώστε να έχουμε λιγο τερες παραμέτρους στο προ γραμμά μας ή και να αποφεύγουμε μεταγλώττιση λο γω αλλαγής αριθμών νημάτων στις μετρήσεις. Για να τρέξουμε ένα υβριδικο προ γραμμα MPI+OpenMp συνδυάζουμε το α) την δημιουργία διεργασιών ανά κο μβο και το β) ορισμο ς προκαθορισμένου αριθμού νημάτων ανά διεργασία. Για να δημιουργήσουμε P διεργασίες ανά κο μβο σε Ν κο μβους και Τ νήματα ανά διεργασία, ορίζουμε
Με την 1η προσέγγιση #PBS -l nodes=n:ppn=p export OMP_NUM_THREADS=T Π.χ Για 3 κο μβους, 2 διεργασίες/κο μβο και 4 νήματα ανά διεργασία #PBS -l nodes=3:ppn=2 export OMP_NUM_THREADS=4 Με την 2η προσέγγιση (γενική) #PBS -l nodes=ν:ppn=8 Procs=$[ $PBS_NUM_NODES * P ] export OMP_NUM_THREADS=T mpirun -np $Procs -npernode P <εκτελέσιμο> Π.χ. Για 3 κο μβους, 2 διεργασίες/κο μβο και 4 νήματα ανά διεργασία #PBS -l nodes=3:ppn=8 Procs=$[ $PBS_NUM_NODES * 2 ] export OMP_NUM_THREADS=4 mpirun -np $Procs -npernode 2 <εκτελέσιμο> Digitally signed IOANNIS by IOANNIS OR KOTRONIS KOTRONIS COTRONIS OR Date: COTRONIS 2018.12.07 15:38:14 +02'00'