Die Optimierung von Schlussfolgerungen ist ein wichtiger Bestandteil von generativen KI-Anwendungen, die in der Produktion eingesetzt werden. Die effiziente Nutzung von LLMs in großem Maßstab ist eine Herausforderung, und in den letzten Jahren wurden viele Techniken entwickelt, um die Inferenz schneller und kostengünstiger zu machen. In diesem Artikel werden wir diese Techniken näher betrachten.
Große Sprachmodelle (Large Language Models, LLMs) basieren alle auf der 2017 von Vaswani et al. erfundenen Transformer-Architektur. Die Transformer-Architektur erreicht eine überragende Genauigkeit, Lernen in wenigen Schritten und nahezu menschliche Fähigkeiten bei verschiedenen Sprachaufgaben. Allerdings sind diese Basismodelle, die oft Dutzende bis Hunderte von Milliarden von Parametern umfassen, teuer in der Ausbildung und ressourcenintensiv während der Inferenz. Die Inferenzkosten eskalieren bei langen Eingabekontexten, die aufgrund der großen Eingabedaten eine erhebliche Verarbeitungsleistung erfordern. Dies macht eine effiziente Inferenz zu einer entscheidenden Herausforderung, insbesondere bei der Verwaltung von Speicher- und Rechenressourcen.

Genauer gesagt sind die meisten bekannten LLMs reine Decoder-LLMs, wie GPT-3, GPT-4, LLaMA, Mistral, DeepSeek usw. Diese Modelle sind auf eine kausale Modellierungsaufgabe vortrainiert und fungieren als Prädiktoren für das nächste Wort. Sie verarbeiten eine Folge von Token als Eingabe und produzieren die folgenden Token autoregressiv, bis eine Stoppbedingung erreicht ist.
LLM-Inferenz in reinen Decoder-Modellen umfasst zwei Schlüsselphasen: die Prefill-Phase und die Decode-Phase. In der Prefill-Phase verarbeitet das Modell Eingabe-Token, um Zwischenzustände (Schlüssel und Werte) für die Erzeugung des ersten neuen Tokens zu berechnen. Diese Phase, die einer Matrix-Matrix-Operation ähnelt, ist hochgradig parallelisiert und nutzt die Möglichkeiten der GPU effizient aus. In der Dekodierungsphase werden dagegen Token einzeln erzeugt, wobei die Zustände der vorherigen Token verwendet werden. Diese Matrix-Vektor-Operation ist speichergebunden, da die Latenzzeit in erster Linie durch die Datenübertragung zur GPU und nicht durch die Rechengeschwindigkeit bestimmt wird, was zu einer unzureichenden Nutzung der GPU-Rechenleistung führt.
Die Optimierung der Dekodierungsphase ist ein zentraler Punkt bei der Bewältigung von Inferenzproblemen. Zu den Lösungen gehören die Entwicklung effizienter Aufmerksamkeitsmechanismen und eine bessere Verwaltung von Schlüsseln und Werten zur Verringerung von Speicherengpässen. In diesem Beitrag werden praktische Ansätze zur Verbesserung der Inferenzleistung vorgestellt, wobei davon ausgegangen wird, dass die Leser über ein grundlegendes Verständnis der Transformer-Architektur und der Aufmerksamkeitsmechanismen verfügen. Diese Optimierungen sind entscheidend für die Verbesserung des Durchsatzes und die Verringerung der Latenzzeit in realen LLM-Einsätzen.
Eine weitere Komplikation ergibt sich aus der Verwendung unterschiedlicher Tokenizer in verschiedenen LLMs, was die Vergleichbarkeit von Token beeinträchtigt. Token, die ungefähr vier englischen Zeichen entsprechen, variieren in ihrer Darstellung je nach Tokenizer, was direkte Vergleiche des Inferenzdurchsatzes (z. B. Token pro Sekunde) irreführend macht. Diese Variabilität unterstreicht den Bedarf an standardisierten Bewertungsmetriken, um die LLM-Leistung während der Inferenz genau zu bewerten und zu vergleichen.
Batching ist eine Schlüsselstrategie zur Verbesserung der GPU-Nutzung und des Durchsatzes bei großen Sprachmodellen (LLMs). Durch die gleichzeitige Verarbeitung mehrerer Anfragen unter Verwendung desselben Modells werden die Speicherkosten der Modellgewichte auf die Anfragen verteilt, sodass größere Stapel mehr GPU-Rechenleistung nutzen können. Es gibt jedoch eine Grenze für die Stapelgröße, da übermäßig große Stapel aufgrund der Speicheranforderungen von LLMs zu einem Speicherüberlauf führen können, insbesondere im Zusammenhang mit dem Key-Value-Caching (KV) (mehr dazu später).

Die herkömmliche oder statische Stapelverarbeitung hat ihre Grenzen, da Anfragen innerhalb eines Stapels oft eine unterschiedliche Anzahl von Abschluss-Token erzeugen, was zu unterschiedlichen Ausführungszeiten führt. Dies führt dazu, dass alle Anfragen auf den Abschluss der langsamsten warten müssen, was problematisch sein kann, wenn die Länge der Generierung stark variiert. Um dieses Problem zu lösen, wurden fortschrittliche Techniken wie das In-Flight-Batching entwickelt, um die Leistung zu optimieren.
In-Flight-Batching, auch bekannt als kontinuierliches Batching, bewältigt die Herausforderungen, die sich aus der dynamischen Natur von LLM-Arbeitslasten ergeben, die von einfachen Chatbot-Antworten bis hin zu komplexen Dokumentzusammenfassungen oder Codegenerierung reichen können. Diese Aufgaben erzeugen Ausgaben von sehr unterschiedlicher Größe, was eine effiziente parallele Stapelverarbeitung und Ausführung von Anfragen erschwert. Im Gegensatz zur statischen Stapelverarbeitung kann der Server bei der In-Flight-Stapelverarbeitung abgeschlossene Sequenzen sofort aus dem Stapel entfernen und mit der Verarbeitung neuer Anforderungen beginnen, während andere noch in Bearbeitung sind. Dieser Ansatz steigert die GPU-Auslastung erheblich, indem er sich an die unterschiedlichen Ausführungszeiten von Anfragen in realen Szenarien anpasst.
Die Parallelisierung von Modellen ist eine wichtige Strategie zur Verwaltung des Speicher- und Rechenbedarfs großer Modelle für maschinelles Lernen, indem sie auf mehrere GPUs verteilt werden. Dieser Ansatz ermöglicht den Umgang mit größeren Modellen oder Eingabestapeln, die die Speicherkapazität eines einzelnen Geräts übersteigen, und ist daher sowohl für das Training als auch für die Inferenz bei engen Speicherbeschränkungen unerlässlich. Für die Aufteilung der Modellgewichte gibt es verschiedene Techniken, darunter Pipeline-Parallelität, Tensor-Parallelität und Sequenzparallelität, die jeweils unterschiedliche Aspekte der Modellverteilung berücksichtigen. Im Gegensatz zur Datenparallelität, die sich auf die Replizierung von Modellgewichten über Geräte hinweg konzentriert, um größere Eingabestapel während des Trainings zu verarbeiten, sind diese Methoden für die Verringerung des Speicherbedarfs sowohl beim Training als auch bei der Inferenz wichtiger.

Bei der Pipeline-Parallelität wird das Modell vertikal in sequentielle Abschnitte unterteilt, wobei jeder Abschnitt eine Teilmenge von Schichten enthält, die einem separaten Gerät zugewiesen sind. In einer Vier-Wege-Pipeline bearbeitet beispielsweise jedes Gerät ein Viertel der Schichten des Modells und gibt die Ausgaben der Reihe nach an das nächste Gerät weiter. Dies reduziert zwar den Speicherbedarf pro Gerät erheblich, führt aber zu Ineffizienzen, die als "Pipeline-Blasen" bekannt sind, bei denen die Geräte im Leerlauf auf die Ausgaben der vorherigen Schichten warten. Microbatching, bei dem Eingabestapel in kleinere Unterstapel für die sequenzielle Verarbeitung aufgeteilt werden, kann diese Blasen zwar verringern, aber nicht vollständig beseitigen, da Leerlaufzeiten während der Vorwärts- und Rückwärtsdurchläufe bestehen bleiben.
Bei der Tensorparallelität hingegen werden einzelne Schichten horizontal in kleinere Rechenblöcke aufgeteilt, die unabhängig voneinander auf verschiedenen Geräten ausgeführt werden können. Dies ist besonders effektiv für Transformatorkomponenten wie Aufmerksamkeitsblöcke und mehrschichtige Perzeptronen (MLPs), bei denen z. B. verschiedene Aufmerksamkeitsköpfe für die parallele Berechnung separaten Geräten zugewiesen werden können. Die Tensor-Parallelität ist jedoch weniger effektiv für Operationen wie LayerNorm und Dropout, die nicht einfach aufgeteilt werden können und über mehrere Geräte hinweg repliziert werden müssen, was zu redundantem Speicherverbrauch für die Speicherung von Aktivierungen führt. Diese Einschränkung unterstreicht den Bedarf an ergänzenden Ansätzen zur Optimierung der Speichereffizienz.
Die Sequenzparallelität behebt die Speicherineffizienzen von Operationen wie LayerNorm und Dropout, indem sie entlang der Eingabesequenzdimension partitioniert werden, wobei ihre Unabhängigkeit über Sequenzelemente hinweg genutzt wird. Diese Methode reduziert den Speicherbedarf für redundante Aktivierungen und ist damit eine wertvolle Ergänzung zur Tensorparallelität. Diese Parallelisierungstechniken schließen sich nicht gegenseitig aus und können kombiniert werden, um große Sprachmodelle (LLMs) weiter zu optimieren. Darüber hinaus können spezifische Optimierungsstrategien für das Aufmerksamkeitsmodul die Skalierbarkeit verbessern und den Speicherbedarf pro GPU reduzieren, was ein effizienteres Training und eine effizientere Inferenz für große Modelle ermöglicht.
In der 2017 veröffentlichten Arbeit *Attention Is All You Need* von Vaswani et al. wurde das Transformer-Modell vorgestellt, dessen Eckpfeiler die Selbstaufmerksamkeit ist. Die Selbstaufmerksamkeit ermöglicht es dem Modell, die Relevanz verschiedener Wörter in einem Satz relativ zueinander zu bewerten und so das kontextuelle Verständnis für Aufgaben wie die Verarbeitung natürlicher Sprache zu verbessern. In dem Papier wurde die Selbstaufmerksamkeit formalisiert, insbesondere durch den Mechanismus der skalierten Punkt-Produkt-Aufmerksamkeit (SDPA), der Abfrage- und Schlüssel-Wert-Paare auf eine Ausgabe abbildet, was sie zu einer zentralen Komponente in modernen neuronalen Netzen macht. Hier sind einige der wichtigsten Techniken zur Optimierung von Aufmerksamkeitsberechnungen:

Multi-Head-Attention (MHA) baut auf SDPA auf, indem mehrere Aufmerksamkeitsoperationen parallel ausgeführt werden, jede mit unterschiedlichen Projektionen von Abfrage-, Schlüssel- und Wertmatrizen. Diese parallelen Operationen, oder "Köpfe", konzentrieren sich auf verschiedene repräsentative Teilräume und bereichern das Verständnis des Modells für die Eingabe. Die Ergebnisse dieser Köpfe werden verkettet und linear projiziert, wobei eine mit der Single-Head-Attention vergleichbare Recheneffizienz beibehalten wird, indem die Dimensionalität jedes Kopfes reduziert wird (z. B. indem die Modelldimension durch die Anzahl der Köpfe geteilt wird, z. B. durch 8).
Multi Query Attention (MQA) optimiert MHA für Inferenzen, indem Schlüssel- und Wertprojektionen auf mehrere Attention Heads verteilt werden, während mehrere Abfrageprojektionen beibehalten werden. Dadurch werden die Anforderungen an die Speicherbandbreite und die Größe des Key-Value-Cache (KV) reduziert, was größere Stapelgrößen und eine bessere Rechennutzung ermöglicht. MQA kann jedoch die Genauigkeit leicht verringern, und Modelle, die diese Technologie nutzen, müssen mit aktiviertem MQA trainiert oder feinabgestimmt werden, um die Leistung zu erhalten.
Grouped-Query-Attention (GQA) stellt ein Gleichgewicht zwischen MHA und MQA her, indem Abfrageköpfe gruppiert werden und Schlüsselwertprojektionen innerhalb jeder Gruppe geteilt werden, wodurch eine MHA-nahe Qualität mit einer Recheneffizienz erreicht wird, die näher an MQA liegt. Modelle wie Llama 2 70B verwenden GQA, und die mit MHA trainierten Modelle können mit minimalem zusätzlichem Training an GQA angepasst werden. Sowohl MQA als auch GQA verringern den Bedarf an KV-Cache-Speicher, obwohl weitere Optimierungen der Cache-Verwaltung erforderlich sind.
FlashAttention verbessert die Aufmerksamkeitsmechanismen, indem es Berechnungen neu anordnet, um die GPU-Speicherhierarchien effektiver zu nutzen. Im Gegensatz zur herkömmlichen schichtweisen Verarbeitung fasst FlashAttention Operationen zusammen und verwendet "Kacheln", um kleine Teile der Ausgabematrix auf einmal zu berechnen und so die Lese-/Schreibvorgänge im Speicher zu minimieren. Dieser E/A-bewusste, exakte Aufmerksamkeitsalgorithmus lässt sich nahtlos und ohne Änderungen in bestehende Modelle integrieren und bietet durch die Optimierung der Datenbewegung erhebliche Geschwindigkeitssteigerungen.
Die KV-Zwischenspeicherung ist eine wichtige Optimierungstechnik, die während der Dekodierungsphase großer Sprachmodelle (LLMs) eingesetzt wird, um die Effizienz der Self-Attention-Berechnungen zu verbessern. In dieser Phase hängt jedes generierte Token von den Schlüssel- (K) und Wert- (V) Tensoren aller vorherigen Token ab, einschließlich derjenigen, die während der Vorfüllphase und den nachfolgenden Dekodierungsschritten berechnet wurden. Anstatt diese Tensoren für jedes Token bei jedem Zeitschritt neu zu berechnen, werden sie beim KV-Caching im GPU-Speicher gespeichert, wobei neue Tensoren dem Cache hinzugefügt werden, sobald sie berechnet werden. In der Regel wird für jede Schicht des Modells ein separater KV-Cache verwaltet, wodurch redundante Berechnungen erheblich reduziert und der Dekodierungsprozess beschleunigt wird.

Der Speicherbedarf für LLMs auf GPUs wird hauptsächlich durch zwei Komponenten bestimmt: Modellgewichte und den KV-Cache. Die Modellgewichte, die aus den Parametern des Modells bestehen, belegen einen beträchtlichen Teil des Speichers. Ein Modell mit 7 Milliarden Parametern wie Llama 2 7B in 16-Bit-Präzision benötigt zum Beispiel etwa 14 GB. Der KV-Cache hingegen speichert Selbstaufmerksamkeits-Tensoren, um eine erneute Berechnung zu vermeiden. Seine Größe wird durch Faktoren wie die Anzahl der Schichten, Aufmerksamkeitsköpfe, Kopfabmessungen und Genauigkeit bestimmt. Für jedes Token wird die Cache-Größe berechnet als 2 * num_layers * (num_heads * dim_head) * precision_in_bytes, wobei der Faktor 2 sowohl die K- als auch die V-Matrizen berücksichtigt. Bei einem Stapel von Eingaben skaliert die gesamte KV-Cache-Größe mit der Stapelgröße und der Sequenzlänge und kann erhebliche Größen erreichen, z. B. ~2 GB für ein Llama 2 7B-Modell mit einer Sequenzlänge von 4.096 und einer Stapelgröße von 1.
Die effiziente Verwaltung des KV-Caches stellt eine Herausforderung dar, da er linear mit der Stapelgröße und der Sequenzlänge wächst, was den Durchsatz einschränken und den Umgang mit langen Kontexteingaben erschweren kann. Eine häufige Ineffizienz ergibt sich aus der statischen Überbelegung, bei der Speicher für die maximal unterstützte Sequenzlänge (z. B. 2.048 Token) reserviert wird, unabhängig von der tatsächlichen Eingabegröße. Dies führt zu einer erheblichen Speicherverschwendung oder Fragmentierung, da ein Großteil des reservierten Speicherplatzes oft während der gesamten Lebensdauer der Anfrage ungenutzt bleibt und wertvolle GPU-Speicherressourcen bindet.
Um diese Ineffizienzen zu beheben, führt der PagedAttention-Algorithmus einen neuen Ansatz ein, der sich am Paging von Betriebssystemen orientiert. Er unterteilt den KV-Cache in Blöcke fester Größe, von denen jeder eine bestimmte Anzahl von Token darstellt, die nicht zusammenhängend im Speicher abgelegt werden können. Eine Blocktabelle verfolgt diese Blöcke und holt sie bei Bedarf während der Aufmerksamkeitsberechnungen ab. Wenn neue Token erzeugt werden, werden zusätzliche Blöcke dynamisch zugewiesen. Diese Methode minimiert die Speicherverschwendung, indem sie die Notwendigkeit einer zusammenhängenden Zuweisung und Überversorgung beseitigt, größere Stapelgrößen ermöglicht und den Durchsatz verbessert, was sie zu einem bedeutenden Fortschritt bei der Verwaltung des KV-Cache-Speichers für LLMs macht.
In diesem Abschnitt werden verschiedene Techniken zur Optimierung großer Sprachmodelle (LLMs) erörtert, um deren Speicherverbrauch zu reduzieren und die Leistung auf GPUs zu verbessern. Zu den wichtigsten Methoden gehören Quantisierung, Sparsamkeit und Destillation, die jeweils auf unterschiedliche Aspekte der Modelleffizienz abzielen. Diese Techniken ändern die Modellgewichte, nutzen die GPU-Hardwarebeschleunigung und übertragen Wissen auf kleinere Modelle, so dass größere Modelle bei gleichbleibender Leistung auf begrenzter Hardware ausgeführt werden können. Diese Methoden können die Genauigkeit des Modells beeinträchtigen und sollten daher mit Vorsicht eingesetzt werden.
Durch die Quantisierung wird die Genauigkeit der Gewichte und Aktivierungen eines Modells reduziert, in der Regel von 32 oder 16 Bits auf 8 oder weniger Bits, so dass die Modelle weniger Speicherplatz benötigen und die Daten effizienter übertragen werden können. Während die Quantisierung von Gewichten aufgrund ihrer festen Natur nach dem Training einfach ist, ist die Quantisierung von Aktivierungen aufgrund von Ausreißern, die ihren dynamischen Bereich erweitern, komplexer. Techniken wie LLM.int8() gehen dieses Problem an, indem sie selektiv eine höhere Genauigkeit auf bestimmte Aktivierungen anwenden oder den dynamischen Bereich der quantisierten Gewichte für Aktivierungen wiederverwenden, obwohl GPUs möglicherweise eine Rückkonvertierung der Gewichte in eine höhere Genauigkeit für Operationen erfordern.
Sparsamkeit bedeutet, dass Modellwerte nahe bei Null beschnitten werden, wodurch spärliche Matrizen entstehen, die weniger Speicherplatz benötigen. GPUs unterstützen strukturierte Sparsamkeit, z. B. die Darstellung von zwei von vier Werten als Nullen, was die Berechnungen beschleunigt. Die Kombination von Sparsity mit Quantisierung kann die Ausführungsgeschwindigkeit weiter erhöhen. Die Forschung setzt die Erforschung optimaler spärlicher Darstellungen für LLMs fort, was einen vielversprechenden Weg zur Verbesserung der Inferenzgeschwindigkeit aufzeigt.
Distillation überträgt Wissen von einem größeren "Lehrermodell" auf ein kleineres "Schülermodell", wodurch die Größe komprimiert wird, während die Leistung erhalten bleibt. DistilBERT beispielsweise erreicht im Vergleich zu BERT eine Größenreduzierung von 40 % und eine Geschwindigkeitssteigerung von 60 %, wobei 97 % der Fähigkeiten erhalten bleiben. Distillation kann die Nachahmung der Ergebnisse des Lehrers oder die Verwendung von durch den Lehrer generierten Daten für das Training beinhalten, wobei Methoden wie "Distilling Step by Step!" Gründe für effizientes Lernen beinhalten. Allerdings schränken restriktive Lizenzen für viele fortgeschrittene LLMs die Verfügbarkeit von geeigneten Lehrermodellen für die Destillation ein.
Spekulative Inferenz, auch bekannt als spekulatives Sampling oder assistierte Generierung, ist eine Methode zur Parallelisierung der Ausführung von autoregressiven Large-Language-Modellen (LLMs) wie GPT-Modellen, die normalerweise Text Token für Token generieren. Bei der Standardausführung hängt jedes Token vom Kontext aller vorherigen Token ab, was eine parallele Generierung unmöglich macht, da das n-te Token vor dem (n+1)-ten generiert werden muss. Spekulative Inferenz löst dieses Problem, indem ein "billigeres" Entwurfsmodell verwendet wird, um mehrere zukünftige Token gleichzeitig vorherzusagen, die dann parallel vom Hauptmodell überprüft oder abgelehnt werden, was eine schnellere Texterzeugung ermöglicht.
Der Prozess umfasst die Erstellung eines Entwurfs für die Fortsetzung mehrerer Token mit einer weniger ressourcenintensiven Methode, gefolgt von einer parallelen Überprüfung durch das Hauptmodell, das den Entwurf als spekulativen Kontext verwendet. Stimmt das Verifikationsmodell mit den Token des Entwurfs überein, werden sie akzeptiert; andernfalls werden nicht übereinstimmende Token und nachfolgende Token verworfen, und der Prozess wird mit einem neuen Entwurf wiederholt. Token-Entwürfe können mit verschiedenen Ansätzen erzeugt werden, z. B. durch das Trainieren mehrerer Modelle, die Feinabstimmung mehrerer Köpfe auf einem vorab trainierten Modell, um künftige Token vorherzusagen, oder durch den Einsatz eines kleineren Entwurfsmodells neben einem größeren, leistungsfähigeren Verifizierungsmodell, wobei jedes Modell seine eigenen Kompromisse eingeht.
Disaggregierte Inferenz ist eine Technik, bei der die Berechnungsaufgaben auf verschiedene Hardware aufgeteilt werden, um Leistung, Kosten und Ressourcennutzung zu optimieren. Insbesondere werden die Vorfüll- und Dekodierungsphasen getrennt. Durch die Aufteilung dieser Phasen kann jede von ihnen der Hardware zugewiesen werden, die am besten für ihre Berechnungsanforderungen geeignet ist, was die Effizienz und Skalierbarkeit verbessert.

Das Prefilling ist rechenintensiv und erfordert erhebliche Matrixmultiplikationen, um die gesamte Eingabeaufforderung zu verarbeiten und KV-Caches zu erstellen. Diese Phase profitiert von Hochleistungshardware wie GPUs oder TPUs, die sich durch parallele Berechnungen auszeichnen. Da es sich beim Prefilling um eine einmalige Aufgabe pro Inferenzanfrage handelt, kann sie auf einen zentralen, leistungsstarken Rechenknoten verlagert werden, der für solche Arbeitslasten optimiert ist. Dieses Setup ermöglicht eine schnellere Verarbeitung großer Abfragen und reduziert die Belastung weniger leistungsfähiger Geräte, wodurch es sich ideal für Cloud-basierte oder Rechenzentrumsumgebungen eignet, in denen Hardware mit hohem Durchsatz verfügbar ist.
Im Gegensatz dazu ist die Dekodierung speichergebunden und beinhaltet eine iterative Token-Generierung, die sich stark auf den Zugriff auf die KV-Caches stützt. Sie erfordert weniger Rechenleistung, aber einen schnellen Speicherzugriff und ist daher für weniger leistungsfähige, speicheroptimierte Hardware wie CPUs oder Edge-Geräte geeignet. Durch die Verlagerung der Dekodierung auf separate Hardware - möglicherweise näher am Endbenutzer, z. B. Server vor Ort oder Edge-Geräte - reduziert die disaggregierte Inferenz die Latenz und die Anforderungen an die Netzwerkbandbreite. Diese Trennung ermöglicht eine flexible Bereitstellung, bei der das Prefilling auf High-End-Cloud-Servern und die Dekodierung auf lokalen oder Edge-Geräten erfolgt, wodurch die Ressourcenzuweisung optimiert und eine effiziente Skalierung für Anwendungen wie Echtzeit-Chatbots oder interaktive KI-Systeme ermöglicht wird.
In letzter Zeit wurden viele Techniken zur Optimierung von Schlussfolgerungen entwickelt, um die Leistung von LLMs zu verbessern.
Die Implementierung dieser Techniken erfordert ein tiefes Verständnis der LLM-Architektur und der von Ihnen verwendeten Hardware. Daher ist es im Allgemeinen einfacher, eine bestehende Inferenzmaschine zu verwenden, die diese Techniken bereits implementiert hat, wie vLLM, TensorRT-LLM, LMDeploy, usw. Wir haben diese Techniken in unserer eigenen Inferenz-Engine bei NLP Cloud implementiert und wir haben einen Blogbeitrag über Inferenz-Engines geschrieben, falls Sie Ihre eigenen Modelle einsetzen möchten: Sie können ihn hier lesen.
Wenn Sie Ihre eigenen LLMs nicht selbst bereitstellen können oder wollen, können Sie NLP Cloud nutzen und schnelle generative KI-Modelle in großem Umfang in der Produktion einsetzen. Probieren Sie die schnelle Inferenz auf NLP Cloud jetzt aus!
Wenn Sie Fragen zu Inferenzmaschinen im Allgemeinen haben, zögern Sie bitte nicht, uns zu fragen, wir beraten Sie gerne!
Julien
CTO bei NLP Cloud