Το προφίλ μας στο Google Plus
0

Το πρώτο σας FreeBSD Beowulf Cluster [μέρος 2]

Στο πρώτο άρθρο περί του Aiolos Project, στο τεύχος 040, δώσαμε μια μικρή γεύση από τα Beowulf Clusters αλλά και από το (φιλόδοξο) σχέδιό μας να κατασκευάσουμε ένα, στο πλαίσιο σχολικού πρότζεκτ. Είμαστε πλέον στην ευχάριστη θέση να σας ενημερώσουμε ότι το εγχείρημα στέφθηκε με επιτυχία και το Aiolos Project είδε για πρώτη φορά τους πυρήνες του να ενεργοποιούνται στις 12/03/2015!

Το cluster εκτέλεσε με επιτυχία το απλό hellompi.py, το αντίστοιχο του Hello World για OpenMPI καταστάσεις. Πριν φτάσουμε βέβαια σε αυτή την επιτυχημένη δοκιμή, χρειάστηκε αρκετή προσπάθεια:

  • Το όλο εγχείρημα δοκιμάστηκε στο Virtual Aiolos, μια εκδοχή του Aiolos cluster που δημιουργήσαμε σε περιβάλλον VirtualBox. Στο Virtual Aiolos γράψαμε και τις απαραίτητες σημειώσεις με τις οποίες οι μαθητές ρύθμισαν τα μηχανήματα του cluster.
  • Ο αγαπητός συνοδοιπόρος στο Aiolos Project, Ηλίας Χρυσοχέρης, σχεδίασε και κατασκεύασε την πλακέτα διανομής τροφοδοσίας: Το Aiolos Cluster τροφοδοτεί τρεις μητρικές, τρεις δίσκους κι έναν μεταγωγέα δικτύου (switch), από ένα και μόνο τροφοδοτικό PC. H πλακέτα διανομής τροφοδοσίας ουσιαστικά χωρίζει την μονή 24pin τροφοδοσία σε τρεις, ενώ ταυτόχρονα παράγει τα 7.5 Volt που απαιτούνται από το switch. Στην πλακέτα αυτή δώσαμε το πιασιάρικο και ψαρωτικό όνομα UPB (Unified Power Board, ναι είμαστε *λίγο* ψώνια).
  • Οι μαθητές είχαν κάνει, σε προηγούμενες συναντήσεις και κατά τη διάρκεια των μαθημάτων, τη βασική εγκατάσταση του FreeBSD και στους τρεις δίσκους των compute nodes.
  • Ο γράφων εγκατέστησε το master node στο laptop του. Εγκαταστάθηκε και γραφικό περιβάλλον KDE, ενώ ρυθμίστηκε ώστε να παρέχει έναν κοινόχρηστο κατάλογο μέσω NFS.

Με όλα τα πράγματα που θα μπορούσαν να πάνε στραβά στα παραπάνω, ο νόμος του Μέρφυ κυριολεκτικά μας ξέχασε: Όλα λειτούργησαν όπως έπρεπε από την πρώτη κιόλας δοκιμή!

Υλικό Aiolos Project, μέρος 2
Όπως είπαμε ήδη, το Aiolos Project διαθέτει τρεις μητρικές για τα compute nodes. Οι δύο από αυτές είναι ολόιδιες αλλά η μία είναι παλιότερη και αισθητά πιο αργή (μην το πείτε παραέξω). Όλες είναι σε mini-ITX form factor και άρα εξαιρετικά μικρές. Καμιά δεν διαθέτει ανεμιστήρα, καθώς οι επεξεργαστές τους (Atom / Celeron) είναι ιδιαίτερα αποδοτικοί και καταναλώνουν ελάχιστο ρεύμα: αυτό το χαρακτηριστικό τους άλλωστε μας επιτρέπει να τις τροφοδοτήσουμε από ένα μόνο τροφοδοτικό.

Είχαμε από την αρχή αποφασίσει ότι οι μητρικές θα τοποθετηθούν σε μια διάταξη τύπου stack, η μια πάνω από την άλλη, με κατάλληλο διάκενο το οποίο θα εξασφαλίζει τόσο την ψύξη όσο και τη διασύνδεση των καλωδίων τροφοδοσίας και των σκληρών δίσκων. Σε κάθε περίπτωση, προμηθευτήκαμε καλώδια SATA 90 εκατοστών (ευτυχώς που υπάρχει το eBay) για να είμαστε σίγουροι ότι θα φτάσουν από κάθε μητρική μέχρι τη βάση της κατασκευής (που στεγάζει δίσκους, switch και τροφοδοτικό).

Οι μητρικές στηρίχτηκαν σε τέσσερις ντίζες, χρησιμοποιώντας ροδέλες και παξιμάδια. Το επίπονο έργο της ευθυγράμμισης και ρύθμισης των αποστάσεων ανέλαβε ο γνωστός FreeBSDer μαθητής του τομέα Ηλεκτρονικής, Νίκος Καμπουράκης. Το τελικό αποτέλεσμα το βλέπετε στην εικόνα 1.

Εικόνα 1. Οι τρεις μητρικές στηριγμένες κι ευθυγραμμισμένες σε ντίζες. Αναμένεται να μπουν στο plexiglass για την ολοκλήρωση της κατασκευής.

Σε δεύτερη φάση, το όλο σύστημα θα συναρμολογηθεί σε plexiglass, το οποίο θα δώσει και την απαραίτητη σταθερότητα. Μπορείτε να πάρετε μια ιδέα για το πως θα δείχνει στο screenshot από το Blender, που δημιούργησε ο Ηλίας Χρυσοχέρης (βλ. εικόνα 2).

Εικόνα 2. Μια δημιουργική απεικόνιση του Aiolos cluster στην τελική του μορφή, μέσα από την εφαρμογή blender.

Όπως παρατηρείτε, το σύστημα θα διαθέτει κι έναν μεγάλο ανεμιστήρα για την ψύξη όλων των μητρικών. Δεν είναι τόσο ότι το χρειάζεται, αλλά πού ξανακούστηκε cluster χωρίς ενεργή ψύξη (και κατασκευή σε plexiglass χωρίς φωτάκια — εννοείται ότι πρόκειται για φωτιζόμενο ανεμιστήρα). Ας δούμε όμως λίγο και την πλακέτα διανομής τροφοδοσίας.

Unified Power Board
Μπορεί το όνομα να είναι ψαρωτικό, όμως στην πραγματικότητα πρόκειται για μια απλή κατασκευή: Η κεντρική παροχή 24pin από το ATX τροφοδοτικό συνδέεται πάνω στην πλακέτα από την οποία διακλαδίζεται σε τρεις 20pin παροχές (οι μητρικές μας δεν έχουν πρόβλημα να λειτουργήσουν και χωρίς τα προαιρετικά 4 έξτρα pins που είναι πλέον το standard). Από όλες τις μητρικές, μόνο η παλιότερη Atom motherboard χρειάζεται επίσης το χωριστό βύσμα 4 pin 12 Volt, οπότε δεν είναι απαραίτητο να διακλαδώσουμε το συγκεκριμένο.

Στην εικόνα 3 μπορείτε να δείτε την πλακέτα πριν τη συναρμολόγηση της, ενώ στην εικόνα 4 θα την παρατηρήσετε να …κρέμεται στο πλάι των compute nodes, καθώς στην κυριολεξία κρατιέται από τα καλώδιά της. Με την ολοκλήρωση της κατασκευής από plexiglass, η πλακέτα θα βιδωθεί σε κάποιο πλαϊνό στήριγμα. Είπαμε να κάνουμε floating point υπολογισμούς, όχι floating PCBs!

Εικόνα 3. To UPB πριν τη συναρμολόγησή του. Πρόκειται για μια απλή πλακέτα, αφού τα μόνα ενεργά εξαρτήματα που έχει είναι το κύκλωμα του σταθεροποιητή LM317 που τροφοδοτεί το switch. Κατά τα άλλα είναι απλές γραμμές μεταφοράς ρεύματος.

Εικόνα 4. To UPB κρέμεται ανάμεσα στις μητρικές. Ευτυχώς δεν είναι βαρύ!

Για να είμαστε πιο πλήρεις, βέβαια, δείτε ολόκληρο το σχηματικό της πλακέτας, στην εικόνα 5. Τα μόνα ενεργά εξαρτήματα της πλακέτας είναι το κύκλωμα παραγωγής σταθεροποιημένης τάσης 7.5 Volts, από τα 12 Volts του τροφοδοτικού μέσω του σταθεροποιητή LM317 που φαίνεται στην πάνω δεξιά γωνία.

Εικόνα 5. Το σχηματικό διάγραμμα του UPB. Πάνω δεξιά το κύκλωμα του σταθεροποιητή 7.5Volts με το LM317.

Στο εμπόριο κυκλοφορούν διάφοροι έτοιμοι σταθεροποιητές που μας επιτρέπουν να παράγουμε μία σταθεροποιημένη τάση από μία άλλη. Μία γνωστή σειρά σταθεροποιητών είναι οι LM78XX, όπου το ΧΧ δίνει την τάση εξόδου. Για παράδειγμα, ένας σταθεροποιητής LM7805 δίνει τάση εξόδου 5V, ένας 7812 δίνει 12V κι ένας 7875 δίνει τάση 7.5V (όχι 75). Υπάρχουν επίσης και οι ρυθμιζόμενοι σταθεροποιητές, όπως το μοντέλο LM317 που χρησιμοποιήσαμε, στο οποίο ρυθμίζουμε την τάση εξόδου με το λόγο δύο αντιστάσεων. Στο σχήμα μας, πρόκειται για τις αντιστάσεις R_1 και R_2.

Γενικά, για τον υπολογισμό των δύο αντιστάσεων η τιμή της αντίστασης R_2 θα πρέπει να είναι περίπου 240Ω, ενώ ο υπολογισμός της R_1 μπορεί να γίνει από τον τύπο

V_{out} = 1.25 \cdot (1 + \frac{R_1}{R_2}) + I_{ADJ} R_1[latex]</p> <p>Το [latex]I_{ADJ} είναι το ρεύμα που διαρρέει τον ακροδέκτη Adj του ολοκληρωμένου κυκλώματος. Αυτό γενικά είναι αμελητέο (50 έως 100μΑ) και με ασφάλεια μπορούμε να θεωρήσουμε ότι είναι μηδέν. Έτσι, λύνοντας τη σχέση ως προς R_1 έχουμε:

R_{1} = \frac{(V_{out} - 1.25) \cdot R_{2}}{1.25}

Οι πυκνωτές που υπάρχουν στο κύκλωμα είναι για την εξομάλυνση της τάσης εξόδου, αλλά και τη μείωση των παρασιτικών συχνοτήτων που εμφανίζονται στο κύκλωμα της τροφοδοσίας του όλου του συστήματος.

Όταν το σύστημα σβήσει, οι τάσεις των πυκνωτών που παραμένουν έως ότου αυτοί αποφορτιστούν, είναι δυνατόν να δημιουργήσουν ανάστροφη κατάσταση στο σταθεροποιητή, π.χ., 7.5V στην έξοδο από την παραμένουσα τάση του C4, ενώ στην είσοδό του να είναι μηδενισμένη λόγω του ότι το τροφοδοτικό έχει απενεργοποιηθεί. Το αποτέλεσμα θα είναι να υπάρξουν ανάστροφα ρεύματα μέσα στο σταθεροποιητή, με κίνδυνο την καταστροφή του. Αυτός είναι και ο λόγος ύπαρξης των δύο διόδων D1 και D2. Αυτές οδηγούν το φορτίο των πυκνωτών στην είσοδο, παρακάμπτοντας τα εσωτερικά κυκλώματα του σταθεροποιητή και ουσιαστικά προστατεύοντάς τον. Όχι παίζουμε!

Aiolos Project Software, μέρος 2
Από τις απλές μας σημειώσεις (http://aiolos.freebsdworld.gr/sites/default/files/install101.pdf) έχουμε ήδη εγκαταστήσει το βασικό σύστημα του FreeBSD και στις τρεις μητρικές. Κατά τη διάρκεια της εγκατάστασης παρατηρήσαμε τα ακόλουθα:

  1. Στις δύο νέες μητρικές Asrock Q1900b-ITX η κάρτα ήχου δεν λειτουργούσε μέχρι να κάνουμε κάποιες αλχημείες. Φυσικά οι κάρτες ήχου είναι αδιάφορες για το Aiolos, αλλά κάποια στιγμή οι μητρικές θα χρησιμοποιηθούν αλλού και το θέμα έπρεπε να διερευνηθεί :)
  2. Δεν υπάρχει τη δεδομένη στιγμή κατάλληλος Xorg driver στο FreeBSD Ports Collection, για το συγκεκριμένο Intel HD chipset. Έτσι, το περιβάλλον γραφικών δεν μπορεί να τρέξει παρά μόνο με τον VESA driver. Λεπτομέρεια: Τα compute nodes δεν έχουν περιβάλλον γραφικών, αλλά διαβάστε ξανά το 1.
  3. Η μητρική με τον Atom (Intel D525MW) δεν έχει θέμα με τα παραπάνω αλλά αρνείται πεισματικά να κάνει boot οτιδήποτε έχει GPT partitions. Γι' αυτό και χρησιμοποιήσαμε standard MBR partitions.
  4. To Acer laptop του γράφοντα τρέχει FreeBSD άψογα, συμπεριλαμβανομένου του περιβάλλοντος γραφικών. Υποστηρίζει δε τον ελεγκτή Ethernet, εκείνον για την ασύρματη δικτύωση, καθώς κι αυτόν του ήχου. Επίσης, κάνει boot μέσω UEFI. Η εγκατάσταση του FreeBSD έγινε με το αντίστοιχο UEFI memstick image.

Όμως η βασική εγκατάσταση του FreeBSD, από μόνη της δεν αρκεί: Χρειάζεται να εγκαταστήσουμε και μια σειρά από προγράμματα στα compute nodes, καθώς και να κάνουμε τις απαραίτητες ρυθμίσεις. Σε γενικές γραμμές:

  • Εγκαθιστούμε τα απαραίτητα προγράμματα κονσόλας στα compute nodes (bash, zip, unzip, unrar, screen, sudo) και κάνουμε τις απαραίτητες ρυθμίσεις όπως, αναφέρονται στις εισαγωγικές σημειώσεις.
  • Εγκαθιστούμε το OpenMPI και πραγματοποιούμε ορισμένες απαραίτητες ρυθμίσεις. Κατ' αρχάς τα εκτελέσιμα του OpenMPI δεν είναι στο path και πρέπει να το προσθέσουμε στο ~/.profile του χρήστη. Πρέπει ακόμα να δημιουργήσουμε ένα συμβολικό δεσμό του προγράμματος orted, στο /usr/local/bin. To orted είναι υπεύθυνο για την εκκίνηση του προγράμματος στα compute nodes, όταν ξεκινήσουμε την εκτέλεσή του στο master node.
  • Για το Aiolos cluster αποφασίσαμε να παράσχουμε τη δυνατότητα εκτέλεσης προγραμμάτων *και* σε Python. Προφανώς είναι λίγο παράδοξο να εκτελούμε interpreted γλώσσα σε cluster --η ταχύτητα δεν θα είναι και η καλύτερη-- αλλά ας μην ξεχνάμε τον εκπαιδευτικό σκοπό του πράγματος (θα είναι κάπως πιο εύκολο να εξηγούμε τα προγράμματα στους μαθητές). Οπότε πρέπει να εγκαταστήσουμε το mpi4py, τη βιβλιοθήκη για διασύνδεση του OpenMPI με την Python. Για να γίνει αυτό πρέπει να εγκαταστήσουμε το pip utility.

Στο master node κάνουμε όλα τα προηγούμενα, αλλά εγκαθιστούμε ακόμα περιβάλλον γραφικών καθώς και το πρόγραμμα wxGlade, προκειμένου να δημιουργήσουμε (μελλοντικά) μια εφαρμογή γραφικών με τη βιβλιοθήκη wx. (Οι παλιοί αναγνώστες θα τη θυμούνται: Την έχουμε χρησιμοποιήσει στη σειρά άρθρων προγραμματισμού γραφικών με Python, η οποία ξεκινά από το τεύχος 012 του deltaHacker). Επιπλέον, έχουμε να φροντίσουμε και για τα ακόλουθα.

  • Να δημιουργήσουμε ένα κοινόχρηστο κατάλογο στο master node και να τον προσαρτήσουμε σε όλα τα nodes. Ο ευκολότερος τρόπος είναι μέσω του συτήματος NFS.
  • Να εξασφαλίσουμε ότι όλα τα μηχανήματα γνωρίζονται μεταξύ τους με τα ονόματα τους: ο απλούστερος τρόπος για να γίνει αυτό είναι να τροποποιήσουμε το αρχείο /etc/hosts και να το διανείμουμε σε όλα τα nodes. Αυτό βέβαια προϋποθέτει στατικές διευθύνσεις IP για όλα τα nodes. Έχοντας χρησιμοποιήσει δυναμικές διευθύνσεις στην αρχική εγκατάσταση, πρέπει τώρα να τις αλλάξουμε επεμβαίνοντας στα /etc/rc.conf και /etc/resolv.conf.
  • Πρέπει να παράγουμε κλειδιά SSH στο master node, ώστε να μπορεί να συνδέεται με τα compute nodes αυτόματα και χωρίς χρήση κωδικού (Σ.τ.Ε. Δείτε και αυτό). Κανονικά τα κλειδιά πρέπει να αντιγραφούν σε όλα τα nodes αλλά στην περίπτωσή μας δεν χρειάζεται, καθώς ο κατάλογος του χρήστη είναι ήδη κοινόχρηστος και προσαρτάται κατά την εκκίνηση από όλα τα compute nodes. Λεπτομέρεια: πρέπει να εκκινήσουμε πρώτα το master node και μετά τα compute nodes. Ο τερματισμός πρέπει να γίνει με ανάποδη σειρά.

Έχετε ήδη ζαλιστεί από όλες αυτές τις ρυθμίσεις; Μη τρελαίνεστε. Μπορείτε να τα διαβάσετε όλα αναλυτικά στο τρίτο μέρος των σημειώσεών μας.

Εγκατάσταση και πρώτη δοκιμή
Στις 12/03/2015, στις 11:45 το πρωί, στο εργαστήριο του σχολείου μαζεύτηκε όλη η ομάδα του Aiolos Project για την τελική σύνδεση και πρώτη δοκιμή του cluster. Η ημερομηνία δεν επιλέχθηκε τυχαία: το 12 είναι ο τυχερός αριθμός του γράφοντα και η επόμενη μέρα ήταν Παρασκευή και 13. Μερικές φορές είναι καλύτερα να μην προκαλούμε τη τύχη μας :)

Με τρεις μητρικές σε ένα τροφοδοτικό υπάρχει και το ενδιαφέρον πρόβλημα της ενεργοποίησής τους. Ο γράφων είχε προβλέψει να ρυθμίσει από πριν το BIOS και στις τρεις, ώστε να ενεργοποιούνται αυτόματα με την παροχή ρεύματος (επιλογή PWR after power fail: Always on). Συνδέθηκε το UPB και --αφού κρατήσαμε όλοι την ανάσα μας-- ενεργοποιήθηκε το τροφοδοτικό. Ευτυχώς δεν είδαμε καπνό, ενώ τα beep που ακούστηκαν μας επιβεβαίωσαν ότι τα compute nodes ξεκίνησαν. Συνδέσαμε οθόνη και πληκτρολόγιο σε ένα από αυτά και με ικανοποίηση το είδαμε να εκκινεί κανονικά το FreeBSD.

Δώσαμε το πληκτρολόγιο σε ένα μαθητή, ενώ ταυτόχρονα προβάλλαμε την οθόνη του μέσω του projector. Η ομάδα των μαθητών ανέλαβε εναλλάξ να κάνει τις ρυθμίσεις σε κάθε compute node, κάνοντας ssh από το ένα node στο άλλο.

Το laptop με το master node το ανέλαβε αποκλειστικά ο μαθητής μας Μανώλης Βεργεράκης, ο οποίος ανέλαβε και το δύσκολο έργο να κάνει όλες τις ρυθμίσεις του (NFS, SSH κ.ά.). Μετά από περίπου 2.30 ώρες το εγχείρημα είχε ολοκληρωθεί. Ύστερα από μερικές δοκιμές και μια επανεκκίνηση των compute nodes, διαπιστώσαμε ότι το NFS και το SSH λειτουργούσαν κανονικά και εκτελέσαμε με επιτυχία το hellompi.py, σε 14 πυρήνες. Aiolos Project went Live!

Επόμενα Βήματα
Μένει ακόμα να γράψουμε προγράμματα για το cluster! Προφανώς, δεν το φτιάξαμε για να τρέξουμε το hellompi. Δεν έχουμε βέβαια πολύ χρόνο: το Aiolos Project θα παρουσιαστεί αρχές Απριλίου στην έκθεση μαθητικής δημιουργίας. Φυσικά έχουμε ακόμα και την ολοκλήρωση της συναρμολόγησης με το plexiglass. Είμαστε όμως πολύ αισιόδοξοι, καθώς διαθέτουμε ήδη ένα cluster που λειτουργεί.

Εικόνα 6. Η εγκατάσταση του master node. Ακόμα εφιάλτες βλέπει ο μαθητής μας, με τόσες ακατάληπτες εντολές που πληκτρολόγησε :)

Παρακολουθήστε και εσείς την εξέλιξη του πρότζεκτ στη σελίδα μας στο Facebook και φυσικά στην επίσημη τοποθεσία του εγχειρήματος. Ακόμα καλύτερα, ξεκινήστε και εσείς το δικό σας cluster! Σας πάμε μια κόντρα ;)

Εικόνα 7. Success! To Aiolos cluster εκτελεί το hellompi για πρώτη φορά. Κι ο Μέρφυ πουθενά!

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων