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

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

mm
SGLang: Efficient Execution of Structured Language Model Programs

Τα μεγάλα γλωσσικά μοντέλα (LLM) χρησιμοποιούνται ολοένα και περισσότερο για σύνθετα καθήκοντα που απαιτούν πολλαπλές γεννήτριες κλήσεις, προηγμένες τεχνικές προώθησης, έλεγχο ροής και δομημένα είσοδα/έξοδα. Ωστόσο, οι αποτελεσματικές συστήματα για την προγραμματιστική και εκτέλεση αυτών των εφαρμογών λείπουν. Το SGLang, ένα νεοεισαγόμενο σύστημα, αποσκοπεί στην αντιμετώπιση αυτού του προβλήματος παρέχοντας αποτελεσματική εκτέλεση σύνθετων προγραμμάτων γλωσσικών μοντέλων. Το SGLang αποτελείται από μια γλώσσα frontend και μια περίοδο εκτέλεσης. Η frontend απλοποιεί την προγραμματιστική με πρωτογενείς για γεννήτρια και έλεγχο παραλληλισμού, ενώ η περίοδος εκτέλεσης επιταχύνει την εκτέλεση μέσω νέων βελτιώσεων όπως RadixAttention για την επαναχρησιμοποίηση του KV cache και συμπιεσμένα πεπερασμένα αυτόματα για ταχύτερη δομημένη αποκωδικοποίηση εξόδου. Πειράματα αποδεικνύουν ότι το SGLang επιτυγχάνει μέχρι 6,4 φορές υψηλότερη απόδοση σε σύγκριση με τα σύγχρονα συστήματα συλλογής σε διάφορα μεγάλα γλωσσικά και πολυμορφικά μοντέλα, αντιμετωπίζοντας καθήκοντα όπως έλεγχο agent, λογική συλλογιστική, few-shot learning benchmarks, JSON αποκωδικοποίηση, retrieval-augmented generation pipelines και multi-turn chat.

Οι πρόσφατες προόδους στις ικανότητες των LLM έχουν επεκτείνει τη χρησιμότητά τους, επιτρέποντάς τους να χειρίζονται ένα ευρύτερο φάσμα γενικών καθηκόντων και να λειτουργούν ως αυτόνομες एजεντίες. Σε αυτές τις εφαρμογές, τα LLM συμμετέχουν σε πολλαπλά στάδια σχεδιασμού, συλλογισμού και αλληλεπίδρασης με εξωτερικά περιβάλλοντα. Αυτό διευκολύνεται μέσω της χρήσης εργαλείων, πολλαπλών modality εισόδου και διαφόρων τεχνικών προώθησης, όπως few-shot learning, self-consistency, skeleton-of-thought και tree-of-thought. Αυτές οι νέες περιπτώσεις χρήσης απαιτούν πολλαπλές, συχνά εξαρτημένες, κλήσεις γεννήτριας LLM, υποδεικνύοντας μια τάση χρήσης πολλαπλών δομών για την ολοκλήρωση σύνθετων καθηκόντων.

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

Σε αυτό το άρθρο, θα αναλύσουμε το πλαίσιο 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 μπορούν να ανιχνευτούν και να μεταγλωττιστούν για περαιτέρω βελτιώσεις.

  • RadixAttention: Αυτή η τεχνική επιτρέπει την αυτόματη επαναχρησιμοποίηση του KV cache μεταξύ πολλαπλών κλήσεων γεννήτριας. Σε υπάρχοντα συστήματα συλλογής, το KV cache μιας αίτησης απορρίπτεται μετά την επεξεργασία, εμποδίζοντας την επαναχρησιμοποίηση μεταξύ πολλαπλών κλήσεων και επιβραδύνωντας την εκτέλεση. Το SGLang διατηρεί ένα LRU cache του KV cache εντός ενός radix tree, διαχειριζόμενο το KV cache ως ένα παραδοσιακό cache και χρησιμοποιώντας το radix tree για αποτελεσματική αντιστοίχηση, εισαγωγή και αποβολή. Αυτό επιτρέπει στην περίοδο εκτέλεσης να χειρίζεται διάφορους τρόπους επαναχρησιμοποίησης αποτελεσματικά.
  • Compressed Finite State Machine: Αυτή η τεχνική επιτρέπει ταχύτερη αποκωδικοποίηση για δομημένα έξοδα. Υπάρχοντα συστήματα ακολουθούν τις περιοριστικές μόνο για το επόμενο token, επιτρέποντάς τους να αποκωδικοποιούν μόνο ένα token κάθε φορά. Αντίθετα, το SGLang αναλύει τις περιοριστικές και κατασκευάζει ένα συμπιεσμένο πεπερασμένο αυτόματο για να τις αντιπροσωπεύσει, συμπιέζοντας μια διαδρομή πολλαπλών tokens σε μια ενιαία βήμα, όταν είναι δυνατό, επιτρέποντας την αποκωδικοποίηση πολλαπλών tokens ταυτόχρονα για ταχύτερη ταχύτητα.
  • API Speculative Execution: Για API-only μοντέλα, όπως το OpenAI’s GPT-4, το SGLang εισάγει API speculative execution για την βελτίωση των προγραμμάτων πολλαπλών κλήσεων.

Χρησιμοποιώντας το SGLang, διάφορες εφαρμογές LLM έχουν υλοποιηθεί, συμπεριλαμβανομένων του ελέγχου agent, της λογικής συλλογιστικής, των few-shot learning benchmarks, της JSON αποκωδικοποίησης, των retrieval-augmented generation pipelines, του multi-turn chat και της επεξεργασίας πολλαπλών modality. Η απόδοση έχει δοκιμαστεί σε μοντέλα όπως Llama-7B/70B, Mistral-8x7B, LLaVA-v1.5-7B (εικόνα) και LLaVA-NeXT-34B (βίντεο) σε NVIDIA A10G και A100 GPUs. Τα πειραματικά αποτελέσματα δείχνουν ότι το SGLang επιτυγχάνει μέχρι 6,4 φορές υψηλότερη απόδοση σε σύγκριση με τα υπάρχοντα συστήματα προγραμματισμού και συλλογής, συμπεριλαμβανομένων των Guidance, vLLM και LMQL.

SGLang: Μοντέλο Προγραμματισμού και Μεθοδολογία

Το μοντέλο προγραμματισμού του SGLang εισάγεται μέσω ενός παραδείγματος, περιγράφοντας τη γλώσσα και τις λειτουργίες του, και περιγράφοντας τις ευκαιρίες βελτίωσης της περίοδου εκτέλεσης. Αυτό το μοντέλο απλοποιεί τις χρονοβόρες λειτουργίες στις ροές πολλαπλών κλήσεων (π.χ. χειρισμό συμβολοσειρών, κλήσεις API, ορισμό περιορισμών, παραλληλισμός) παρέχοντας ευέλικτες και συνθέσιμες πρωτογενείς λειτουργίες. Το SGLang είναι μια domaine-ειδική γλώσσα που είναι ενσωματωμένη στο Python. Η ακόλουθη εικόνα δείχνει ένα πρόγραμμα που αξιολογεί ένα δοκίμιο για μια εικόνα χρησιμοποιώντας τη μέθοδο branch-solve-merge.

Η συνάρτηση multi_dimensional_judge παίρνει τρεις ορίσματα: `s`, `path`, και `essay`. s διαχειρίζεται την κατάσταση προώθησης, path είναι η διαδρομή του αρχείου εικόνας και essay είναι το κείμενο του δοκιμίου. Νέα συμβολοσειρές και πρωτογενείς λειτουργίες SGLang μπορούν να προστεθούν στην κατάσταση s για εκτέλεση χρησιμοποιώντας τον τελεστή +=. Πρώτα, η συνάρτηση προσθέτει την εικόνα και το δοκίμιο στην προώθηση. Στη συνέχεια, ελέγχει αν το δοκίμιο σχετίζεται με την εικόνα χρησιμοποιώντας select, αποθηκεύοντας το αποτέλεσμα σε s[“related”]. Αν σχετίζεται, η προώθηση διαχωρίζεται σε τρεις αντίγραφα για παράλληλη αξιολόγηση από διαφορετικές διαστάσεις, χρησιμοποιώντας gen για να αποθηκεύσει τα αποτελέσματα σε f[“judgment”]. Στη συνέχεια, συνδυάζει τις αξιολογήσεις, γεννάει μια περίληψη και αντιστοιχίζει ένα γράμμα αξιολόγησης. Τέλος, επιστρέφει τα αποτελέσματα σε μορφή JSON, ακολουθώντας ένα σχήμα που ορίζεται από μια κανονική έκφραση περιορισμού regex. Το SGLang απλοποιεί σημαντικά αυτό το πρόγραμμα, καθώς ένα ισοδύναμο πρόγραμμα χρησιμοποιώντας μια διεπαφή API OpenAI θα χρειαζόταν 2,1 φορές περισσότερες γραμμές κώδικα λόγω χειρισμού συμβολοσειρών και ελέγχου παραλληλισμού.

Το SGLang παρέχει πρωτογενείς λειτουργίες για τον έλεγχο της κατάστασης προώθησης, της γεννήτριας και του παραλληλισμού, που μπορούν να χρησιμοποιηθούν με σύνταξη Python και βιβλιοθήκες. Αυτές οι πρωτογενείς λειτουργίες είναι:

gen: καλεί ένα μοντέλο για γεννήτρια και αποθηκεύει τα αποτελέσματα σε μια μεταβλητή με το όνομα που ορίζεται στο πρώτο όρισμα. Υποστηρίζει ένα όρισμα `regex` για να περιοριστεί η έξοδος να ακολουθήσει μια γραμματική που ορίζεται από μια κανονική έκφραση (π.χ. ένα σχήμα JSON).

  • select: καλεί ένα μοντέλο για να επιλέξει την υψηλότερη πιθανότητα επιλογή από μια λίστα.
  • += ή extend: προσθέτει μια συμβολοσειρά στην προώθηση.
  • [variable_name]: ανακτά τα αποτελέσματα μιας γεννήτριας.
  • fork: δημιουργεί παράλληλες διακλαδώσεις της κατάστασης προώθησης.
  • join: επανασυνδέει την κατάσταση προώθησης.
  • image και video: λαμβάνουν είσοδο εικόνας και βίντεο.

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

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

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

Το παραπάνω παράδειγμα δείχνει τις λειτουργίες RadixAttention με μια πολιτική αποβολή LRU σε εννέα χρονικά σημεία, επιδεικνύοντας την δυναμική εξέλιξη του radix tree ως απάντηση σε διάφορες αιτήσεις. Αυτές οι αιτήσεις περιλαμβάνουν δύο συνεδρίες chat, μια παρτίδα few-shot learning ερωτήσεων και δειγματοληψία self-consistency. Κάθε ακμή του δέντρου φέρει μια ετικέτα που υποδηλώνει μια συμβολοσειρά ή μια ακολουθία token. Οι κόμβοι είναι χρωματισμένοι για να αντανακλούν διαφορετικές καταστάσεις: πράσινο για νέους κόμβους, μπλε για κόμβους που έχουν πρόσβαση κατά τη διάρκεια του χρονικού σημείου και κόκκινο για κόμβους που έχουν αποβληθεί.

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

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

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

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

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

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

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

Βήμα 8: Ο διακομιστής λαμβάνει μια νέα αίτηση από την πρώτη συνεδρία chat. Αποβάλλει όλους τους κόμβους από τη δεύτερη συνεδρία chat επειδή είναι οι λιγότερο πρόσφατοι.

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

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

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

Αποτελέσματα σε Ανοιχτά Μοντέλα

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

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

Αποτελέσματα σε Μεγαλύτερα Μοντέλα με Τανυστές Παραλληλισμού

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

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

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

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

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

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

Σε αυτό το άρθρο, έχουμε συζητήσει το SGLang, ένα νεοεισαγόμενο σύστημα, που αποσκοπεί στην αντιμετώπιση αυτού του προβλήματος παρέχοντας αποτελεσματική εκτέλεση σύνθετων προγραμμάτων γλωσσικών μοντέλων. Το SGLang αποτελείται από μια γλώσσα frontend και μια περίοδο εκτέλεσης. Η γλώσσα frontend απλοποιεί την προγραμματιστική με πρωτογενείς για γεννήτρια και έλεγχο παραλληλισμού, ενώ η περίοδος εκτέλεσης επιταχύνει την εκτέλεση μέσω νέων βελτιώσεων όπως RadixAttention για την επαναχρησιμοποίηση του KV cache και συμπιεσμένα πεπερασμένα αυτόματα για ταχύτερη δομημένη αποκωδικοποίηση εξόδου. Πειράματα αποδεικνύουν ότι το SGLang επιτυγχάνει μέχρι 6,4 φορές υψηλότερη απόδοση σε σύγκριση με τα σύγχρονα συστήματα συλλογής σε διάφορα μεγάλα γλωσσικά και πολυμορφικά μοντέλα, αντιμετωπίζοντας καθήκοντα όπως έλεγχο agent, λογική συλλογιστική, few-shot learning benchmarks, JSON αποκωδικοποίηση, retrieval-augmented generation pipelines και multi-turn chat.

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