Νέα

Χιλιάδες λέξεις τεχνικών πληροφοριών! Ένας οδηγός ποσοτικοποίησης που πρέπει να διαβάσετε για μηχανικούς LLM, οπτικές απεικονίσεις αποκαλύπτουν πώς να συμπιέσετε μεγάλα μοντέλα

2024-07-31

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


Νέα Έκθεση Σοφίας

Επιμέλεια: Τμήμα Σύνταξης

[Εισαγωγή στη Νέα Σοφία] Αντιμέτωποι με τη σταδιακά επεκτεινόμενη κλίμακα παραμέτρων του LLM, προγραμματιστές και ερευνητές χωρίς το H100 έχουν βρει πολλούς τρόπους για να το αντισταθμίσουν, και η τεχνολογία "ποσοτικοποίησης" είναι ένας από αυτούς. Αυτός ο οπτικός οδηγός χρησιμοποιεί διάφορες απεικονίσεις για να συνοψίσει αναλυτικά τις βασικές έννοιες και τις μεθόδους διακλάδωσης της «ποσοτικοποίησης».

Τα μοντέλα μεγάλων γλωσσών (LLM) είναι συχνά πολύ μεγάλα για να λειτουργούν σε υλικό καταναλωτικής ποιότητας. Αυτά τα μοντέλα μπορεί να έχουν περισσότερες από δισεκατομμύρια παραμέτρους και συχνά απαιτούν GPU με μεγάλη μνήμη για να επιταχύνουν τη διαδικασία εξαγωγής συμπερασμάτων.

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

Ο μηχανικός ML Maarten Grootendorst έγραψε μια ανάρτηση ιστολογίου που εισάγει συγκεκριμένα την τεχνολογία ποσοτικοποίησης στο πλαίσιο της μοντελοποίησης γλώσσας και διερευνά σχετικές έννοιες μία προς μία μέσω οπτικών μεθόδων για να μας βοηθήσει να οικοδομήσουμε μια διαισθητική κατανόηση της τεχνολογίας.


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

Ο πίνακας περιεχομένων και το περιεχόμενο του άρθρου παρουσιάζονται στο παρακάτω σχήμα. Εισάγει κυρίως τις δύο μεθόδους ποσοτικοποίησης μετά την εκπαίδευση (PTQ) και εκπαίδευσης με επίγνωση κβαντισμού (QAT). απευθείας στο συμμετρικό τμήμα κβαντοποίησης:


Μέρος Πρώτο: Το «Πρόβλημα» του LLM

Τα "μεγάλα γλωσσικά μοντέλα" είναι μεγάλα ως προς τον αριθμό των παραμέτρων του μοντέλου, που συνήθως αγγίζουν τα δισεκατομμύρια σε κλίμακα (κυρίως βάρη).

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

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


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

Ας ξεκινήσουμε από την αρχή και ας εξερευνήσουμε πώς αναπαρίστανται οι τιμές πριν από τη βελτιστοποίηση.

Πώς να αναπαραστήσετε αριθμητικές τιμές

Οι αριθμητικές τιμές αποθηκεύονται συνήθως ως αριθμοί κινητής υποδιαστολής (ή απλώς αιωρούνται): ένας θετικός ή αρνητικός αριθμός με υποδιαστολή.

Αυτές οι τιμές αντιπροσωπεύονται από δυαδικά ψηφία σε κάθε bit.

Το πρότυπο IEEE-754 περιγράφει πώς τα ψηφία σε κάθε ψηφίο αντιπροσωπεύουν μια συγκεκριμένη τιμή. Συγκεκριμένα, υπάρχουν τρεις αντιστοιχίσεις: πρόσημο, εκθέτης ή δεκαδικός (mantissa).


Αυτά τα τρία μέρη μπορούν να συνδυαστούν για τον υπολογισμό της αντιπροσωπευόμενης τιμής με βάση ένα σύνολο τιμών bit:


Όσο περισσότερα ψηφία χρησιμοποιούνται, τόσο πιο ακριβής είναι η αριθμητική τιμή. Για παράδειγμα, η φόρμα FP32 μπορεί να είναι ακριβής σε περισσότερα ψηφία μετά την υποδιαστολή από την FP16:


όριο μνήμης

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


Δεδομένου ενός αριθμού bit και μιας αναπαράστασης, το εύρος των τιμών που μπορεί να αναπαρασταθεί ονομάζεται δυναμικό εύρος και η απόσταση μεταξύ δύο γειτονικών τιμών ονομάζεται ακρίβεια.


Ένα καθαρό χαρακτηριστικό αυτής της αναπαράστασης είναι ότι μπορούμε να υπολογίσουμε πόση μνήμη χρειάζεται η συσκευή για να αποθηκεύσει μια δεδομένη τιμή.

Δεδομένου ότι κάθε byte στη μνήμη περιέχει 8 bit, μπορούμε να δημιουργήσουμε έναν βασικό τύπο για τις περισσότερες μορφές αριθμών κινητής υποδιαστολής -


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

Τώρα φανταστείτε ότι έχουμε ένα μοντέλο με 70 δισεκατομμύρια παραμέτρους. Τα περισσότερα μοντέλα αναπαρίστανται χρησιμοποιώντας αριθμούς κινητής υποδιαστολής 32-bit (συχνά ονομάζονται πλήρης ακρίβεια), που απαιτούν 280 GB μνήμης για τη φόρτωση του μοντέλου.


Αλλά εάν όλες οι παράμετροι μπορούν να εκφραστούν ως αριθμοί κινητής υποδιαστολής 16-bit, το απαιτούμενο μέγεθος μνήμης μπορεί να μειωθεί άμεσα κατά μία φορά.

Επομένως, είναι πολύ ελκυστικό να ελαχιστοποιηθεί ο αριθμός των αναπαραστάσεων των παραμέτρων του μοντέλου (όχι μόνο για συμπεράσματα αλλά και για εκπαίδευση).

Ωστόσο, αυτή η προσέγγιση δεν έρχεται χωρίς κόστος. Η ακρίβεια του μοντέλου τυπικά μειώνεται καθώς μειώνεται ο αριθμός των bits αναπαράστασης με αποτέλεσμα τη μειωμένη ακρίβεια.

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

Μέρος 2: Εισαγωγή στην ποσοτικοποίηση

Γνωρίζουμε τώρα ότι ο σκοπός της κβαντοποίησης είναι να μειώσει την ακρίβεια των παραμέτρων του μοντέλου από μεγαλύτερα πλάτη bit (όπως αριθμοί κινητής υποδιαστολής 32 bit) σε χαμηλότερα πλάτη bit (όπως ακέραιοι αριθμοί 8 bit).


Όταν μειώνεται ο αριθμός των bit που αντιπροσωπεύουν τις αρχικές παραμέτρους, υπάρχει συνήθως μια συνοδευτική απώλεια κάποιας ακρίβειας (κοκκοποίηση).

Για να κάνουμε αυτό το εφέ πιο διαισθητικό, μπορούμε να χρησιμοποιήσουμε χρώματα φωτογραφιών ως αναλογία. Για παράδειγμα, επιλέξτε οποιαδήποτε εικόνα (αριστερά), αλλά χρησιμοποιήστε μόνο 8 χρώματα (δεξιά):


Σημειώστε ότι το μεγεθυσμένο μπισκότο φαίνεται πιο «κοκκώδες» από το πρωτότυπο.

Ομοίως, ο κύριος στόχος της κβαντοποίησης είναι να μειωθεί ο αριθμός των δυαδικών ψηφίων (χρωμάτων) που απαιτούνται για την αναπαράσταση των αρχικών παραμέτρων, διατηρώντας παράλληλα όσο το δυνατόν μεγαλύτερη ακρίβεια των αρχικών παραμέτρων.

Κοινοί τύποι δεδομένων

Αρχικά, ας δούμε τους κοινούς τύπους δεδομένων και τον αντίκτυπο της χρήσης τους αντί της αναπαράστασης 32 bit (που ονομάζεται πλήρης ακρίβειας ή FP32).

ΠΠ16

Το πρώτο είναι ένα παράδειγμα μετάβασης από 32-bit σε 16-bit (που ονομάζεται μισή ακρίβεια ή FP16) κινητής υποδιαστολής:


Το εύρος των πιθανών τιμών για το FP16 είναι πολύ μικρότερο από αυτό για το FP32.

BF16

Προκειμένου να ληφθεί ένα παρόμοιο αριθμητικό εύρος με το αρχικό FP32, το bfloat 16 εισήχθη ως τύπος "κολοβωμένης FP32":


Το BF16 χρησιμοποιεί τον ίδιο αριθμό bit με το FP16, αλλά προσθέτει ένα εκθετικό bit, ώστε να μπορεί να αποκτήσει ένα ευρύτερο φάσμα τιμών και χρησιμοποιείται συχνά στον τομέα της βαθιάς μάθησης.

INT8

Καθώς μειώνετε τον αριθμό των bit περαιτέρω, η αναπαράσταση γίνεται πιο κοντά σε έναν ακέραιο παρά σε έναν αριθμό κινητής υποδιαστολής. Για παράδειγμα, πηγαίνοντας από το FP32 στο INT8 που έχει μόνο 8 bit, μόνο το 1/4 του αρχικού αριθμού bit:


Κάθε φορά που μειώνεται ο αριθμός των bit, εκτελείται μια αντιστοίχιση για να «συμπιεστεί» η αρχική αναπαράσταση FP32 σε λιγότερα bit.

Αλλά στην πραγματική λειτουργία, δεν χρειάζεται να αντιστοιχίσουμε ολόκληρη την περιοχή FP32 [-3.4e38, 3.4e38] σε INT8. Πρέπει απλώς να βρούμε έναν τρόπο να αντιστοιχίσουμε το εύρος δεδομένων των πραγματικών παραμέτρων του μοντέλου στο INT8.

Οι συνήθεις μέθοδοι συμπίεσης/χαρτογράφησης περιλαμβάνουν τη συμμετρική κβαντοποίηση και την ασύμμετρη κβαντοποίηση, και οι δύο είναι γραμμική χαρτογράφηση.

Αυτό που θα συζητήσουμε στη συνέχεια είναι η μέθοδος κβαντοποίησης από το FP32 στο INT8.

Συμμετρική κβαντοποίηση

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

Αυτό σημαίνει ότι το αρχικό μηδέν στο χώρο κινητής υποδιαστολής είναι ακριβώς μηδέν αφού αντιστοιχιστεί στον κβαντισμένο χώρο.


Χαρακτηριστικό παράδειγμα συμμετρικής κβαντοποίησης είναι η απόλυτη μέγιστη (absmax) κβαντοποίηση.

Δεδομένης μιας λίστας τιμών, λαμβάνουμε την υψηλότερη απόλυτη τιμή (α) ως εύρος για την εκτέλεση γραμμικής αντιστοίχισης.


Το [-127, 127] αντιπροσωπεύει το περιορισμένο εύρος και το απεριόριστο εύρος είναι [-128, 127], ανάλογα με τη μέθοδο κβαντοποίησης

Δεδομένου ότι αυτός είναι ένας γραμμικός χάρτης με κέντρο στο μηδέν, ο τύπος είναι απλός.

Αρχικά υπολογίστε τον συντελεστή κλίμακας χρησιμοποιώντας τον ακόλουθο τύπο:

- b είναι ο αριθμός των byte που θέλουμε να κβαντίσουμε σε (8)

- Το α είναι η υψηλότερη απόλυτη τιμή

Στη συνέχεια χρησιμοποιούμε s για να κβαντίσουμε την είσοδο x:


Όπως φαίνεται στο παραπάνω σχήμα, η μέγιστη απόλυτη τιμή α είναι 10,8 Κατά την αντιστοίχιση του FP32 στο INT8, προκύπτει ο ακόλουθος τύπος:


Εάν θέλετε να επαναφέρετε τις αρχικές τιμές FP32, μπορείτε επίσης να χρησιμοποιήσετε τους προηγουμένως υπολογισμένους συντελεστές κλίμακας για την αντίστροφη κβαντοποίηση.


Πρώτα κβαντίστε και μετά αποκβαντίστε για να επαναφέρετε την αρχική τιμή Η όλη διαδικασία είναι η εξής:


Μπορείτε να δείτε ότι ορισμένες τιμές, όπως το 3,08 και το 3,02, είναι και οι δύο 36 όταν κβαντίζονται σε INT8. Έτσι, όταν αποκβαντωθούν πίσω στο FP32, χάνουν κάποια ακρίβεια και δεν διακρίνονται πλέον.

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


ασύμμετρη κβαντοποίηση

Σε αντίθεση με τη συμμετρική κβαντοποίηση, η ασύμμετρη κβαντοποίηση δεν είναι μηδενοκεντρική συμμετρία. Αντίθετα, αντιστοιχίζει τις ελάχιστες (β) και τις μέγιστες (α) τιμές του εύρους κινητής υποδιαστολής στις ελάχιστες και μέγιστες τιμές του κβαντισμένου εύρους, αντίστοιχα.

Η μέθοδος που εξερευνούμε εδώ ονομάζεται κβαντοποίηση μηδενικού σημείου.


Παρατηρήστε πώς έχει μετακινηθεί η θέση του 0. Γι' αυτό ονομάζεται ασύμμετρη κβαντοποίηση. Στην περιοχή [-7,59, 10,8], οι μέγιστες και ελάχιστες τιμές βρίσκονται σε διαφορετικές αποστάσεις από το 0.

Λόγω της μετατόπισης της θέσης μηδενικού σημείου, πρέπει να υπολογίσουμε το σημείο μηδέν στην περιοχή INT8 για να εκτελέσουμε γραμμική χαρτογράφηση. Όπως και πριν, πρέπει επίσης να υπολογίσουμε τον συντελεστή κλίμακας (s), αλλά χρησιμοποιώντας τη διαφορά στο εύρος INT8 [-128, 127].


Αυτό είναι λίγο περίπλοκο καθώς το σημείο μηδέν (z) πρέπει να υπολογιστεί στην περιοχή INT8 για να μετακινηθούν τα βάρη.

Όπως και πριν, ας συμπληρώσουμε τον τύπο:


Για να αποκβαντοποιήσουμε την κβαντισμένη τιμή από το INT8 πίσω στο FP32, πρέπει να χρησιμοποιήσουμε τον προηγουμένως υπολογισμένο συντελεστή κλίμακας (s) και το σημείο μηδέν (z).

Διαφορετικά, η αποκβάντωση είναι απλή:


Όταν βάζουμε τη συμμετρική και την ασύμμετρη κβαντοποίηση δίπλα-δίπλα, μπορούμε να δούμε γρήγορα τη διαφορά μεταξύ των δύο μεθόδων:


Στην παραπάνω εικόνα, μπορούμε να δούμε το χαρακτηριστικό μηδενικού κέντρου της συμμετρικής κβαντοποίησης και τη μετατόπιση της ασύμμετρης κβαντοποίησης.

Αντιστοίχιση εύρους και αποκοπή (Clipping)

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

Φανταστείτε ότι έχετε ένα διάνυσμα που περιέχει τις ακόλουθες τιμές:


Μια τιμή που είναι πολύ μεγαλύτερη από όλες τις άλλες μπορεί να θεωρηθεί ακραία. Εάν αντιστοιχίσουμε ολόκληρο το εύρος των διανυσμάτων, όλες οι μικρές τιμές θα αντιστοιχιστούν στην ίδια αναπαράσταση χαμηλής τάξης και θα χάσουν τη διακριτικότητά τους:


Αυτή είναι η μέθοδος absmax που χρησιμοποιήθηκε πριν.Το ίδιο συμβαίνει και με την ασύμμετρη κβαντοποίηση χωρίς ψαλιδισμό

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

Στο παρακάτω παράδειγμα, ορίσαμε χειροκίνητα το δυναμικό εύρος σε [-5, 5] και όλες οι τιμές εκτός αυτού του εύρους θα αντιστοιχιστούν σε -127 ή 127, ανεξάρτητα από την πραγματική τους τιμή:


Το κύριο πλεονέκτημα αυτής της προσέγγισης είναι ότι το σφάλμα κβαντισμού για μη ακραίες τιμές μειώνεται σημαντικά. Ωστόσο, θα οδηγήσει σε αυξημένο σφάλμα κβαντισμού για ακραίες τιμές.

Βαθμονόμηση

Στο παραπάνω παράδειγμα, ορίσαμε τυχαία το δυναμικό εύρος σε [-5, 5], αλλά η απόφαση θα πρέπει να ληφθεί μέσω μιας διαδικασίας «βαθμονόμησης» για την εύρεση ενός κατάλληλου εύρους που να περιλαμβάνει όσο το δυνατόν περισσότερες τιμές, ελαχιστοποιώντας παράλληλα το σφάλμα κβαντοποίησης.

Η συγκεκριμένη εκτέλεση των βημάτων βαθμονόμησης είναι διαφορετική για διαφορετικούς τύπους παραμέτρων.

Βάρη (και προκαταλήψεις)

Μπορούμε να σκεφτούμε τα βάρη και τις προκαταλήψεις ενός μοντέλου μεγάλης γλώσσας (LLM) ως στατικές τιμές, επειδή είναι γνωστές πριν την εκτέλεση του μοντέλου. Για παράδειγμα, το αρχείο ~20 GB του Llama 3 αποτελείται κυρίως από τα βάρη και τις προκαταλήψεις του.

Δεδομένου ότι ο αριθμός των μεταβλητών μεροληψίας (εκατομμύρια) είναι σημαντικά μικρότερος από τα βάρη (δισεκατομμύρια), οι προκαταλήψεις διατηρούν συνήθως υψηλότερη ακρίβεια (όπως το INT16), ενώ η κύρια εργασία για την κβαντοποίηση επικεντρώνεται στα βάρη.

Για γνωστά στατικά βάρη, οι τεχνικές βαθμονόμησης για την επιλογή του εύρους περιλαμβάνουν:

- Μη αυτόματη επιλογή εκατοστημόνων του εύρους εισόδου

- Βελτιστοποιήστε το μέσο τετραγωνικό σφάλμα (MSE) μεταξύ των αρχικών βαρών και των κβαντισμένων βαρών

- Ελαχιστοποιήστε την εντροπία μεταξύ της αρχικής τιμής και της κβαντισμένης τιμής (απόκλιση KL)


Η επιλογή ενός εκατοστημόριου, για παράδειγμα, οδηγεί σε συμπεριφορά αποκοπής παρόμοια με αυτή που είδαμε νωρίτερα.

τιμή ενεργοποίησης

Οι είσοδοι που ενημερώνονται συνεχώς σε ένα μεγάλο μοντέλο γλώσσας ονομάζονται συχνά ενεργοποιήσεις.


Ονομάζονται τιμές ενεργοποίησης επειδή συνήθως περνούν από κάποια συνάρτηση ενεργοποίησης, όπως σιγμοειδές ή relu

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

Δεδομένου ότι αυτές οι τιμές ενημερώνονται μετά από κάθε κρυφό επίπεδο, οι συγκεκριμένες τιμές τους δεν είναι γνωστές κατά τη φάση συμπερασμάτων έως ότου τα δεδομένα εισόδου περάσουν από το μοντέλο.


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

- Κβαντοποίηση μετά την προπόνηση (PTQ)

- Όπως υποδηλώνει το όνομα, είναι ποσοτικοποίηση μετά την εκπαίδευση

- Εκπαίδευση με επίγνωση κβαντικοποίησης (QAT)

- Κβαντοποίηση κατά τη διάρκεια της προπόνησης/λεπτής ρύθμισης

Μέρος 3: Ποσοτικοποίηση μετά την εκπαίδευση (PTQ)

Η κβαντοποίηση μετά την προπόνηση (PTQ) είναι μια από τις πιο δημοφιλείς τεχνικές κβαντισμού. Προσδιορίζει ποσοτικά τις παραμέτρους του μοντέλου (συμπεριλαμβανομένων των βαρών και των τιμών ενεργοποίησης) μετά την ολοκλήρωση της εκπαίδευσης του μοντέλου.

Η κβαντοποίηση των βαρών μπορεί να χρησιμοποιήσει συμμετρική κβαντοποίηση ή ασύμμετρη κβαντοποίηση.

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

Υπάρχουν δύο μορφές κβαντοποίησης των τιμών ενεργοποίησης:

- δυναμική κβαντοποίηση

- στατική κβαντοποίηση

δυναμική κβαντοποίηση

Αφού τα δεδομένα περάσουν από το κρυφό επίπεδο, συλλέγονται οι τιμές ενεργοποίησής του και συγκρίνονται η μέγιστη τιμή (α) και η ελάχιστη τιμή (β) κάθε επιπέδου:


Η κατανομή αυτών των ενεργοποιήσεων χρησιμοποιείται στη συνέχεια για τον υπολογισμό των τιμών μηδενικού σημείου (z) και συντελεστή κλίμακας (s) που απαιτούνται για την κβαντισμένη έξοδο:


Αυτή η διαδικασία επαναλαμβάνεται κάθε φορά που τα δεδομένα περνούν από ένα νέο επίπεδο δικτύου. Επομένως, κάθε στρώμα έχει τις δικές του ανεξάρτητες τιμές z και s, χρησιμοποιώντας έτσι ένα διαφορετικό σχήμα κβαντοποίησης.

στατική κβαντοποίηση

Σε αντίθεση με τη δυναμική κβαντοποίηση, η στατική κβαντοποίηση δεν υπολογίζει το σημείο μηδέν (z) και τον παράγοντα κλίμακας (s) κατά τη διάρκεια της εξαγωγής συμπερασμάτων, αλλά υπολογίζει αυτές τις τιμές πριν από το συμπέρασμα.

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


Μόλις συλλεχθούν αυτές οι κατανομές, μπορούν να υπολογιστούν οι τιμές s και z που απαιτούνται για την ποσοτικοποίηση κατά τη διάρκεια της εξαγωγής συμπερασμάτων.

Στον πραγματικό χρόνο συμπερασμάτων, οι τιμές s και z δεν υπολογίζονται εκ νέου, αλλά χρησιμοποιούνται καθολικά σε όλες τις ενεργοποιήσεις για την κβαντοποίησή τους.

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

Αντίθετα, η στατική κβαντοποίηση, αν και δεν είναι τόσο ακριβής όσο η δυναμική κβαντοποίηση, είναι ταχύτερη επειδή γνωρίζει ήδη τις τιμές s και z που χρησιμοποιούνται για την κβαντοποίηση εκ των προτέρων.

Ποσοτικό πεδίο 4 bit

Η κβαντοποίηση κάτω από 8-bit ήταν πάντα μια πρόκληση, επειδή το σφάλμα κβαντισμού αυξάνεται με κάθε χαμένο bit. Ευτυχώς, υπάρχουν αρκετοί έξυπνοι τρόποι για να μειώσετε τον αριθμό των bit σε 6, 4 ή ακόμα και 2 bit (αν και γενικά δεν συνιστάται η μείωση του αριθμού των bit κάτω από τα 4 bit).

Θα εξερευνήσουμε δύο κοινές μεθόδους στο HuggingFace:

- GPTQ (το πλήρες μοντέλο εκτελείται σε GPU)

- GGUF (πιθανώς εκφορτώνει επίπεδα στην CPU)

GPTQ

Το GPTQ μπορεί να ειπωθεί ότι είναι μια από τις πιο διάσημες μεθόδους κβαντισμού 4-bit σε πρακτικές εφαρμογές.

Χρησιμοποιεί ασύμμετρη κβαντοποίηση και την επεξεργάζεται επίπεδο προς στρώμα, επεξεργάζοντας κάθε στρώμα ανεξάρτητα πριν προχωρήσει στο επόμενο επίπεδο:


Σε αυτή τη διαδικασία κβαντοποίησης στρώμα προς στρώμα, πρώτα μετατρέπει τα βάρη των στρωμάτων σε αντίστροφους πίνακες Έσσης. Ο αντίστροφος πίνακας Hessian είναι η δεύτερη παράγωγος της συνάρτησης απώλειας μοντέλου και αντιπροσωπεύει την ευαισθησία της παραγωγής του μοντέλου σε κάθε αλλαγή βάρους.

Με απλά λόγια, δείχνει ουσιαστικά τη σημασία (αντίστροφη σημασία) των βαρών σε κάθε στρώμα.

Τα βάρη μικρότερης τιμής στον πίνακα Hessian είναι πιο σημαντικά επειδή μικρές αλλαγές σε αυτά τα βάρη μπορούν να οδηγήσουν σε σημαντικές αλλαγές στην απόδοση του μοντέλου.


Στον αντίστροφο Hessian matrix, οι χαμηλότερες τιμές αντιπροσωπεύουν πιο «σημαντικά» βάρη

Στη συνέχεια, κβαντίζουμε και αποκβαντοποιούμε την πρώτη σειρά του πίνακα βάρους:


Αυτή η διαδικασία μας επιτρέπει να υπολογίσουμε το σφάλμα κβαντισμού (q), το οποίο μπορούμε να σταθμίσουμε χρησιμοποιώντας την προηγουμένως υπολογισμένη αντίστροφη τιμή της Έσσης (h_1).

Ουσιαστικά, δημιουργούμε ένα σταθμισμένο κβαντισμένο σφάλμα με βάση τη σημασία των βαρών:


Στη συνέχεια, ανακατανέμουμε αυτό το σταθμισμένο σφάλμα κβαντοποίησης στα άλλα βάρη της σειράς. Αυτό βοηθά στη διατήρηση της συνολικής λειτουργικότητας και εξόδου του δικτύου.

Για παράδειγμα, αν το κάνουμε αυτό για το δεύτερο βάρος (δηλαδή x_2=0,3), πολλαπλασιάζουμε το σφάλμα κβαντισμού (q) με τον αντίστροφο Έσσιο του δεύτερου βάρους (h_2) και προσθέτουμε σε αυτό:


Στη συνέχεια, συνεχίστε την ίδια λειτουργία για το τρίτο βάρος σε μια δεδομένη σειρά:


Αυτή η διαδικασία ανακατανομής του σταθμισμένου σφάλματος κβαντοποίησης q επαναλαμβάνεται μέχρι να κβαντιστούν όλες οι τιμές.

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

GGUF

Αν και το GPTQ είναι μια καλή μέθοδος κβαντοποίησης για την εκτέλεση ολόκληρου του μοντέλου μεγάλης γλώσσας (LLM) στη GPU, εάν δεν υπάρχουν αντίστοιχες συνθήκες υλικού, οποιοδήποτε επίπεδο του LLM μπορεί επίσης να μεταφορτωθεί στην CPU μέσω GGUF.

Ισοδυναμεί με την ταυτόχρονη εκτέλεση του μοντέλου σε CPU και GPU για να αντισταθμιστεί η έλλειψη μνήμης βίντεο (VRAM).

Η μέθοδος κβαντισμού GGUF ενημερώνεται συχνά και εξαρτάται από τον συγκεκριμένο αριθμό των bit κβαντοποίησης, αλλά η βασική αρχή είναι η εξής.

Πρώτον, τα βάρη ενός δεδομένου στρώματος χωρίζονται σε "υπερ-μπλοκ", καθένα από τα οποία περιέχει ένα σύνολο "υπο-μπλοκ". Από αυτά τα "υπο-μπλοκ" υπολογίζουμε τον συντελεστή κλίμακας (-ούς) και την τιμή άλφα:


Για να κβαντίσετε ένα δεδομένο "υπο-μπλοκ", μπορείτε να χρησιμοποιήσετε την κβαντοποίηση absmax που αναφέρθηκε προηγουμένως, πολλαπλασιάζοντας το δεδομένο βάρος με τον παράγοντα κλιμάκωσης (s_sub):


Ο συντελεστής κλίμακας s_sub υπολογίζεται χρησιμοποιώντας τις πληροφορίες στο "sub-block", αλλά κβαντοποιείται χρησιμοποιώντας τις πληροφορίες s_super στο "super-block":


Συνοπτικά, αυτή η κβαντοποίηση μπλοκ προς μπλοκ χρησιμοποιεί τον παράγοντα κλίμακας του "super block" (s_super) για να κβαντίσει τον παράγοντα κλίμακας του "sub block" (s_sub).

Το επίπεδο κβαντοποίησης κάθε παράγοντα κλίμακας μπορεί να είναι διαφορετικό και οι συντελεστές κλίμακας "υπερ-μπλοκ" έχουν γενικά μεγαλύτερη ακρίβεια από τους συντελεστές κλίμακας "υπο-μπλοκ".

Για να το δείξουμε αυτό, ας εξερευνήσουμε διάφορα επίπεδα κβαντισμού (2-bit, 4-bit και 6-bit):


Ανάλογα με τον τύπο κβαντισμού, απαιτείται επίσης μια πρόσθετη ελάχιστη τιμή (m) για τη ρύθμιση του σημείου μηδέν, αυτές κβαντίζονται καθώς και ο συντελεστής κλίμακας (οι)

Μέρος 4: Εκπαίδευση Ποσοτικής Ευαισθητοποίησης (QAT)

Το τρίτο μέρος περιγράφει τον τρόπο κβαντοποίησης του μοντέλου μετά την εκπαίδευση. Το μειονέκτημα αυτής της μεθόδου είναι ότι δεν λαμβάνει υπόψη την πραγματική διαδικασία εκπαίδευσης.

Εδώ είναι χρήσιμο το Quantitative Awareness Training (QAT). Σε αντίθεση με την ποσοτικοποίηση μετά την εκπαίδευση (PTQ), ο στόχος του QAT είναι να μάθει τη διαδικασία κβαντοποίησης κατά τη διάρκεια της εκπαίδευσης.


Το QAT τείνει να είναι πιο ακριβές από το PTQ επειδή η κβαντοποίηση λαμβάνεται ήδη υπόψη κατά τη διάρκεια της εκπαιδευτικής διαδικασίας. Ετσι δουλευει:

Κατά τη διάρκεια της εκπαιδευτικής διαδικασίας εισάγεται η λεγόμενη «ψεύτικη» κβαντοποίηση. Για παράδειγμα, πρώτα κβαντίστε τα βάρη σε INT4 και μετά αποκβαντίστε τα πίσω στο FP32:


Αυτή η διαδικασία επιτρέπει στο μοντέλο να λάβει υπόψη το σφάλμα κβαντοποίησης κατά τον υπολογισμό των απωλειών και την ενημέρωση των βαρών κατά τη φάση της εκπαίδευσης.

Όπως φαίνεται στο παρακάτω σχήμα, το QAT προσπαθεί να διερευνήσει την τιμή απώλειας στην περίπτωση των "ευρέων" ελάχιστων για να μειώσει τα σφάλματα κβαντισμού, επειδή τα "στενά" ελάχιστα συχνά οδηγούν σε μεγαλύτερα σφάλματα κβαντισμού.


Υποθέτοντας ότι η κβαντοποίηση δεν λαμβάνεται υπόψη κατά την οπίσθια διάδοση, η διαδικασία gradient descent θα επιλέξει το βάρος με τη μικρότερη τιμή απώλειας. Ωστόσο, εάν είναι σε ένα "στενό" ελάχιστο, αυτό θα εισάγει μεγαλύτερα σφάλματα κβαντισμού.

Αντίθετα, αν σκεφτούμε την κβαντοποίηση, θα επιλεγεί διαφορετικό βάρος ενημέρωσης στα «ευρεία» ελάχιστα, με πολύ μικρότερο σφάλμα κβαντισμού.


Επομένως, αν και η μέθοδος PTQ έχει χαμηλή τιμή απώλειας σε υψηλή ακρίβεια (π.χ. FP32), το QAT έχει επίσης χαμηλή τιμή απώλειας σε χαμηλή ακρίβεια (π.χ. INT4), κάτι που επιδιώκουμε.

Εποχή 1 bit: BitNet

Είδαμε πριν ότι η μείωση της ακρίβειας κβαντισμού στα 4 bit είναι ήδη αρκετά μικρή, αλλά τι γίνεται αν τη μειώσουμε περαιτέρω;

Εδώ μπαίνει το BitNet, αντιπροσωπεύει τα βάρη ενός μοντέλου ως ένα μόνο bit, είτε -1 είτε 1, και το κάνει αυτό εισάγοντας τη διαδικασία κβαντοποίησης απευθείας στην αρχιτεκτονική του Transformer.

Η αρχιτεκτονική του Transformer είναι η βάση των περισσότερων LLM και αποτελείται από υπολογισμούς που περιλαμβάνουν γραμμικά επίπεδα:


Αυτά τα γραμμικά στρώματα αντιπροσωπεύονται συνήθως με μεγαλύτερη ακρίβεια, όπως το FP16, και είναι εκεί όπου βρίσκονται τα περισσότερα βάρη.

Το BitNet αντικαθιστά αυτά τα γραμμικά επίπεδα με επίπεδα BitLinear:


Τα επίπεδα BitLinear λειτουργούν το ίδιο με τα κανονικά γραμμικά επίπεδα, πολλαπλασιάζοντας τα βάρη με τις τιμές ενεργοποίησης για τον υπολογισμό της εξόδου.

Αλλά η διαφορά είναι ότι το επίπεδο BitLinear χρησιμοποιεί μόνο 1 bit για να αναπαραστήσει το βάρος του μοντέλου και χρησιμοποιεί το INT8 για να αναπαραστήσει την τιμή ενεργοποίησης:


Τα επίπεδα BitLinear, όπως η εκπαίδευση με επίγνωση κβαντισμού (QAT), εκτελούν ένα είδος «ψεύτικης» κβαντοποίησης κατά τη διάρκεια της προπόνησης για να αναλύσουν το αποτέλεσμα κβαντοποίησης των βαρών και των ενεργοποιήσεων:


Ας κατανοήσουμε το BitLinear βήμα προς βήμα.

ποσοτικοποίηση βάρους

Κατά τη διάρκεια της προπόνησης, τα βάρη αποθηκεύονται ως INT8 και στη συνέχεια κβαντίζονται σε 1 bit χρησιμοποιώντας μια βασική στρατηγική που ονομάζεται συνάρτηση signum.

Ουσιαστικά, μετακινεί την κατανομή των βαρών για να κεντραριστεί στο 0, στη συνέχεια εκχωρεί όλες τις τιμές μικρότερες από 0 έως -1 και όλες τις τιμές μεγαλύτερες από 0 προς 1:


Επιπλέον, παρακολουθεί μια τιμή β (μέση απόλυτη τιμή), την οποία θα χρησιμοποιήσουμε αργότερα στη διαδικασία αντίστροφης κβαντοποίησης.

Ενεργοποίηση Κβαντοποίηση

Για να ποσοτικοποιήσει τις ενεργοποιήσεις, το BitLinear ενεργοποιεί τη μέθοδο απόλυτης μέγιστης τιμής (absmax) για τη μετατροπή των ενεργοποιήσεων από FP16 σε INT8, καθώς απαιτούν πολλαπλασιασμό μήτρας (×) με μεγαλύτερη ακρίβεια.


Επιπλέον, παρακολουθεί μια τιμή α (μέγιστη απόλυτη τιμή), την οποία θα χρησιμοποιήσουμε αργότερα στη διαδικασία αποκβάντωσης.

αντίστροφη κβαντοποίηση

Παρακολουθούμε το α (η μέγιστη απόλυτη τιμή των ενεργοποιήσεων) και το β (η μέση απόλυτη τιμή των βαρών), που θα μας βοηθήσουν να αποκβαντοποιήσουμε τις ενεργοποιήσεις πίσω στο FP16.

Οι ενεργοποιήσεις εξόδου επανακλιμακώνονται χρησιμοποιώντας {α, γ} για να αποκβαντιστούν στην αρχική τους ακρίβεια:


Αυτή η διαδικασία είναι σχετικά απλή και επιτρέπει στο μοντέλο να αναπαρασταθεί μόνο με δύο τιμές, -1 ή 1.

Με αυτήν την προσέγγιση, οι συγγραφείς παρατήρησαν ότι καθώς το μέγεθος του μοντέλου μεγαλώνει, το χάσμα απόδοσης μεταξύ της εκπαίδευσης 1 bit και της εκπαίδευσης FP16 γίνεται όλο και μικρότερο.

Ωστόσο, αυτό ισχύει μόνο για μεγαλύτερα μοντέλα (>30B παράμετροι), το χάσμα μεταξύ μικρότερων μοντέλων εξακολουθεί να είναι μεγάλο.

Όλα τα LLM είναι 1,58 bit

Για να βελτιωθούν τα ζητήματα επεκτασιμότητας που αναφέρθηκαν προηγουμένως, εισήχθη το BitNet 1.58b.

Σε αυτή τη νέα προσέγγιση, κάθε βάρος του μοντέλου μπορεί όχι μόνο να είναι -1 ή 1, αλλά μπορεί επίσης να λάβει 0, καθιστώντας κάθε μεταβλητή τριαδική.

Είναι ενδιαφέρον ότι μόνο η προσθήκη 0 είναι μια απλή λειτουργία που βελτιώνει σημαντικά το BitNet και επιταχύνει τη διαδικασία υπολογισμού.

0 ισχύς

Γιατί η προσθήκη 0 είναι σημαντική βελτίωση;

Αυτό έχει να κάνει με τον πολλαπλασιασμό μήτρας!

Αρχικά, ας εξερευνήσουμε τις βασικές λειτουργίες του πολλαπλασιασμού πινάκων.

Κατά τον υπολογισμό της εξόδου, πολλαπλασιάζουμε τον πίνακα βάρους με το διάνυσμα εισόδου. Ακολουθεί μια απεικόνιση του πολλαπλασιασμού της πρώτης σειράς του πρώτου στρώματος του πίνακα βάρους:


Αυτός ο πολλαπλασιασμός περιλαμβάνει δύο ενέργειες, πολλαπλασιάζοντας ένα μόνο βάρος με την είσοδο και στη συνέχεια προσθέτοντας όλες.

Αντίθετα, το BitNet 1.58b καταφέρνει να αποφύγει την πράξη του πολλαπλασιασμού, αφού τα βάρη τριών τιμών ουσιαστικά σας λένε τα εξής:

- 1: Θέλω να προσθέσω αυτήν την τιμή

- 0: Δεν θέλω αυτή την τιμή

- -1: Θέλω να αφαιρέσω αυτήν την τιμή

Έτσι, εάν τα βάρη σας είναι κβαντισμένα σε 1,58 bit, πρέπει απλώς να εκτελέσετε την πρόσθεση:


Αυτό όχι μόνο επιταχύνει σημαντικά τους υπολογισμούς, αλλά επιτρέπει επίσης το φιλτράρισμα χαρακτηριστικών.

Η ρύθμιση ενός δεδομένου βάρους στο 0 ισοδυναμεί με την παράβλεψη της εισόδου, αντί με την προσθήκη ή την αφαίρεση της τιμής εισόδου όπως το 1-bit.

Ποσοτικοποίηση

Για να εκτελέσει κβαντισμό βάρους, το BitNet 1.58b χρησιμοποιεί κβαντισμό μέσης απόλυτης τιμής (absmean), μια παραλλαγή της κβαντοποίησης μέγιστης απόλυτης τιμής (absmax) που έχουμε δει στο παρελθόν.

Απλώς συμπιέζει την κατανομή των βαρών και χρησιμοποιεί τον απόλυτο μέσο όρο (α) για να ποσοτικοποιήσει τις τιμές. Στη συνέχεια στρογγυλοποιήστε τα σε -1, 0 ή 1:


Σε σύγκριση με το BitNet, η κβαντοποίηση ενεργοποίησης είναι η ίδια εκτός από μία πτυχή: αντί να κλιμακώνουμε τις ενεργοποιήσεις στο εύρος [0, 2ᵇ-1], χρησιμοποιούμε τη μέθοδο μέγιστης απόλυτης τιμής για να κλιμακώσουμε σε [-2ᵇ-1, 2ᵇ-1] .

Συνοψίζοντας, η κβαντοποίηση 1,58 bit περιλαμβάνει κυρίως δύο τεχνικές:

- Προσθέστε 0 για να δημιουργήσετε μια αναπαράσταση τριών τιμών [-1, 0, 1]

- Απόλυτος μέσος ποσοτικός προσδιορισμός βαρών

Το έγγραφο BitNet έχει το εξής συμπέρασμα: "Το 13B BitNet b1.58 είναι πιο αποδοτικό από το 3B FP16 LLM όσον αφορά την καθυστέρηση, τη χρήση μνήμης και την κατανάλωση ενέργειας."


Διεύθυνση χαρτιού: https://arxiv.org/abs/2402.17764

Με μόνο 1,58 υπολογιστικά αποδοτικά bit, έχουμε ένα ελαφρύ μοντέλο.

Βιβλιογραφικές αναφορές:

https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-quantization