Sign In
Free Sign Up
  • English
  • Español
  • 简体中文
  • Deutsch
  • 日本語
Sign In
Free Sign Up
  • English
  • Español
  • 简体中文
  • Deutsch
  • 日本語

Was man von Retrieval-Augmented Generation und selbstgehosteten LLMs erwarten kann

Retrieval-Augmented Generation (RAG) ist ein KI-Framework, das entwickelt wurde, um ein LLM (Large Language Model) durch die Integration von Informationen aus einer externen Wissensdatenbank zu erweitern. Angesichts des zunehmenden Interesses, das RAG in letzter Zeit auf sich gezogen hat, ist es vernünftig anzunehmen, dass RAG nun ein prominentes Thema im AI/NLP (Artificial Intelligence/Natural Language Processing)-Ökosystem ist. Daher wollen wir uns nun damit befassen, was man von RAG-Systemen erwarten kann, wenn sie mit selbstgehosteten LLMs kombiniert werden.

In dem Blog-Beitrag mit dem Titel „Entdecken Sie den Leistungsgewinn mit Retrieval-Augmented Generation (opens new window),” haben wir untersucht, wie die Anzahl der abgerufenen Dokumente die Qualität der Antworten des LLM verbessern kann. Wir haben auch beschrieben, wie das vektorisierte LLM basierend auf dem MMLU-Datensatz, der in einer Vektordatenbank wie MyScale (opens new window) gespeichert ist, genauere Antworten generiert, wenn es mit kontextuell relevantem Wissen integriert wird, ohne den Datensatz feinabzustimmen.

Daher lautet der zentrale Punkt:

RAG füllt die Wissenslücken, reduziert Halluzinationen, indem es die Eingabeaufforderungen mit externen Daten erweitert.

Die Verwendung von externen LLM-APIs in Ihrer Anwendung kann potenzielle Risiken für die Datensicherheit mit sich bringen, die Kontrolle verringern und die Kosten erheblich erhöhen, insbesondere bei hoher Benutzerzahl. Daher stellt sich die Frage:

Wie können Sie eine größere Datensicherheit gewährleisten und die Kontrolle über Ihr System behalten?

Die prägnante Antwort lautet: Verwenden Sie ein selbstgehostetes LLM. Dieser Ansatz bietet nicht nur eine überlegene Kontrolle über die Daten und das Modell, sondern stärkt auch die Datensicherheit und -privatsphäre und verbessert die Kosteneffizienz.

# Warum selbstgehostete LLMs?

Cloud-basierte Large Language Models-as-a-Service (wie OpenAI's ChatGPT) sind leicht zugänglich und können in einer Vielzahl von Anwendungsbereichen einen Mehrwert bieten, indem sie sofortigen und nachvollziehbaren Zugriff ermöglichen. Öffentliche LLM-Anbieter können jedoch die Datensicherheit und -privatsphäre beeinträchtigen, sowie Bedenken hinsichtlich der Kontrolle, des Wissenslecks und der Kosteneffizienz aufwerfen.

Hinweis:

Wenn Ihnen eine oder alle diese Bedenken bekannt vorkommen, lohnt es sich, ein selbstgehostetes LLM zu verwenden.

Während wir unsere Diskussion fortsetzen, wollen wir diese vier wesentlichen Bedenken im Detail besprechen:

# 🔒 Datenschutz

Datenschutz muss eine vorrangige Sorge sein, wenn Sie LLM-APIs in Ihre Anwendung integrieren.

Warum ist Datenschutz ein solches Problem?

Die Antwort auf diese Frage hat mehrere Teile, wie in den folgenden Punkten hervorgehoben:

  • LLM-Serviceanbieter könnten Ihre persönlichen Informationen für Training oder Analyse verwenden und so die Privatsphäre und Sicherheit gefährden.
  • Zweitens könnten LLM-Anbieter Ihre Suchanfragen in ihre Trainingsdaten aufnehmen.

Selbstgehostete LLMs lösen diese Probleme, da sie sicher sind und Ihre Daten niemals einer Drittanbieter-API ausgesetzt sind.

# 🔧 Kontrolle

LLM-Dienste wie OpenAI GPT-3.5 zensieren in der Regel Themen wie Gewalt und die Bitte um medizinischen Rat. Sie haben keine Kontrolle darüber, welcher Inhalt zensiert wird. Möglicherweise möchten Sie jedoch Ihr eigenes Zensurmodell (und Regeln) entwickeln.

Wie können Sie ein Zensurmodell annehmen, das Ihren Anforderungen entspricht?

Die theoretische Antwort in groben Zügen ist, dass das maßgeschneiderte Feinabstimmen eines LLMs durch den Aufbau benutzerdefinierter Filter gegenüber der Verwendung von Eingabeaufforderungen bevorzugt wird, da ein feinabgestimmtes Modell stabiler ist. Darüber hinaus bietet das selbstgehostete Feinabstimmen eines Modells die Freiheit, die standardmäßige Zensur, die bei öffentlichen LLMs enthalten ist, zu ändern und zu überschreiben.

# 📖 Wissenslecks

Wie oben beschrieben, sind Wissenslecks ein Problem bei der Verwendung eines LLM-Servers von Drittanbietern, insbesondere wenn Sie Abfragen ausführen, die proprietäre Geschäftsinformationen enthalten.

Hinweis:

Mögliche Wissenslecks fließen in beide Richtungen, von den Eingabeaufforderungen zum LLM und zurück zur abfragenden Anwendung.

Wie können Sie Wissenslecks verhindern?

Zusammenfassend lässt sich sagen, dass Sie ein selbstgehostetes LLM anstelle eines LLMs aus dem öffentlichen Bereich verwenden sollten, da Ihre proprietäre Geschäftsdatenbank eines der wertvollsten Assets ist.

# 💰 Kosteneffizienz

Es ist umstritten, ob selbstgehostete LLMs im Vergleich zu cloud-basierten LLMs kosteneffizient sind. Die in dem Artikel „Wie Continuous Batching die Durchsatzrate bei LLM-Inferenz um das 23-fache erhöht und die p50-Latenz reduziert (opens new window)” beschriebene Forschung zeigt, dass selbstgehostete LLMs kosteneffektiver sind, wenn Latenz und Durchsatz richtig ausbalanciert werden und eine fortgeschrittene Continuous-Batching-Strategie verwendet wird.

Hinweis:

Wir gehen in diesem Text weiter auf dieses Konzept ein.

# Das Maximum aus Ihrem RAG mit selbstgehosteten LLMs herausholen

LLMs benötigen enorme Rechenressourcen. Sie benötigen große Mengen an Ressourcen, um Antworten zu generieren und bereitzustellen. Die Hinzufügung eines RAG erhöht den Bedarf an Rechenressourcen nur noch weiter, da dadurch über 2.000 Tokens zu den für eine verbesserte Genauigkeit erforderlichen Tokens hinzugefügt werden können. Leider verursachen diese zusätzlichen Tokens zusätzliche Kosten, insbesondere wenn Sie mit Open-Source LLM-APIs wie OpenAI arbeiten.

Diese Zahlen können durch das Selbsthosting eines LLMs verbessert werden, indem Matrizen und Methoden wie KV Cache (opens new window) und Continuous Batching (opens new window) verwendet werden, um die Effizienz zu verbessern, wenn Ihre Eingabeaufforderungen zunehmen. Auf der anderen Seite berechnen die meisten cloud-basierten Core-GPU-Computing-Plattformen wie RunPod (opens new window) Ihre Laufzeiten und nicht Ihren Token-Durchsatz: eine gute Nachricht für selbstgehostete RAG-Systeme, die zu einem niedrigeren Kostensatz pro Eingabeaufforderungs-Token führt.

Die folgende Tabelle erzählt ihre eigene Geschichte: Selbstgehostete LLMs in Kombination mit RAG können Kosteneffizienz und Genauigkeit bieten. Zusammenfassend lässt sich sagen:

  • Die Kosten betragen nur 10% von gpt-3.5-turbo, wenn das Maximum erreicht wird.
  • Die llama-2-13b-chat RAG-Pipeline mit zehn Kontexten kostet nur 0,04 USD für 1840 Tokens, ein Drittel der Kosten von gpt-3.5-turbo ohne jeden Kontext.

Hinweis:

Weitere Details zum Leistungsgewinn mit RAG finden Sie in unserem ersten RAG-Blog-Beitrag (opens new window).

Tabelle: Gesamtkostenvergleich in US-Cent

# Kontexte Durchschn. Tokens LLaMA-2-13B Genauigkeitsgewinn llama-2-13b-chat @ 1 Thread llama-2-13b-chat @ 8 Threads llama-2-13b-chat @ 32 Threads gpt-3.5-turbo
0 417 +0,00% 0,3090 0,0423 0,0143 0,1225
1 554 +4,83% 0,3151 0,0450 0,0166 0,1431
3 737 +6,80% 0,3366 0,0514 0,0201 0,1705
5 1159 +9,07% 0,3627 0,0575 0,0271 0,2339
10 1840 +8,77% 0,4207 0,0717 0,0400 0,3360

# Unsere Methodik

Wir haben text-generation-inference (opens new window) verwendet, um ein unquantisiertes llama-2-13b-chat-Modell für alle Bewertungen in diesem Artikel auszuführen. Wir haben auch eine Cloud-Pod mit 1x NVIDIA A100 80GB gemietet, die 1,99 USD pro Stunde kostet. Ein Pod dieser Größe kann llama-2-13b-chat bereitstellen. Beachten Sie, dass jede Zahl das erste 4. Quantil als untere Grenze und das dritte 4. Quantil als obere Grenze verwendet, um die Datenverteilung mit Boxplots darzustellen.

Hinweis:

Das Bereitstellen von Modellen mit 70B erfordert mehr verfügbaren GPU-Speicher.

# Maximierung des LLM-Durchsatzes

Der Gesamtdurchsatz sollte das erste sein, worüber man nachdenken sollte. Wir haben das LLM von 1 bis 64 Threads überlastet, um viele gleichzeitige eingehende Anfragen zu simulieren. Das folgende Bild beschreibt, wie der Generierungsdurchsatz mit größeren Eingabeaufforderungen abnimmt. Der Generierungsdurchsatz konvergiert bei etwa 400 Tokens pro Sekunde, unabhängig davon, wie die Parallelität erhöht wird.

Das Hinzufügen von Eingabeaufforderungen verringert den Durchsatz. Als Lösung empfehlen wir die Verwendung eines RAG mit weniger als 10 Kontexten, um Genauigkeit und Durchsatz auszugleichen.

Generierungsdurchsatz

# Messung der Boot-Zeit für längere Eingabeaufforderungen

Die Reaktionsfähigkeit des Modells ist für uns entscheidend. Wir wissen auch, dass der Generierungsprozess für informelles Sprachmodellieren iterativ ist. Um die Antwortzeit des Modells zu verbessern, haben wir die Ergebnisse der vorherigen Generierung zwischengespeichert, um die Berechnungszeit mit KV Cache zu reduzieren. Wir nennen diesen Vorgang "Booten", wenn ein LLM mit KV Cache generiert wird.

Hinweis:

Sie müssen immer Schlüssel und Werte für alle Eingabeaufforderungen am Anfang des Prozesses berechnen.

Der Boot-Vorgang dauert bei längeren Eingabeaufforderungen länger

Wir haben die Boot-Zeit des Modells weiterhin erhöht, indem wir die Länge der Eingabeaufforderung erhöht haben. Das folgende Diagramm verwendet eine logarithmische Skala, um die Boot-Zeit darzustellen.

Die folgenden Punkte beziehen sich auf dieses Diagramm:

  • Boot-Zeiten mit weniger als 32 Threads sind akzeptabel.
  • Die Boot-Zeit der meisten Beispiele liegt unter 1000 ms.
  • Die Boot-Zeit steigt drastisch an, wenn wir die Parallelität erhöhen.
  • Die Beispiele mit 64 Threads beginnen bei über 1000 ms und enden bei etwa 10 Sekunden.
  • Das ist viel zu lange für Benutzer, um zu warten.

Boot-Zeiten bei unterschiedlichen Parallelitäten

Unser Setup zeigt eine durchschnittliche Boot-Zeit von etwa 1000 ms, wenn die Parallelität unter 32 Threads liegt. Daher empfehlen wir, das LLM nicht zu stark zu überlasten, da die Boot-Zeit absurd lang wird.

Boot-Zeiten bei unterschiedlichen Parallelitäten

# Bewertung der Generierungslatenz

Wir wissen, dass die Generierung eines LLMs mit KV Cache in Boot-Zeit und Generierungszeit unterteilt werden kann. Wir können die tatsächliche Generierungslatenz oder die Zeit, die der Benutzer warten muss, um das nächste Token in der Anwendung zu sehen, bewerten.

Generierungslatenz

Die Generierungslatenz ist stabiler als die Boot-Zeit, da größere Eingabeaufforderungen im Boot-Prozess schwer in eine Continuous-Batching-Strategie einzufügen sind. Wenn Sie also mehr Anfragen gleichzeitig haben, müssen Sie warten, bis die vorherigen Eingabeaufforderungen zwischengespeichert sind, bevor das nächste Token angezeigt wird.

Generierungslatenz P95

Die Generierung ist jedoch viel einfacher, sobald der Cache aufgebaut ist, da der KV-Cache die Anzahl der Iterationen reduziert und die Generierung geplant wird, sobald ein Platz in der Batch verfügbar ist. Die Latenz steigt bei verschiedenen Schritten an, wobei diese Schritte bei größeren Eingabeaufforderungen früher eintreffen und die Batch gesättigt wird. Weitere Anfragen werden das LLM bald erschöpfen und die Grenze erhöhen, während mehr Anfragen bedient werden.

Es ist vernünftig, immer eine Generierungslatenz von unter 90 ms zu erwarten und sogar etwa 60 ms, wenn Sie nicht zu stark auf Kontexte und Parallelität drängen. Daher empfehlen wir in diesem Setup fünf Kontexte mit 32 Parallelität.

# Kostenvergleich mit gpt-3.5-turbo

Wir sind sehr daran interessiert, was diese Lösung kostet. Daher haben wir die Kosten anhand der oben gesammelten Daten geschätzt und das folgende Kostenmodell für unsere Pipeline erstellt:

  • ist der stündliche Kosten für den Cloud-GPU-Server.
  • und sind die Boot- und Generierungszeit (in Millisekunden) für jede Anfrage.
  • berechnet die Anzahl der gleichzeitig verarbeiteten Threads (Parallelität).

Geschätzte Gesamtkosten für eine Anfrage

Die Verwendung von KV Cache und Continuous Batching verbessert die Kosteneffizienz des Systems und kann die Kosten im Vergleich zu gpt-3.5-turbo mit der richtigen Konfiguration auf ein Zehntel reduzieren. Eine Parallelität von 32 Threads wird für optimale Ergebnisse empfohlen.

Boost Your AI App Efficiency now
Sign up for free to benefit from 150+ QPS with 5,000,000 vectors
Free Trial
Explore our product

# Was kommt als Nächstes?

Die letzte Frage, die wir stellen, lautet:

Was können wir aus diesen Diagrammen lernen und wohin sollen wir als Nächstes gehen?

# Ausgewogenheit zwischen Latenz und Durchsatz

Es gibt immer einen Kompromiss zwischen Latenz und Durchsatz. Eine Schätzung Ihres täglichen Verbrauchs und der Toleranz Ihrer Benutzer für Latenz ist ein guter Ausgangspunkt. Um Ihre Leistung pro Dollar zu maximieren, empfehlen wir, eine Parallelität von 32 auf 1x NVIDIA A100 80GB mit llama-2-13b oder ähnlichen Modellen zu erwarten. Dies gibt Ihnen den besten Durchsatz, relativ geringe Latenz und ein vernünftiges Budget. Sie können Ihre Entscheidung jederzeit ändern; denken Sie immer daran, zuerst Ihren Anwendungsfall abzuschätzen.

# Modellfeinabstimmung: Länger und stärker

Sie können Ihr Modell jetzt mit RAG-Systemen feinabstimmen. Dadurch kann das Modell sich an lange Kontexte gewöhnen. Es gibt Open-Source-Repositories, die LLMs für eine längere Eingabelänge abstimmen, wie z.B. Long-LLaMA (opens new window). Mit längeren Kontexten feinabgestimmte Modelle sind gute In-Context-Learner und performen besser als Modelle, die durch RoPE-Skalierung (opens new window) gestreckt werden.

# Kombination von MyScale mit einem RAG-System: Kostenanalyse für Inferenz vs. Datenbank

Durch die Kombination von MyScale und 10 A100-GPUs von RunPod mit MyScale (Vektordatenbank) können Sie problemlos ein RAG-System mit Llama2-13B + Wikipedia-Wissensdatenbank konfigurieren, das nahtlos bis zu 100 gleichzeitige Benutzer bedient.

Bevor wir diese Diskussion abschließen, betrachten wir eine einfache Kostenanalyse für den Betrieb eines solchen Systems:

Empfohlenes Produkt Vorgeschlagene Spezifikationen Ungefähre Kosten/Monat (USD)
RunPod 10 A100-GPUs $14,000
MyScale 40 Millionen Vektoren (Datensätze) x 2 Replikate $2,000
Gesamt $16,000

Hinweis:

  • Diese Kosten sind eine Annäherung basierend auf den oben beschriebenen Kostenberechnungen.
  • Groß angelegte RAG-Systeme verbessern die Leistung von LLMs um mehr als 15% bei zusätzlichen Kosten im Vektordatenservice.
  • Die amortisierten Kosten für die Vektordatenbank werden noch niedriger sein, wenn die Anzahl der Benutzer zunimmt.
Join Our Newsletter

# Zusammenfassung...

Es ist naheliegend anzunehmen, dass zusätzliche Eingabeaufforderungen in RAG mehr kosten und langsamer sind. Unsere Bewertungen zeigen jedoch, dass dies eine praktikable Lösung für Anwendungen im realen Leben ist. Diese Bewertung hat auch untersucht, was man von selbstgehosteten LLMs erwarten kann, die Kosten und die Gesamtleistung dieser Lösung bewertet und Ihnen geholfen, Ihr Kostenmodell beim Bereitstellen eines LLMs mit der externen Wissensdatenbank aufzubauen.

Schließlich können wir sehen, dass die Kosteneffizienz von MyScale RAG-Systeme viel skalierbarer macht!

Wenn Sie also daran interessiert sind, die QA-Leistung von RAG-Pipelines zu bewerten, treten Sie uns auf Discord (opens new window) oder Twitter (opens new window) bei. Und Sie können auch Ihre eigenen RAG-Pipelines mit RQABenchmark (opens new window) bewerten!

Wir halten Sie über unsere neuesten Erkenntnisse zu LLMs und Vektordatenbanken auf dem Laufenden!

Keep Reading

Start building your Al projects with MyScale today

Free Trial
Contact Us