Nachricht

Apple lässt große Modelle lernen, faul zu sein: Es spuckt den ersten Token schneller aus und behält die Genauigkeit bei

2024-08-02

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



Maschinenherzbericht

Redaktion von Machine Heart

Wenn Sie faul sind, arbeiten Sie besser.

Llama 3.1 wurde gerade veröffentlicht. Haben Sie es schon ausprobiert? Selbst wenn Ihr PC über die neueste Top-Spezifikation verfügt, kann es selbst bei der kleinsten 8B-Version zu erheblichen Verzögerungen kommen. Um die Argumentationseffizienz des Modells zu verbessern, haben Forscher verschiedene Methoden entwickelt, von denen jedoch viele dazu führen, dass das Modell etwas an Genauigkeit verliert.

Kürzlich hat ein Forschungsteam von Apple und Meta AI eine neue Methode vorgeschlagen, die die Inferenzgeschwindigkeit der Vorfüllphase von Llama 2 auf mehr als das Zweifache erhöhen kann und gleichzeitig sicherstellt, dass die Genauigkeit nicht wesentlich abnimmt. Die Beschleunigung von 3.1 bietet einige Inspiration. Sie nennen diesen Ansatz LazyLLM, was für Lazy Large Language Model steht.



Titel des Papiers: LazyLLM: Dynamisches Token-Pruning für eine effiziente LLM-Inferenz mit langem Kontext

Papieradresse: https://arxiv.org/abs/2407.14057

Wie bringen sie LLM dazu, faul zu sein? Um ihre Methode zu verstehen, müssen wir zunächst wissen, was der standardmäßige, auf Eingabeaufforderungen basierende LLM-Inferenzprozess ist. Vereinfacht ausgedrückt ist der Prozess in zwei Phasen unterteilt: Vorbefüllung und Dekodierung, wie in Abbildung 1 dargestellt.



In der Vorbelegungsphase berechnet und speichert das Modell den KV-Cache jedes Tokens in der Eingabeaufforderung und sagt den ersten Token voraus. Wir nennen die in der Vorpopulationsphase verbrachte Zeit „Time to First Token (TTFT)“.

Auf die Vorfüllphase folgt die Dekodierungsphase. In dieser Phase verwendet das Modell erneut den zwischengespeicherten KV, um den nächsten Token iterativ zu dekodieren, bis das Stoppkriterium erfüllt ist.

Während der Vorbelegungsphase verwenden alle Transformer-Ebenen alle Token in der Eingabeaufforderung. TTFT kann langsam sein, wenn die Eingabeaufforderung lang ist, da das derzeit beste Transformer-basierte LLM sowohl tief als auch breit ist und die Kosten für die Berechnung der Aufmerksamkeit quadratisch mit der Anzahl der Token in der Eingabeaufforderung steigen. Beispielsweise stapelt Llama 2 (Version 7B) 32 Ebenen von Transformers und die Modelldimension beträgt 4096. In diesem Fall benötigt TTFT die 21-fache Wandzeit jedes nachfolgenden Decodierungsschritts, was etwa 23 % der gesamten Generierungszeit im LongBench-Benchmark ausmacht.

Um die LLM-Inferenz effizient zu gestalten, ist die Optimierung der TTFT daher ein sehr wichtiger Schritt.

Obwohl die LLM-Inferenzoptimierung ein aktives Forschungsgebiet ist, konzentrieren sich viele Methoden auf die Verbesserung der Inferenzgeschwindigkeit in der Decodierungsphase. Forscher haben der Verbesserung von TTFT wenig Aufmerksamkeit geschenkt. Einige kompressionsbasierte Forschungsergebnisse können die TTFT implizit verbessern, indem sie die Größe des LLM reduzieren.

Eine weitere Forschungsrichtung besteht darin, TTFT unter der statischen Transformer-Architektur zu verbessern. Für diese Forschungsrichtung stellt sich natürlich die Frage: Sind bei der Generierung des ersten Tokens alle Prompt-Token unbedingt erforderlich?

Abbildung 2 zeigt die LLM-Analyseergebnisse des LongBench-Benchmarks.



Es ist ersichtlich, dass für das erste generierte Token die Aufmerksamkeitswerte der Eingabetoken sehr gering sind, was zeigt, dass viele Token in der Eingabeaufforderung redundant sind und selbst wenn sie entfernt werden, keinen Einfluss auf die Vorhersage des nächsten haben Zeichen. Diese Beobachtung ist die Grundlage für das vom Team vorgeschlagene LazyLLM.

Zu den Vorteilen von LazyLLM gehören ein breites Anwendungsspektrum, kein Schulungsbedarf und gute Ergebnisse. Abbildung 3 vergleicht Standard-LLM und LazyLLM.



LazyLLM

Abbildung 4 zeigt das Gesamtgerüst von LazyLLM.



Ausgehend vom vollständigen Kontext bereinigt LazyLLM schrittweise die Token und reduziert so schrittweise die Anzahl der Berechnungen, die zum Erhalten des endgültigen Modells erforderlich sind. Beachten Sie, dass LazyLLM es dem Modell ermöglicht, in verschiedenen Generierungsschritten verschiedene Teilmengen von Token auszuwählen, auch wenn einige davon möglicherweise in vorherigen Schritten bereinigt wurden. Im Vergleich zum statischen Bereinigen (alle Token werden auf einmal bereinigt) optimiert das dynamische Bereinigen die Vorhersage des nächsten Tokens bei jedem Generierungsschritt, was dazu beiträgt, die Leistung des Modells aufrechtzuerhalten.

Progressive Token-Bereinigung

Einige frühere Studien haben Token Pruning erfolgreich eingesetzt, um die LLM-Inferenz zu optimieren. Diese Methoden müssen jedoch vollständige Aufmerksamkeitskarten der ersten paar vorhergesagten Token sammeln, um die Bedeutung von Prompt-Tokens vor Beginn der Bereinigung zu analysieren. Daher eignen sie sich nicht zur Reduzierung der TTFT, da sie während der Vorfüllphase noch alle KV-Caches berechnen müssen.

Im Vergleich dazu ist LazyLLM „sehr faul“ und berechnet ab der ersten Iteration der Inferenz (Vorfüllschritt) nur Token, die für die Vorhersage des nächsten Tokens wichtig sind.

In der ersten Iteration bestand eine zentrale Herausforderung darin, die Bedeutung jedes Tokens zu bestimmen. Inspiriert durch frühere Untersuchungen, die zeigen, dass sich versteckte Token-Zustände entwickeln, wenn sie Transformer-Schichten durchlaufen, besteht die Lösung des Teams darin, bei jedem Generierungsschritt eine schichtweise Token-Bereinigung durchzuführen. Insbesondere verwenden sie die Aufmerksamkeitskarte jeder Schicht, um die Bedeutung des Eingabe-Tokens für das vorherzusagende Token zu bestimmen.

Nach der Berechnung des Konfidenzwerts des Tokens besteht ein weiteres schwieriges Problem darin, den Schwellenwert für die Bereinigung des Tokens zu bestimmen.

Insbesondere für verschiedene Ebenen und unterschiedliche Aufgaben kann sich dieser Schwellenwert ändern, wenn sich der Aufmerksamkeitswert ändert. Die Lösung des Teams besteht darin, die Top-K-Perzentil-Auswahlstrategie zu verwenden. Insbesondere wenn der Konfidenzwert eines Tokens kleiner als das k-te Perzentil im Eingabetoken ist, wird es bereinigt. Sobald ein Token bereinigt wird, nimmt es nicht mehr an der Berechnung aller nachfolgenden Schichten teil.

Das heißt, die von nachfolgenden Schichten verwendeten Token sind eine Teilmenge der von vorherigen Schichten verwendeten Token.

Spätere Experimente zeigen, dass sich auch die Leistung ändert, wenn die Position der Beschneidungsschicht und die Anzahl der beschnittenen Token unterschiedlich sind. Insbesondere für dieselbe Transformer-Schicht nimmt die Leistung des Modells allmählich ab, da durch Beschneiden immer mehr Token entfernt werden.

Sie fanden außerdem heraus, dass im Vergleich zum Beschneiden in frühen Schichten eine bessere Leistung erzielt wurde, wenn das Beschneiden in späteren Schichten durchgeführt wurde, was darauf hindeutet, dass spätere Schichten weniger empfindlich auf Token-Beschneidung reagieren. Um Geschwindigkeit und Genauigkeit besser auszubalancieren, verwendete das Team eine progressive Bereinigung, wie in Abbildung 4 dargestellt, wobei mehr Token in frühen Schichten beibehalten wurden und dann die Anzahl der Token schrittweise reduziert wurde, während sie in spätere Schichten fließen.

Aux Cache (Hilfscache)

In der Pre-Population-Phase gibt es keinen KV-Cache und jedes Token wird in einem verborgenen Zustand dargestellt. Daher kann eine progressive Token-Bereinigung erreicht werden, indem der verborgene Zustand der bereinigten Token entfernt wird. Die Ausweitung des progressiven Token-Prunings auf nachfolgende Decodierungsschritte ist jedoch nicht einfach. Der Grund dafür ist, dass jeder Decodierungsschritt den in der Vorfüllphase berechneten KV-Puffer zur Berechnung der Aufmerksamkeit verwendet. Da LazyLLM in der Pre-Population-Phase eine progressive Token-Bereinigung durchführt, wird der KV eines Tokens, der auf einer bestimmten Ebene bereinigt wird, nicht im KV-Cache der nächsten Ebene angezeigt.

Zur Erinnerung: Das LazyLLM-Framework ermöglicht es jedem Generierungsschritt, bei jedem Schritt eine andere Teilmenge von Token aus der vollständigen Eingabe-Token-Sequenz auszuwählen, unabhängig davon, ob sie in vorherigen Schritten bereinigt wurden. Beispielsweise können im nachfolgenden Decodierungsschritt bereinigte Token, die nicht im KV-Cache vorhanden sind, für die Aufmerksamkeitsberechnung erneut ausgewählt werden. In diesem Fall kann das Modell den KV-Cache für diese Token nicht abrufen.

Eine intuitive Lösung hierfür besteht darin, die Token über den Ursprung des Transformers weiterzuleiten. Dies führt jedoch zu einer Doppelzählung desselben Tokens und verlangsamt letztendlich die Gesamtgenerierungsgeschwindigkeit.

Um dieses Problem zu lösen, führte das Team zusätzlich zum ursprünglichen KV-Cache einen weiteren Cache ein: Aux Cache (Hilfscache).

Wenn KVs, deren Token bereinigt wurden (z. B. T4 und T7 in Abbildung 4), nicht im KV-Cache nachfolgender Schichten angezeigt werden, werden ihre verborgenen Zustände vom Aux-Cache gespeichert, um in nachfolgenden Iterationen abgerufen zu werden.

Wie in Abbildung 4 dargestellt, ruft jede Transformer-Schicht bei jedem Decodierungsschritt zunächst den KV-Cache vergangener Token ab (falls vorhanden). Für die Token, die sich nicht im KV-Cache befinden, werden ihre verborgenen Zustände direkt aus dem Aux-Cache der vorherigen Ebene abgerufen, ohne dass die vorherige Ebene erneut durchlaufen werden muss. Aux Cache stellt sicher, dass jedes Token höchstens einmal in jeder Transformer-Schicht berechnet wird, und stellt außerdem sicher, dass LazyLLM schneller ist als Standard-LLM in seiner langsamsten Form.

Experiment

Das Team testete diesen neuen „faulen“ Ansatz an zwei großen Sprachmodellen: Llama 2 7B und XGen 7B. Das Standard-LLM zum Vergleich ist dasselbe öffentlich veröffentlichte, vorab trainierte Checkpoint-Modell ohne zusätzliche Schulung.

Der experimentelle Benchmark ist LongBench, ein Multitasking-Benchmark für das Verständnis langer Inhalte. Der LongBench-Benchmark enthält 16 Datensätze und umfasst 6 Aufgaben, darunter Fragen und Antworten für einzelne Dokumente, Fragen und Antworten für mehrere Dokumente, Zusammenfassung, Lernen mit wenigen Schüssen, Syntheseaufgaben und Code-Vervollständigung.

Die Bewertungsmetrik ist die Wirksamkeit und Effizienz jeder Methode im Hinblick auf den Kompromiss zwischen TTFT-Beschleunigung und Genauigkeit.

Ergebnis

Tabelle 1 zeigt die TTFT-Beschleunigungs- und Genauigkeitsergebnisse für LazyLLM, Standard-LLM und andere Basismethoden.



In dieser Tabelle bezieht sich die Baseline auf die Standard-LLM-Inferenz. Zufälliger Token-Drop bezieht sich auf das zufällige Bereinigen von Token. Statische Token-Bereinigung bezieht sich auf die Durchführung einer einmaligen Bereinigung des Eingabe-Tokens basierend auf der Aufmerksamkeitsmethode der vorherigen Transformer-Schichten während der Vorfüllphase. Bei der Prompt-Komprimierung handelt es sich um die Methode der Prompt-Komprimierung, die LLM verwendet, um Redundanz im Eingabekontext zu entfernen.

Wie aus Tabelle 1 hervorgeht, ist LazyLLM bei der TTFT-Beschleunigung umfassend überlegen, während der Rückgang der Genauigkeit grundsätzlich vernachlässigbar ist. Es sollte darauf hingewiesen werden, dass die Verwendung von LLM zum Komprimieren von Eingabeaufforderungen viele Berechnungen erfordert. Daher ist die tatsächliche TTFT länger als bei Standard-LLM, obwohl die Prompt-Komprimierung die Inferenz schneller macht.

Auswirkungen auf die allgemeine Build-Geschwindigkeit

Um die Auswirkungen der neuen Methode auf die gesamte Generierungsgeschwindigkeit zu bewerten, analysierte das Team den Prozentsatz der in den Berechnungen verwendeten Prompt-Tokens und die Generierungsbeschleunigung, siehe Tabelle 2.



Es ist ersichtlich, dass der Anteil der in LazyLLM-Berechnungen verwendeten Token immer weniger als 100 % beträgt. Dies zeigt, dass LazyLLM am Ende der Generierung nicht alle Token in der Eingabeaufforderung aufgebraucht hat, das Modell jedoch theoretisch alle Token verwenden kann. Dies kann den gesamten Generierungsprozess für verschiedene Aufgaben zusätzlich beschleunigen.

Dropraten auf verschiedenen Ebenen

Das Team analysierte auch die Auswirkungen des Standorts der Beschneidungsschicht und der Anzahl der beschnittenen Token. Die Ergebnisse sind in Abbildung 6 dargestellt.



Es ist ersichtlich, dass bei der Bereinigung auf derselben Transformer-Ebene die Leistung des Modells umso schlechter ist, je weniger Token übrig bleiben. Dies steht auch im Einklang mit unserem intuitiven Verständnis. Darüber hinaus führt die Bereinigung in den späteren Schichten im Vergleich zur Durchführung der Bereinigung in der früheren Transformer-Schicht zu einer besseren Leistung, was zeigt, dass die späteren Schichten weniger empfindlich auf die Token-Bereinigung reagieren.

Basierend auf diesen Beobachtungen kann man sagen, dass die Wirksamkeit des progressiven Token Pruning nachgewiesen ist.

Progressives KV-Wachstum

Schließlich versuchte das Team auch, die Interna des Modells mithilfe der Token-Pruning-Logik zu verstehen. Konkret möchten sie den kumulierten Nutzungsanteil der Prompt-Tokens und den entsprechenden ungenutzten Anteil kennen. Diese „kumulative Token-Nutzung“ kann äquivalent als die KV-Cache-Größe bei jedem Schritt definiert werden. Abbildung 7 zeigt die kumulative Nutzung dieser Prompt-Tokens in jeder Phase von LazyLLM.



Dieses Ergebnis stützt die Hypothese, dass das Modell nie viele Token auswählen wird (obwohl das Modell theoretisch alle Token in der Eingabeaufforderung verwenden könnte).

In Anbetracht der Tatsache, dass das Modell weiterhin die Genauigkeit der Ausführung von Aufgaben aufrechterhalten kann, kann der Schluss gezogen werden, dass das Modell Token, die die Ausgabequalität nicht beeinträchtigen, effektiv verwerfen kann.