Η ανάπτυξη του GPT-NeoX 20B στην παραγωγή είναι μια πρόκληση και το μάθαμε με τον δύσκολο τρόπο στο NLP Cloud... Σε αυτό το άρθρο θα σας πούμε περισσότερα για διάφορα κόλπα που σχετίζονται με τη χρήση του GPT-NeoX 20B και ειδικά για το πώς να αντιμετωπίσετε το DeepSpeed στην παραγωγή.

Το GPT-NeoX 20B είναι το μεγαλύτερο μοντέλο επεξεργασίας φυσικής γλώσσας ανοικτού κώδικα από τη στιγμή που γράφεται αυτό το κείμενο.
Κυκλοφόρησε από την EleutherAI πριν από 2 εβδομάδες. Εκπαιδεύτηκε σε 20 δισεκατομμύρια παραμέτρους, μετά από 1 χρόνο σκληρής δουλειάς γεμάτο προκλήσεις. Μια από τις κύριες δυσκολίες τους φάνηκε να είναι η δυνατότητα να δημιουργήσουν μια κατάλληλη παράλληλη αρχιτεκτονική, ώστε το μοντέλο να μπορεί να εκπαιδευτεί αποτελεσματικά σε πολλαπλές GPU.
Το προηγούμενο μοντέλο τους, το GPT-J, εκπαιδεύτηκε σε TPUs της Google και σχεδιάστηκε για να χρησιμοποιείται σε TPUs. Η εσωτερική αρχιτεκτονική του GPT-NeoX 20B είναι ριζικά διαφορετική και έχει σχεδιαστεί για χρήση σε GPU. Η ιδέα είναι ότι θα πρέπει να αποτελέσει το πρώτο μιας σειράς ακόμη μεγαλύτερων μοντέλων (ο στόχος εδώ είναι να φτάσει το GPT-3).
Το GPT-NeoX 20 είναι ένα μοντέλο παραγωγής κειμένου, που σημαίνει ότι μπορεί να γράψει κείμενο για εσάς και να επιτύχει σχεδόν κάθε περίπτωση χρήσης Επεξεργασίας Φυσικής Γλώσσας με μεγάλη ακρίβεια: δημιουργία αναρτήσεων σε ιστολόγια, chatbots, ταξινόμηση κειμένου, ανάλυση συναισθήματος, εξαγωγή λέξεων-κλειδιών, παραγωγή κώδικα, εξαγωγή οντοτήτων, ταξινόμηση προθέσεων, απάντηση ερωτήσεων και πολλά άλλα...
Δεν υπάρχει αμφιβολία ότι πολλοί ερευνητές και εταιρείες θα αξιοποιήσουν αυτό το νέο μοντέλο και θα έχουν εξαιρετικά αποτελέσματα. Υπάρχει όμως μια πρόκληση: πώς να αναπτυχθεί το GPT-NeoX 20B;
Η πρώτη πρόκληση που αντιμετωπίζει κανείς όταν προσπαθεί να αναπτύξει το GPT-NeoX 20B στην παραγωγή, είναι το προηγμένο υλικό που απαιτεί.
Ήταν ακόμα δυνατή η ανάπτυξη του GPT-J σε καταναλωτικό υλικό, ακόμη και αν ήταν πολύ ακριβό. Για παράδειγμα, μπορούσατε να το αναπτύξετε σε μια πολύ καλή CPU (ακόμη και αν το αποτέλεσμα ήταν οδυνηρά αργό) ή σε μια προηγμένη GPU παιχνιδιών όπως η NVIDIA RTX 3090. Αλλά το GPT-NeoX 20B είναι τόσο μεγάλο που αυτό δεν είναι πλέον εφικτό.
Βασικά, το GPT-NeoX απαιτεί τουλάχιστον 42 GB VRAM και 40 GB χώρο στο δίσκο (και ναι, μιλάμε για τη λεπτή έκδοση fp16 εδώ). Λίγες GPU ανταποκρίνονται σε αυτές τις απαιτήσεις. Οι κυριότερες είναι οι NVIDIA A100, A40 και RTX A6000.
Αυτές οι GPU δεν είναι μόνο πολύ ακριβές, αλλά είναι επίσης δύσκολο να αποκτήσετε μία από αυτές στις μέρες μας λόγω της παγκόσμιας έλλειψης ημιαγωγών.
Η καλύτερη λύση εδώ είναι να επιλέξετε μια αρχιτεκτονική πολλαπλών GPU.
Εάν δεν μπορείτε να χωρέσετε το μοντέλο σας σε μία μόνο GPU, μπορείτε να προσπαθήσετε να το χωρίσετε σε πολλές GPU.
Είναι μια ενδιαφέρουσα επιλογή για 2 λόγους. Πρώτον, η οριζόντια κλιμάκωση μιας υποδομής είναι συχνά φθηνότερη από την κάθετη κλιμάκωση. Αυτό ισχύει για τους διακομιστές και για τις GPU. Δεύτερον, είναι ευκολότερο να αποκτήσετε αρκετές μικρές GPU όπως η NVIDIA Tesla T4 από ό,τι μεγαλύτερες GPU όπως η NVIDIA A40.
Δυστυχώς, ο διαχωρισμός ενός μοντέλου μηχανικής μάθησης σε πολλές GPU είναι μια τεχνική πρόκληση. Το Hugging Face δημοσίευσε ένα εξαιρετικό άρθρο σχετικά με τον παραλληλισμό μοντέλων και τις επιλογές που έχετε. Διαβάστε το εδώ. Αλλά ευτυχώς, η EleutherAI σχεδίασε το GPT-NeoX 20B έτσι ώστε να παραλληλίζεται εύκολα σε πολλές GPU, είτε πρόκειται για εκπαίδευση είτε για συμπερασματολογία.
Η αρχιτεκτονική GPT-NeoX βασίζεται στην αρχιτεκτονική Deepspeed. Το Deepspeed είναι ένα πλαίσιο από τη Microsoft που αρχικά σχεδιάστηκε για την παραλληλοποίηση εκπαιδεύσεων μεταξύ πολλών GPU και χρησιμοποιείται όλο και περισσότερο και για εξαγωγή συμπερασμάτων. Η EleutherAI έκανε όλη τη σκληρή δουλειά, οπότε ο παραλληλισμός του GPT-NeoX είναι τόσο απλός όσο η αλλαγή ενός αριθμού σε ένα αρχείο ρυθμίσεων.

Extract from the GPT-NeoX docs about parallelism
Ωστόσο, η ανάπτυξη του Deepspeed στην παραγωγή για online συμπεράσματα μέσω ενός API είναι δύσκολη... Το Deepspeed δεν σχεδιάστηκε για να ενσωματώνεται εύκολα σε διακομιστές ιστού. Στο NLP Cloud, το μάθαμε με τον δύσκολο τρόπο, αλλά μετά από σκληρή δουλειά καταφέραμε τελικά να βρούμε έναν αποτελεσματικό τρόπο για να βάλουμε το Deepspeed και το GPT-NeoX να λειτουργούν πίσω από το API μας.
Ας υποθέσουμε λοιπόν ότι καταφέρατε να παρέχετε το κατάλληλο υλικό και να αναπτύξετε σωστά το GPT-NeoX 20B με το Deepspeed. Υπάρχουν τώρα μερικές προειδοποιήσεις που πρέπει να γνωρίζετε.
Πρώτον, σε σύγκριση με το GPT-J, οι παράμετροι (top k, top p και θερμοκρασία) δεν έχουν τις ίδιες επιπτώσεις στο μοντέλο. Επομένως, αν καταφέρατε να βρείτε μια καλή διαμόρφωση για το GPT-J, μην το θεωρείτε δεδομένο: θα πρέπει να κάνετε νέες δοκιμές με το GPT-NeoX.
Τέλος, ακόμη και αν το μέγεθος εισόδου μπορεί να φτάσει τα 2048 tokens, θα απαιτηθεί περισσότερη μνήμη από τα 42GB που αναφέρθηκαν παραπάνω...
Τα μοντέλα GPT είναι αρκετά αργά, και το GPT-NeoX 20B δεν αποτελεί εξαίρεση. Έτσι, προκειμένου να βελτιώσετε την απόδοση της εφαρμογής σας, ίσως να θέλετε να εργαστείτε σε μια λύση εξαγωγής συμπερασμάτων κατά δέσμη.
Προς το παρόν δεν έχουμε βρει μια καλή λύση γι' αυτό στο NLP Cloud.
Ο κώδικας του GPT-NeoX είναι σχεδιασμένος έτσι ώστε να μπορεί κανείς να εκτελεί ταυτόχρονα πολλά συμπεράσματα με μία μόνο αίτηση. Αλλά στις δοκιμές μας, ο χρόνος απόκρισης αυξανόταν γραμμικά με τον αριθμό των συμπερασμάτων, γεγονός που κατά κάποιο τρόπο αναιρεί το σκοπό της ομαδικής εξαγωγής συμπερασμάτων...
Το GPT-NeoX 20B είναι σίγουρα δύσκολο να αναπτυχθεί στην παραγωγή. Η ποιότητα της παραγωγής κειμένου είναι εκπληκτική, αλλά λίγοι θα έχουν την ικανότητα να εγκαταστήσουν πραγματικά αυτό το μοντέλο.
Περισσότερο από ποτέ, φαίνεται ότι η λύση θα είναι να βασιστεί κανείς σε μια υπηρεσία Cloud, όπως το NLP Cloud, προκειμένου να χρησιμοποιήσει αυτό το μοντέλο.
Αν έχετε σχόλια σχετικά με αυτό το άρθρο, μην διστάσετε να επικοινωνήσετε μαζί μας, θα ήταν υπέροχο να ακούσουμε τη γνώμη σας σχετικά με αυτό!
Julien Salinas
CTO στο NLP Cloud