Ιδρυματικό Αποθετήριο
Πολυτεχνείο Κρήτης
EN  |  EL

Αναζήτηση

Πλοήγηση

Ο Χώρος μου

Ένα πλαίσιο συνελικτικού νευρωνικού δικτύου επιταχυνόμενο από μια συστοιχία επιτόπια προγραμματιζόμενων πυλών σε συνθέσιμη C

Chatzidaki Eleftheria

Πλήρης Εγγραφή


URI: http://purl.tuc.gr/dl/dias/4C34ED31-D06E-45FE-84C9-75BFED531D44
Έτος 2019
Τύπος Διπλωματική Εργασία
Άδεια Χρήσης
Λεπτομέρειες
Βιβλιογραφική Αναφορά Ελευθερία Χατζηδάκη, "Ένα πλαίσιο συνελικτικού νευρωνικού δικτύου επιταχυνόμενο από μια συστοιχία επιτόπια προγραμματιζόμενων πυλών σε συνθέσιμη C", Διπλωματική Εργασία, Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών, Πολυτεχνείο Κρήτης, Χανιά, Ελλάς, 2019 https://doi.org/10.26233/heallink.tuc.83856
Εμφανίζεται στις Συλλογές

Περίληψη

Σήμερα, τα Συνελικτικά Νευρωνικά Δίκτυα(CNN) είναι γνωστά για την αναγνώριση και ταξινόμηση εικόνων. Προτιμούμε να τα χρησιμοποιούμε, λόγω το ότι επιτυγχάνουν υψηλή ακρίβεια, εκμεταλλευόμενα τις εγγενείς ιδιότητες των εικόνων. Ένα σημαντικό μειονέκτημα των Συνελικτικών Νευρωνικών Δικτύων είναι ότι εκτελούν πολλούς και πολύπλοκους υπολογισμούς, οι οποίοι απαιτούν χρόνο, ενεργειακή κατανάλωση και πόρους. Η καλύτερη λύση που μπορούμε να προτείνουμε είναι να εκμεταλλευτούμε τις ιδιότητες μιας συστοιχίας επιτόπια προγραμματιζόμενων πυλών(FPGA). Οι συστοιχίες επιτόπια προγραμματιζόμενων πυλών ειδικεύονται στην επιτάχυνση των πράξεων και καταναλώνουν λιγότερη ενέργεια από μια μονάδα επεξεργασίας γραφικών(GPU) ή μια κεντρική μονάδα επεξεργασίας(CPU).Προτείνουμε ένα πλαίσιο γραμμένο σε C++ στο οποίο μπορούν να προσαρμοστούν μονάδες συστοιχίας επιτόπια προγραμματιζόμενων πυλών και να επιταχύνει τους υπολογισμούς, όπως τους πολλαπλασιασμούς πινάκων. Συνδέσαμε μια διαθέσιμη μονάδα πολλαπλασιασμού πινάκων με πρόσθεση στο πλαίσιο και το δοκιμάσαμε σε μια πλατφόρμα Trenz. Εκτός από αυτό, υλοποιήσαμε ένα πλαίσιο γρήγορης απόδοσης με επίγνωση μνήμης, που χρησιμοποιεί OpenMP, GCC επιλογές παραμέτρων, επιλογές παραμέτρων περιβάλλοντος OpenMP και δυνατότητες από την έκδοση της C ++ 17. Το πλαίσιο Συνελικτικών Νευρωνικών Δικτύων μας δοκιμάστηκε σε αρχιτεκτονική LeNet-5 χρησιμοποιώντας το MNIST σύνολο δεδομένων και περιλαμβάνει L1, L2 κανονικοποιήσεις βαρών, Vanilla, Momentum, Momentum with Nesterov ενημερώσεις βαρών, He-et-al αρχικοποίηση βαρών, Fisher-Yates ανακατάταξη εικόνων, Στοχαστική Ελάττωση της Παραγώγου, τεχνικές οι οποίες είναι όλες υλοποιημένες από την αρχή. Επιπρόσθετα, υλοποιήθηκαν 3 τρόποι φόρτωσης του συνόλου δεδομένων MNIST στη μνήμη, καθώς επίσης αλγόριθμοι απλής υλοποίησης, ομαδοποίησης μνήμης, OpenMP, Υβριδική υλοποίηση ομαδοποίησης μνήμης με OpenMP για πολλαπλασιασμό πινάκων, μετάθεσης και αντιγραφής, οι οποίοι δοκιμάστηκαν και παρατηρήθηκαν οι συμπεριφορές τους χρησιμοποιώντας διάφορα μεγέθη μικρο-πακέτων και νημάτων προς χρήση.Εκτός από όλα τα παραπάνω που έγιναν από το μηδέν, χρησιμοποιήσαμε το εργαλείο Xilinx Vivado SDK για να δημιουργήσουμε ένα πρόγραμμα C χωρίς λειτουργικό, με τις κατάλληλες παραμετροποιήσεις στα συνδετικά αρχεία μνήμης και προσαρμόσαμε τον κώδικα του πολλαπλασιασμού πινάκων με πρόσθεση, στο πλαίσιο μας. Έπειτα, προγραμματίσαμε την πλατφόρμα Trenz που περιλαμβάνει μια ARM κεντρική μονάδα επεξεργασίας και ένα επιταχυντή συστοιχίας επιτόπια προγραμματιζόμενων πυλών. Σαν αποτέλεσμα, επιτύχαμε 4.3x-8.5x καλύτερη απόδοση χρησιμοποιώντας την υλοποίηση του πολλαπλασιασμού πινάκων με πρόσθεση, στη συστοιχία επιτόπια προγραμματιζόμενων πυλών απ’ ότι στον αλγόριθμο απλής υλοποίησης ή ομαδοποίησης μνήμης σε ένα νήμα, και σε κάποιες («άδικες» - λόγω του ότι δεν είχαμε χρήση πολλαπλών νημάτων στην πλατφόρμα Trenz) περιπτώσεις, ανάλογα με το μέγεθος των μικρο-πακέτων σε πολλαπλά νήματα, στην OMP(up to 1.27x) ή στον υβριδικό αλγόριθμο (up to 2.27x) στην κεντρική μονάδα επεξεργασίας.

Διαθέσιμα αρχεία

Υπηρεσίες

Στατιστικά