Optimierung von KI mit dem E2-Algorithmus
Der E2-Algorithmus verbessert das Anforderungsmanagement für grosse Sprachmodelle.
― 7 min Lesedauer
Inhaltsverzeichnis
In der Welt der KI werden grosse Sprachmodelle (LLMs) immer wichtiger. Um diese Modelle effektiv zu nutzen, brauchen wir eine gute Möglichkeit, die Anfragen, die an sie gesendet werden, zu verwalten. Hier kommt der E2-Algorithmus ins Spiel. Er zielt darauf ab, den Umgang mit Anfragen effizienter zu gestalten, besonders bei langen Eingaben, die von vielen Nutzern geteilt werden.
Systemarchitektur
Der E2-Algorithmus funktioniert in einem verteilten System, das mehrere GPUs (Grafikprozessoren) nutzt. Die Architektur ist so ausgelegt, dass sie zwei Arten von paralleler Verarbeitung unterstützt: Datenparallelität und Modellparallelität. Das bedeutet, dass sie mehrere Anfragen gleichzeitig bearbeiten und mit grossen Modellen effizienter arbeiten kann.
Das System bietet zwei Ebenen der Planung. Ein globaler Planer schaut sich die eingehenden Anfragen an und entscheidet, wie die Last auf verschiedene GPUs verteilt wird. Ein lokaler Planer konzentriert sich dann auf spezifische Anfragen, die jeder GPU zugewiesen sind. Diese Trennung hilft dabei, Anfragen effektiver zu verwalten.
Wenn eine neue Anfrage eingeht, wird sie in Token zerlegt. Der globale Planer weist diese Anfrage einer GPU mit dem E2-Algorithmus zu. Danach wird die Anfrage in eine Warteschlange zur Verarbeitung gestellt. Der lokale Planer arbeitet an dieser Warteschlange und organisiert die Anfragen effizient basierend auf ihren Bedürfnissen.
Vorteile des Designs
Das Design dieses Systems bringt mehrere Vorteile mit sich:
- Zentralisierte Planung: Mit einem globalen Planer passiert die gesamte Anfrageplanung an einem Ort. Das hilft, den Gesamtzustand des Systems im Auge zu behalten.
- Skalierbarkeit: Ein einzelner globaler Planer kann zahlreiche GPUs verwalten, was die Erweiterung des Systems erleichtert.
- Anpassungsfähigkeit: Der lokale Planer kann schnell auf Änderungen in der GPU-Verfügbarkeit und den Anfrageanforderungen reagieren.
- Reduzierte Komplexität: Migrationen von Anfragen zwischen GPUs während der Verarbeitung werden vermieden, was ressourcenintensiv sein kann.
Algorithmus zur globalen Planung
Der globale Planer verfolgt Anfragen mithilfe einer Struktur, die einen globalen Präfixbaum genannt wird. Dieser Baum hilft dabei, Anfragen basierend auf ihren gemeinsamen Tokens zu verwalten. Tokens sind Textstücke aus der Anfrage des Nutzers, und die Art, wie sie in diesem Baum organisiert sind, hilft dem Planer, informierte Entscheidungen zu treffen.
Wenn eine neue Anfrage eingeht, vergleicht der Planer ihre Tokens mit denen, die bereits im Baum sind. Wenn ein Treffer gefunden wird, prüft er, ob die Bearbeitung der Anfrage auf derselben GPU Zeit und Ressourcen sparen würde. Wenn der Treffer kurz ist, sucht der Planer die beste GPU aus, um die Anfrage basierend auf der aktuellen Auslastung zu bearbeiten.
Der Algorithmus zielt darauf ab, ein Gleichgewicht zwischen der Nutzung vorhandener Ressourcen und der Erkundung neuer Optionen zu finden. Wenn eine Anfrage einer GPU zugewiesen wird, muss der Planer sicherstellen, dass die Last des Systems über die Zeit hinweg ausgewogen bleibt. Wenn eine GPU überlastet wird, ist der Planer so konzipiert, dass er zukünftige Anfragen von dieser GPU an eine mit weniger Verkehr verschiebt.
Lastberechnung
Um die Anfragen effektiv zu verwalten, berechnet der globale Planer die Last auf jeder GPU. Dabei werden mehrere Faktoren berücksichtigt, einschliesslich der Länge der Anfrage und der aktuellen Anfragehistorie des Systems. Indem er versteht, wie viel Arbeit jede GPU verarbeitet, kann der Planer bessere Entscheidungen darüber treffen, wohin neue Anfragen gesendet werden.
Die Gesamtkosten für die Nutzung einer GPU für eine Anfrage werden berücksichtigt. Dazu gehören die Zeit, die benötigt wird, um die Anfrage vorzubereiten, die mögliche Notwendigkeit, Speicher freizugeben, und die tatsächliche Verarbeitungszeit. Der Planer wählt die GPU mit den niedrigsten Gesamtkosten aus, um die eingehende Anfrage effektiv zu bearbeiten.
Lastanpassung nach Zuweisung
Sobald eine Anfrage einer GPU zugewiesen ist, wird erwartet, dass sie dort bleibt, bis sie abgeschlossen ist. Das ist in den meisten Fällen effizient, aber manchmal kann sich die Last verschieben, was Anpassungen erforderlich macht. Der globale Planer verfolgt die Last auf jeder GPU und trifft Entscheidungen über das Verschieben von Anfragen basierend auf festgelegten Schwellenwerten. Wenn eine GPU zu viele Anfragen bearbeitet, kann der Planer zukünftige Anfragen an eine weniger beschäftigte GPU umleiten.
Der Planer hat auch eine Methode zur Skalierung, die sich danach richtet, wie gut die Anfragen bearbeitet werden. Wenn zu viele Anfragen warten, könnte der Planer entscheiden, bestimmte Arbeitslasten zu replizieren, um sie besser zu verteilen.
Balance zwischen Prefill und Decoding
Bei LLMs gibt es zwei Hauptphasen, wenn Anfragen verarbeitet werden: Prefill und Decoding. Die Prefill-Phase benötigt mehr Ressourcen, was oft zu Ineffizienzen führt. Der globale Planer ist sich dessen bewusst und sucht nach Möglichkeiten, die beiden Phasen auszubalancieren.
Bei der Verarbeitung von Anfragen berücksichtigt er, ob die Anfrage mehr als Decoding-Einheit oder als Prefill-Einheit behandelt werden kann, basierend darauf, wie viel des Prompts geteilt wird. Indem er die Art der Anfrage erkennt, kann der Planer sie an die GPU weiterleiten, die am besten für die spezifische Aufgabe geeignet ist, um eine bessere Ressourcennutzung sicherzustellen.
Skalierbarkeit des globalen Planers
Das E2-System ist so konzipiert, dass es das Wachstum leicht bewältigen kann. Anfragen werden zuerst in Tokens zerlegt, und der Planer verwendet asynchrone Handlermethoden, um sie zu verwalten. Das ermöglicht es dem System, viele Anfragen gleichzeitig zu verarbeiten, ohne Engpässe zu erzeugen.
Auf den globalen Präfixbaum wird auf eine Weise zugegriffen, die andere Operationen nicht blockiert, was die Effizienz erhöht. Wenn Anfragen zugewiesen oder Speicher freigegeben wird, wird die Last auf jeder GPU aktualisiert, sodass der globale Planer immer die neuesten Informationen hat.
Mechanismus des lokalen Planers
Der lokale Planer arbeitet eng mit jeder GPU zusammen, um ihre zugewiesenen Anfragen zu bearbeiten. Jeder lokale Planer führt eine Warteschlange und einen Präfixbaum. Wenn eine Anfrage eingeht, vergleicht er sie mit dem lokalen Baum und aktualisiert sie nach Bedarf.
Nach jeder Verarbeitungsiteration entscheidet der lokale Planer, welche Anfragen als Nächstes bearbeitet werden sollen, basierend auf einem Prioritätssystem. Dieses System sorgt dafür, dass Anfragen fair bearbeitet werden, wobei berücksichtigt wird, wie viele Tokens zwischengespeichert sind und wie hoch die Gesamtlast ist.
Wenn eine Anfrage ein langes Prompt hat, das nicht geteilt wird, kann sie in kleinere Teile aufgeteilt werden, um besser in die Verarbeitungskette zu passen. Der lokale Planer ist auch dafür verantwortlich, den Speicher zu verwalten. Wenn der Speicher knapp wird, wählt er Teile des Baums aus, um sie zu entfernen, damit die Verarbeitung reibungslos weiterlaufen kann.
Anfrageordnung in der Warteschlange
In aktuellen Systemen werden Anfragen in Warteschlangen oft nach dem Prinzip „Wer zuerst kommt, mahlt zuerst“ bearbeitet. Das kann jedoch zu Ressourcenverschwendung und Ungerechtigkeiten führen. Das E2-System schlägt eine neue Methode zur Sortierung dieser Anfragen vor.
Jede Anfrage wird einer Prioritätsgruppe zugewiesen, basierend darauf, wie viele Tokens zwischengespeichert sind. Beim Bilden von Batches wählt der lokale Planer Anfragen so aus, dass sowohl ihre Priorität als auch die Fairness berücksichtigt werden. Das stellt sicher, dass Anfragen mit hoher Priorität schneller bearbeitet werden, während auch die Bedürfnisse von Anfragen mit niedrigerer Priorität berücksichtigt werden.
Fazit
Der E2-Algorithmus und seine Architektur sind darauf ausgelegt, die Art und Weise zu optimieren, wie grosse Sprachmodelle Anfragen bearbeiten. Durch einen dualen Planungsansatz, effizientes Lastmanagement und Ausgleichstechniken kann das System auch unter hoher Nachfrage reibungslos arbeiten. Diese Struktur verbessert nicht nur die Leistung von LLMs, sondern sorgt auch für eine faire Verteilung der Ressourcen unter verschiedenen Anfragen. Während die Nutzung von KI weiter wächst, werden diese Fortschritte entscheidend sein, um die Technologie bestmöglich zu nutzen und die Nutzeranforderungen effektiv zu erfüllen.
Titel: Preble: Efficient Distributed Prompt Scheduling for LLM Serving
Zusammenfassung: Prompts to large language models (LLMs) have evolved beyond simple user questions. For LLMs to solve complex problems, today's practices are to include domain-specific instructions, illustration of tool usages, and/or long context such as textbook chapters in prompts. As such, many parts of prompts are repetitive across requests. Recent works propose to cache and reuse KV state of prompts. However, they are all confined to a single-GPU optimization, while production LLM serving systems are distributed by nature. This paper proposes Preble, the first distributed LLM serving platform that targets and optimizes for prompt sharing. We designed a distributed scheduling system that co-optimizes KV state reuse and computation load-balancing with a new scheduling algorithm and a hierarchical scheduling mechanism. Our evaluation of Preble with real workloads and request arrival patterns on two open-source LLMs shows that Preble outperforms the SOTA serving systems by 1.5X to 14.5X on average latency and 2X to 10X on p99 latency.
Autoren: Vikranth Srivatsa, Zijian He, Reyna Abhyankar, Dongming Li, Yiying Zhang
Letzte Aktualisierung: 2024-10-03 00:00:00
Sprache: English
Quell-URL: https://arxiv.org/abs/2407.00023
Quell-PDF: https://arxiv.org/pdf/2407.00023
Lizenz: https://creativecommons.org/licenses/by/4.0/
Änderungen: Diese Zusammenfassung wurde mit Unterstützung von AI erstellt und kann Ungenauigkeiten enthalten. Genaue Informationen entnehmen Sie bitte den hier verlinkten Originaldokumenten.
Vielen Dank an arxiv für die Nutzung seiner Open-Access-Interoperabilität.