Connect with us

SGLang: Αποτελεσματική Εκτέλεση Προγραμμάτων Γλωσσικών Μοντέλων Δομής

Τεχνητή νοημοσύνη

SGLang: Αποτελεσματική Εκτέλεση Προγραμμάτων Γλωσσικών Μοντέλων Δομής

mm
SGLang: Efficient Execution of Structured Language Model Programs

Τα μεγάλα γλωσσικά μοντέλα (LLM) χρησιμοποιούνται όλο και περισσότερο για σύνθετα καθήκοντα που απαιτούν πολλαπλές κλήσεις γεννήτριας, προηγμένες τεχνικές προώθησης, έλεγχο ροής και δομημένες εισόδους/εξόδους. Ωστόσο, οι αποτελεσματικές συστήματα για την προγραμματισμό και την εκτέλεση αυτών των εφαρμογών λείπουν. Το SGLang, ένα καινούριο παρουσιαζόμενο σύστημα, αποσκοπεί στην αντιμετώπιση αυτού του προβλήματος, παρέχοντας αποτελεσματική εκτέλεση σύνθετων προγραμμάτων γλωσσικών μοντέλων. Το SGLang αποτελείται από μια γλώσσα frontend και μια περίοδο εκτέλεσης. Η frontend απλοποιεί την προγραμματισμό με πρωτογενείς για γεννήτρια και έλεγχο παραλληλισμού, ενώ η περίοδος εκτέλεσης επιταχύνει την εκτέλεση μέσω καινοτόμων βελτιώσεων όπως το RadixAttention για επαναχρησιμοποίηση του KV cache και συμπιεσμένα αυτόματα καταστάσεων για ταχύτερη αποκωδικοποίηση δομημένων εξόδων. Πειράματα αποδεικνύουν ότι το SGLang επιτυγχάνει μέχρι 6,4 φορές υψηλότερη απόδοση σε σύγκριση με τα συστήματα συλλογής δεδομένων του κράτους της τέχνης σε διάφορα μεγάλα γλωσσικά και πολυμεσικά μοντέλα, αντιμετωπίζοντας καθήκοντα όπως έλεγχο πράκτορα, λογική συλλογιστική, διαγωνισμοί μάθησης με λίγα δεδομένα, αποκωδικοποίηση JSON, διαδικασίες γεννήτριας με αναζήτηση και πολλαπλή συζήτηση.

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

Αυτή η μετάβαση σηματοδοτεί μια μετάβαση από την απλή συζήτηση σε μια πιο εξευγενισμένη προγραμματιστική χρήση των LLM, όπου τα προγράμματα προγραμματίζουν και ελέγχουν τις διαδικασίες γεννήτριας των LLM. Αυτά τα προγράμματα ονομάζονται “Προγράμματα Γλωσσικών Μοντέλων” (LM Programs). Προηγμένες τεχνικές προώθησης και εργασίες πρακτόρων περιλαμβάνονται στο πεδίο των LM programs. Υπάρχουν δύο κοινά χαρακτηριστικά των LM programs: (1) Τα LM programs συνήθως περιλαμβάνουν πολλαπλές κλήσεις LLM διασκορπισμένες με έλεγχο ροής για την ολοκλήρωση σύνθετων καθηκόντων και την ενίσχυση της συνολικής ποιότητας. (2) Τα LM programs λαμβάνουν δομημένες εισόδους και παράγουν δομημένα εξόδους, ermögνωντας τη σύνθεση των LM programs και την ενσωμάτωση σε υφιστάμενα συστήματα λογισμικού.

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

Εισαγωγή στο SGLang

Παρά την ευρεία χρήση των LM programs, τα τρέχοντα συστήματα για την έκφραση και την εκτέλεση τους παραμένουν αναποτελεσματικά. Το SGLang αναγνωρίζει δύο основικές προκλήσεις που σχετίζονται με την αποτελεσματική χρήση των LM programs:

  • Πλοκή Προγραμματισμού: Η ανάπτυξη των LM programs είναι χρονοβόρα και δύσκολη λόγω της μη детерμινιστικής φύσης των LLM. Αυτό περιλαμβάνει εκτεταμένη χειρισμό συμβολοσειρών, πειραματική ρύθμιση προώθησης, εύθραυστη αποκωδικοποίηση εξόδου, χειρισμό πολλαπλών modality εισόδου και υλοποίηση μηχανισμών παραλληλισμού. Αυτή η πολυπλοκότητα μειώνει σημαντικά την αναγνωσιμότητα ακόμη και των απλών προγραμμάτων.
  • Αναποτελεσματική Εκτέλεση: Η εκτέλεση των LM programs είναι αναποτελεσματική λόγω των περιττών υπολογισμών και της χρήσης μνήμης. Τα συστήματα συλλογής δεδομένων του κράτους της τέχνης, τα οποία είναι βελτιστοποιημένα για να μειώσουν την υστέρηση και να βελτιώσουν την απόδοση, δεν έχουν άμεση γνώση του φόρτου εργασίας, οδηγώντας σε σημαντικές αναποτελεσματικότητες. Ένα αξιοσημείωτο παράδειγμα είναι η επαναχρησιμοποίηση του KV cache, το οποίο αποτελείται από επαναχρησιμοποιήσιμες ενδιάμεσες tensors που είναι απαραίτητες για τη γεννήτρια συλλογισμού. Τα τρέχοντα συστήματα δεν διαθέτουν αποτελεσματικά μηχανισμούς για να διευκολύνουν την επαναχρησιμοποίηση του KV cache σε πολλαπλές κλήσεις LLM που μοιράζονται ένα κοινό πρόθεμα, οδηγώντας σε περιττούς υπολογισμούς και σπατάλη μνήμης. Επιπλέον, η αποκωδικοποίηση για δομημένα εξόδους, όπως η JSON mode, είναι υποβελτιστοποιημένη, καθώς τα υπάρχοντα συστήματα αποκωδικοποιούν μόνο ένα token κάθε φορά.

Για να αντιμετωπιστούν αυτές οι προκλήσεις, το SGLang εισάγει μια δομημένη γλώσσα γεννήτριας για LLM. Η βασική ιδέα είναι να εκμεταλλευτεί συστηματικά τη δομή πολλαπλών κλήσεων στα LM programs για αποτελεσματική εκτέλεση. Όπως φαίνεται στην ακόλουθη εικόνα, το SGLang έχει δύο μέρη: μια γλώσσα frontend και μια περίοδο εκτέλεσης.

Η frontend απλοποιεί την προγραμματισμό των LM programs, και η περίοδος εκτέλεσης επιταχύνει την εκτέλεση. Αυτά τα μέρη μπορούν να συνεργαστούν για καλύτερη απόδοση ή να λειτουργήσουν ανεξάρτητα.

Το SGLang είναι μια domaine-ειδική γλώσσα που είναι ενσωματωμένη σε Python, παρέχοντας πρωτογενείς για γεννήτρια (π.χ. extend, gen, select) και έλεγχο παραλληλισμού (π.χ. fork, join). Είναι συμβατό με τον έλεγχο ροής του Python και τις βιβλιοθήκες, επιτρέποντας στους χρήστες να αναπτύξουν προηγμένες εργασίες προώθησης με εύκολη σύνταξη Python. Το SGLang περιλαμβάνει einen διερμηνέα και einen μεταγλωττιστή. Ο διερμηνέας διαχειρίζεται την κατάσταση προώθησης ως μια ροή και υποβάλλει πρωτογενείς λειτουργίες στη ροή για ασύγχρονη εκτέλεση, εξασφαλίζοντας σωστό έλεγχο συγχρονισμού και παραλληλισμού εντός προγράμματος. Επιπλέον, τα προγράμματα SGLang μπορούν να αναλυθούν και να μεταγλωττιστούν για περαιτέρω βελτιώσεις. Αυτό το έγγραφο χρησιμοποιεί την κατάσταση διερμηνέα ως προεπιλογή και συζητά αποτελέσματα κατάστασης μεταγλωττιστή στο Παράρτημα D. Το SGLang υποστηρίζει ανοιχτά μοντέλα με το δικό του SGLang Runtime (SRT), καθώς και μοντέλα API όπως το OpenAI και τα μοντέλα Anthropic.

Τα συστήματα προγραμματισμού για LLM μπορούν να ταξινομηθούν ως υψηλού επιπέδου (π.χ. LangChain, DSPy) και χαμηλού επιπέδου (π.χ. LMQL, Guidance, SGLang). Τα συστήματα υψηλού επιπέδου παρέχουν προκαθορισμένα ή αυτο-γεννημένα προώθηση, όπως ο βελτιστοποιητής προώθησης του DSPy. Τα συστήματα χαμηλού επιπέδου δεν αλλάζουν τα προώθηση αλλά επιτρέπουν την άμεση χειρισμό των προώθησεων και των πρωτογενών. Το SGLang είναι ένα σύστημα χαμηλού επιπέδου παρόμοιο με το LMQL και το Guidance. Η ακόλουθη πίνακας συγκρίνει τα χαρακτηριστικά τους.

Το SGLang επικεντρώνεται περισσότερο στην αποτελεσματικότητα της περιόδου εκτέλεσης και συνοδεύεται από το δικό του συν-σχεδιασμένο χρόνο εκτέλεσης, επιτρέποντας καινοτόμες βελτιώσεις. Οι υψηλές γλώσσες (π.χ. DSPy) μπορούν να μεταγλωττιστούν σε γλώσσες χαμηλού επιπέδου (π.χ. SGLang). Η ενσωμάτωση του SGLang ως backend στο DSPy για καλύτερη αποτελεσματικότητα της περιόδου εκτέλεσης αποδεικνύεται αργότερα.

Το παραπάνω παράδειγμα δείχνει τις λειτουργίες RadixAttention με μια πολιτική LRU εξόντωσης σε εννέα χρονικά σημεία, επιδεικνύοντας την δυναμική εξέλιξη του radix δέντρου ως απάντηση σε διάφορες αιτήσεις. Αυτές οι αιτήσεις περιλαμβάνουν δύο συνεδρίες συζήτησης, μια παρτίδα αιτήσεων μάθησης με λίγα δεδομένα και δειγματοληψία αυτοσυμφωνίας. Κάθε άκρο του δέντρου φέρει μια ετικέτα που υποδηλώνει μια υποσειρά ή μια ακολουθία token. Οι κόμβοι είναι χρωματισμένοι για να αντανακλούν διαφορετικές καταστάσεις: πράσινο για νέους κόμβους, μπλε για缓ched κόμβους που πρόσβαση κατά τη διάρκεια του χρονικού σημείου και κόκκινο για κόμβους που έχουν εξοβελιστεί.

Βήμα 1: Το radix δέντρο είναι αρχικά κενό.

Βήμα 2: Ο διακομιστής επεξεργάζεται μια εισερχόμενη αίτηση χρήστη “Γεια” και απαντά με την έξοδο LLM “Γεια”. Ηシステム προώθησης “Είσαι ένα χρήσιμο βοηθό”, η αίτηση χρήστη “Γεια!” και η απάντηση LLM “Γεια!” συνδυάζονται στο δέντρο ως μια seule άκρο συνδεδεμένο με einen νέο κόμβο.

Βήμα 3: Μια νέα αίτηση προώθησης φτάνει, και ο διακομιστής βρίσκει το πρόθεμα της αίτησης (δηλ. την πρώτη στροφή της συζήτησης) στο radix δέντρο και επαναχρησιμοποιεί το KV cache. Η νέα στροφή προστίθεται στο δέντρο ως ένας νέος κόμβος.

Βήμα 4: Μια νέα συνεδρία συζήτησης αρχίζει. Ο κόμβος από το Βήμα 3 διαιρείται σε δύο κόμβους για να επιτρέψει στις δύο συνεδρίες συζήτησης να μοιράζονται την προώθηση συστήματος.

Βήμα 5: Η δεύτερη συνεδρία συζήτησης συνεχίζεται. Ωστόσο, λόγω ορίων μνήμης, ένας κόμβος από το Βήμα 4 πρέπει να εξοβελιστεί. Η νέα στροφή προστίθεται μετά τον υπόλοιπο κόμβο από το Βήμα 4.

Βήμα 6: Ο διακομιστής λαμβάνει μια αίτηση μάθησης με λίγα δεδομένα, την επεξεργάζεται και την εισάγει στο δέντρο. Ο ριζικός κόμβος διαιρείται επειδή η νέα αίτηση δεν μοιράζεται κανένα πρόθεμα με τους υπάρχοντες κόμβους.

Βήμα 7: Ο διακομιστής λαμβάνει μια παρτίδα επιπλέον αιτήσεων μάθησης με λίγα δεδομένα. Αυτές οι αιτήσεις μοιράζονται το ίδιο σύνολο παραδειγμάτων, οπότε ένας κόμβος από το Βήμα 6 διαιρείται για να επιτρέψει τη μοιράζεται.

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

Βήμα 9: Ο διακομιστής λαμβάνει μια αίτηση για δειγματοληψία περισσότερων απαντήσεων για τις ερωτήσεις σε einen κόμβο από το Βήμα 8, πιθανότατα για αυτοσυμφωνία προώθησης. Για να δημιουργηθεί χώρος για αυτές τις αιτήσεις, πολλαπλοί κόμβοι εξοβελίζονται.

Αυτό το παράδειγμα δείχνει πώς το RadixAttention χειρίζεται τη δυναμική ανάθεση και εξόντωση κόμβων ως απάντηση σε διάφορες αιτήσεις, εξασφαλίζοντας αποτελεσματική επαναχρησιμοποίηση του KV cache και διαχείριση μνήμης.

SGLang: Αξιολόγηση και Αποτελέσματα

Αποτελέσματα σε Μοντέλα Ανοιχτής Βάρος

Τα αποτελέσματα υστέρησης και απόδοσης εμφανίζονται στις ακόλουθες εικόνες. Το SGLang βελτιώνει την απόδοση μέχρι 6,4 φορές και μειώνει την υστέρηση μέχρι 3,7 φορές. Αυτές οι βελτιώσεις οφείλονται στην επαναχρησιμοποίηση του KV cache, την εκμετάλλευση του παραλληλισμού εντός ενός προγράμματος και την ταχύτερη αποκωδικοποίηση δομημένων εξόδων.

Σε αυτά τα διαγωνιστικά, ο ρυθμός επιτυχίας του cache κυμαίνεται από 50% έως 99%. Η Εικόνα 13 (Παράρτημα) καταγράφει τους επιτευχθέντες και βέλτιστους ρυθμούς επιτυχίας του cache για όλα αυτά, δείχνοντας ότι το SGLang προσεγγίζει το 96% του βέλτιστου ρυθμού επιτυχίας του cache κατά μέσο όρο.

Αποτελέσματα σε Μεγαλύτερα Μοντέλα με Παραλληλισμό Tensor

Μεγαλύτερα μοντέλα, Mixtral-8x7B και Llama-70B, δοκιμάστηκαν με παραλληλισμό tensor στις ίδιες διαγωνιστικές, και τα αποτελέσματα αναφέρονται στην ακόλουθη εικόνα. Η ταχύτητα σε μεγαλύτερα μοντέλα δείχνει μια τάση παρόμοια με αυτή που παρατηρήθηκε σε μικρότερα μοντέλα, υποδεικνύοντας ότι οι βελτιώσεις του SGLang γενικεύονται καλά σε μεγαλύτερα μοντέλα. Τα Guidance και LMQL παραλείπονται λόγω της έλλειψης αποτελεσματικών υλοποιήσεων του παραλληλισμού tensor.

Αποτελέσματα σε Πολυμεσικά Μοντέλα

Το SGLang έχει εγγενή υποστήριξη για πολυμεσικά μοντέλα με τις πρωτογενείς εικόνας και βίντεο. Οι βελτιώσεις σε αυτό το έγγραφο είναι συμβατές με πολυμεσικά μοντέλα. Για το RadixAttention, ο χασί της εισόδου εικόνας υπολογίζεται και χρησιμοποιείται ως το κλειδί στο radix δέντρο, επιτρέποντας την επαναχρησιμοποίηση του KV cache των token εικόνας από την ίδια εικόνα. Το LLaVA-v1.5-7B (εικόνα) εκτελέστηκε στο llava-bench-in-the-wild και το LLaVA-NeXT-34B (βίντεο) στο ActivityNet. Επειδή αυτά τα μοντέλα δεν υποστηρίζονται καλά από άλλα συστήματα βάσης, η αρχική υλοποίηση των δημιουργών του μοντέλου στο Hugging Face Transformers χρησιμοποιήθηκε ως βάση. Όπως φαίνεται στην ακόλουθη πίνακα, το SGLang παρέχει απόδοση μέχρι 6 φορές υψηλότερη σε αυτά τα διαγωνιστικά. Στο llava-bench-in-the-wild, πολλαπλά ερωτήματα για την ίδια εικόνα χειρίζονταν, και το SGLang runtime επαναχρησιμοποίησε το KV cache σε αυτή την περίπτωση.

Παραγωγή Εγκατάστασης

Το SGLang έχει εγκατασταθεί στο Chatbot Arena για να εξυπηρετήσει μοντέλα ανοιχτής βάρος. Λόγω χαμηλής κυκλοφορίας για κάποια μοντέλα, μόνο ένας εργαζόμενος SGLang εξυπηρετεί κάθε μοντέλο. Μετά από einen μήνα, ένας ρυθμός επιτυχίας RadixAttention 52,4% για το LLaVA-Next-34B και 74,1% για το Vicuna-33B παρατηρήθηκε. Οι επιτυχίες του cache προέρχονταν από κοινά μηνύματα συστήματος, συχνά επαναχρησιμοποιημένα παραδείγματα εικόνας και ιστορίες πολλαπλών γύρων συζήτησης. Αυτό μειώνει την υστέρηση του πρώτου token κατά μέσο όρο 1,7 φορές για το Vicuna-33B.

Τελικές Σκέψεις

Σε αυτό το άρθρο, έχουμε μιλήσει για το SGLang, ένα καινούριο παρουσιαζόμενο σύστημα, που αποσκοπεί στην αντιμετώπιση αυτού του προβλήματος, παρέχοντας αποτελεσματική εκτέλεση σύνθετων προγραμμάτων γλωσσικών μοντέλων. Το SGLang αποτελείται από μια γλώσσα frontend και μια περίοδο εκτέλεσης. Η frontend απλοποιεί την προγραμματισμό με πρωτογενείς για γεννήτρια και έλεγχο παραλληλισμού, ενώ η περίοδος εκτέλεσης επιταχύνει την εκτέλεση μέσω καινοτόμων βελτιώσεων όπως το RadixAttention για επαναχρησιμοποίηση του KV cache και συμπιεσμένα αυτόματα καταστάσεων για ταχύτερη αποκωδικοποίηση δομημένων εξόδων. Πειράματα αποδεικνύουν ότι το SGLang επιτυγχάνει μέχρι 6,4 φορές υψηλότερη απόδοση σε σύγκριση με τα συστήματα συλλογής δεδομένων του κράτους της τέχνης σε διάφορα μεγάλα γλωσσικά και πολυμεσικά μοντέλα, αντιμετωπίζοντας καθήκοντα όπως έλεγχο πράκτορα, λογική συλλογιστική, διαγωνισμό μάθησης με λίγα δεδομένα, αποκωδικοποίηση JSON, διαδικασίες γεννήτριας με αναζήτηση και πολλαπλή συζήτηση.

Ένας μηχανικός επάγγελμα, ένας συγγραφέας με την καρδιά. Ο Kunal είναι ένας τεχνικός συγγραφέας με einen βαθύ έρωτα και κατανόηση του AI και ML, αφιερωμένος στο να απλοποιεί σύνθετες έννοιες σε αυτά τα πεδία μέσω των ελκυστικών και ενημερωτικών εγγράφων του.