Erstellung von RAG-Anwendungen mit Milvus, Qwen und vLLM
Einführung
Im August 2023 veröffentlichte die Alibaba Group eine Familie hochmoderner Open-Source-Modelle namens Qwen, die mehrsprachige Sprachgewandtheit, fortgeschrittene Schlussfolgerungsfähigkeiten und hohe Effizienz kombinieren. Qwen führt eine skalierbare transformerbasierte Architektur ein, die für vielfältige Anwendungen optimiert ist, darunter natürliches Sprachverständnis, Bild- und Audiofähigkeiten, mathematisches Problemlösen und Codegenerierung. Diese Reihe von decoder-only Large Language Models (LLMs) erschließt leistungsstarke Möglichkeiten für den Aufbau von Retrieval Augmented Generation (RAG)-Systemen und bringt innovative Fähigkeiten in das derzeit wettbewerbsintensive Open-Source-Ökosystem ein.
Während LLMs auf CPUs oder über dedizierte Inferenz-Endpunkte ausgeführt werden können, bieten Tools wie vLLM spezialisierte Lösungen für eine effiziente großskalige Modellbereitstellung. vLLM ist eine Open-Source-Bibliothek, die darauf ausgelegt ist, den Inferenzprozess transformerbasierter Modelle zu optimieren, insbesondere für enorme Modellgrößen wie Qwen. Durch die Nutzung modernster Speicheroptimierungs- und Parallelisierungstechniken verbessert vLLM die Leistung großer Modelle und macht sie für Produktionsumgebungen zugänglicher und skalierbarer. Die Integration von Qwen mit vLLM ermöglicht eine nahtlose und effiziente Bereitstellung komplexer Modelle, was die Nutzung von LLMs in Echtzeitanwendungen in verschiedenen Branchen erleichtert.
In diesem Blog werden wir Qwen und vLLM untersuchen und zeigen, wie die Kombination beider mit der Milvus-Vektordatenbank zum Aufbau eines robusten RAG-Systems genutzt werden kann. Diese drei Technologien kombinieren die Stärken abrufbasierter und generativer Ansätze und schaffen ein System, das in der Lage ist, komplexe Abfragen in Echtzeit zu bearbeiten. Milvus verbessert das System, indem es großskalige Embeddings effizient verwaltet und abfragt, während Qwens fortgeschrittene Sprachfähigkeiten die Grundlage für Antworten bilden. Da vLLM die Bereitstellung optimiert, liefert diese Integration eine leistungsstarke Lösung für eine breite Palette KI-gestützter Anwendungen.
Überblick über die Modelle der Qwen-Serie
In ihrem ersten technischen Bericht erklärte die Alibaba Group, dass der Name Qwen von „Qianwen“ abgeleitet ist, was auf Chinesisch „tausende Prompts“ bedeutet. Die Qwen-Modelle wurden mit bis zu 3 Billionen Tokens aus mehrsprachigem Text und Code trainiert und integrierten fortgeschrittene Fine-Tuning-Techniken wie Supervised Fine-Tuning (SFT) und Reinforcement Learning from Human Feedback (RLHF).
Abbildung 1- Modellabstammung der Qwen-Serie
Abbildung 1: Modellabstammung der Qwen-Serie (Quelle)
Die Basis-Qwen-Modelle gibt es in vier Größen, die von 1,8 Milliarden bis 72 Milliarden Parametern reichen. Die Modelle verfügen über spezialisierte Versionen für Aufgaben wie Mathematik und Programmierung. Seit ihrer ursprünglichen Veröffentlichung haben sich Qwen-Modelle weiterentwickelt und Modellgröße, Leistung, Sprachfähigkeiten und Kontextlänge verbessert. Derzeit werden Qwen-Modelle wie folgt kategorisiert:
Erste Veröffentlichungen: Qwen 1.8B, 7B, 14B und 72B
Abbildung 2- Qwen Erste Veröffentlichungen .png
Abbildung 2: Qwen Erste Veröffentlichungen (Quelle)
Qwen Vision Model Series
Das Qwen Vision Model wurde ursprünglich in zwei Versionen veröffentlicht: Qwen-VL und Qwen-VL-Chat. Diese Modelle wurden entwickelt, um visionsbasierte Aufgaben wie das Lesen von Dokumenten, mathematisches Schlussfolgern und visuelle Fragebeantwortung zu bewältigen. Seitdem wurden sie auf die Versionen Qwen-VL und Qwen2-VL aktualisiert, wobei die neueste die fortschrittlichste ist und erhebliche Leistungsverbesserungen bietet, indem sie Modelle wie Googles Gemini und OpenAIs GPT in verschiedenen Vision-Benchmarks übertrifft:
Qwen-VL: Qwen-VL-Plus und Qwen-VL-Max.
Qwen2-VL: Qwen2-VL-2B, Qwen2-VL-7B und Qwen2-VL-72B.
Figure 3- Qwen-VL Benchmark Comparison.png
Abbildung 3: Qwen-VL-Benchmark-Vergleich (Quelle)
Figure 4- Qwen2-VL Architecture.png
Abbildung 4: Qwen2-VL-Architektur (Quelle)
Figure 5- Qwen2-VL-72B Benchmark Comparison.png
Abbildung 5: Qwen2-VL-72B-Benchmark-Vergleich (Quelle)
Qwen Audio Series
Ähnlich wie das Vision-Modell wurde die Qwen-Audio-Serie ursprünglich in zwei Versionen veröffentlicht: Qwen-Audio (ein Multitask-Audio-Sprachmodell) und Qwen-Audio-Chat (eine Version, die mit Anweisungen feinabgestimmt wurde). Diese Modelle wurden entwickelt, um sowohl Audio- als auch Texteingaben zu verarbeiten und textbasierte Ausgaben zu generieren. Mit dem Aufkommen der Qwen2-Serie wurden beide Modelle weiter verbessert:
- Qwen2-Audio-7B und Qwen2-Audio-7B-Instruct: Diese Modelle können sowohl Audio- als auch Texteingaben akzeptieren und Textausgaben generieren, wodurch die mehrsprachigen Fähigkeiten für Anwendungen wie Spracherkennung, Transkription und sprachbasierte KI-Assistenten verbessert werden
Figure 6- Qwen-Audio Architecture
Abbildung 6: Qwen-Audio-Architektur (Quelle)
Figure 7- Qwen2-Audio Architecture
Abbildung 7: Qwen2-Audio-Architektur (Quelle)
Qwen 2.5 Series
Die Qwen 2.5-Serie baut auf den Grundlagen der ursprünglichen Qwen-Modelle auf, mit zwei bedeutenden Upgrades: Qwen 1.5 und Qwen 2. Diese Serien führen spezialisierte Modelle ein, die darauf ausgelegt sind, die Fähigkeiten der Qwen-Familie weiter auszubauen, und bieten fortschrittliche Verbesserungen in verschiedenen Bereichen wie Mathematik, Programmierung und allgemeinem Sprachverständnis. Bemerkenswert ist, dass die Veröffentlichung von Qwen 1.5 auch eine Mixture of Experts (MoE)-Version enthielt, die der Modellsuite Vielseitigkeit und Leistungsverbesserungen hinzufügt. Diese Entwicklungen machen die Qwen 2.5-Serie äußerst anpassungsfähig für spezialisierte Aufgaben, während sie eine breite Anwendbarkeit beibehält.
Qwen 2.5-Modelle sind in verschiedenen Größen erhältlich, darunter 0.5B, 1.5B, 3B, 7B, 14B, 32B und 72B, und bieten Flexibilität für unterschiedliche Anwendungsfälle:
Qwen 2.5-Math: Dieses Modell wurde speziell für das Lösen komplexer mathematischer Probleme entwickelt. Es liefert präzise Lösungen in verschiedenen Bereichen, von grundlegender Arithmetik bis hin zu fortgeschrittener Analysis. Die Serie umfasst Modelle unterschiedlicher Größen: 1.5B, 7B und 32B, sowie Qwen 2.5-Math-RM-72B, eine spezialisierte Version, die mit einem mathematischen Belohnungsmodell für noch höhere Präzision bei mathematischen Aufgaben optimiert wurde.
Qwen 2.5-Coder: Ein Modell, das für Codegenerierung und Debugging feinabgestimmt wurde. Qwen 2.5-Coder ist ideal für die Automatisierung von Programmieraufgaben, einschließlich Skripterstellung, Code-Vervollständigung und Code-Reviews. Das Modell ist in den Größen 0.5B, 1.5B, 3B, 7B, 14B und 32B verfügbar und bietet Entwicklern Flexibilität für eine breite Palette von Coding-Anwendungen.
Figure 8- Qwen 2-5 Benchmark Comparison.png
Abbildung 8: Qwen 2-5 Benchmark-Vergleich (Quelle)
Figure 9- Qwen 2-5-Coder Benchmark Comparison
Abbildung 9: Qwen 2-5-Coder Benchmark-Vergleich (Quelle)
Figure 10- Qwen 2-5-Math Benchmark .png
Abbildung 10: Qwen 2-5-Math Benchmark (Quelle)
QwQ-Serie
Die QwQ-Serie, derzeit ein experimentelles Forschungsmodell, stellt einen mutigen Sprung in fortgeschrittenes KI-Schlussfolgern dar. Das Modell verhält sich wie ein nachdenklicher Schüler, verkörpert Neugier und hinterfragt seine eigenen Überlegungen, bevor es Erkenntnisse liefert. Die erste Veröffentlichung, QwQ-32B-Preview, konzentriert sich auf die Lösung komplexer Probleme in Mathematik, Coding und Schlussfolgern und zeigt außergewöhnliche Leistungen in Benchmarks wie GPQA, AIME und MATH-500.
Figure 11- QwQ Benchmark Comparison
Abbildung 11: QwQ Benchmark-Vergleich (Quelle)
vLLM: Optimierung der Inferenz großer Modelle
vLLM (Virtual Large Language Model) ist eine Open-Source-Bibliothek, die entwickelt wurde, um die Inferenz für große Sprachmodelle zu optimieren und zentrale Herausforderungen bei der Bereitstellung transformerbasierter Architekturen im großen Maßstab zu adressieren. Durch innovative Techniken wie PagedAttention, Tensor-Parallelismus und effiziente Caching-Strategien erzielt vLLM während der Inferenz erhebliche Reduzierungen des Rechenaufwands und der Speichernutzung. Diese Optimierungen ermöglichen die Bereitstellung größerer und komplexerer Modelle mit verbesserter Effizienz und reduzieren die Kosten und den Aufwand, die für den Betrieb modernster KI-Systeme erforderlich sind.
Figure 12- vLLM System Overview.png
Abbildung 12: vLLM-Systemübersicht (Quelle)
Hauptmerkmale und Innovationen
PagedAttention
Das herausragende Merkmal von vLLM, PagedAttention, revolutioniert das GPU-Speichermanagement, indem es Prinzipien des Speichermanagements von Betriebssystemen übernimmt. Dieser Ansatz ermöglicht die dynamische Zuweisung und Auslagerung von Speicher während der Inferenz, wodurch der Durchsatz erheblich verbessert und die Latenz reduziert wird. Durch die effiziente Verwaltung von GPU-Ressourcen erleichtert PagedAttention die Nutzung größerer Modelle, ohne umfangreiche Hardware-Ressourcen zu erfordern, und macht es zu einer praktischen Wahl für die Skalierung von KI-Anwendungen.
Tensor-Parallelismus und Caching
Zusätzlich zu PagedAttention setzt vLLM fortgeschrittenen Tensor-Parallelismus ein, um Arbeitslasten effektiv auf mehrere GPUs zu verteilen. Außerdem integriert es effiziente Caching-Mechanismen, um redundante Berechnungen zu minimieren und die Modellleistung während der Inferenz weiter zu verbessern. Zusammen stellen diese Techniken sicher, dass vLLM schnelle und kosteneffiziente Inferenz für Transformer-Modelle liefert.
Anwendungen
vLLM unterstützt die Echtzeitbereitstellung großer Sprachmodelle in verschiedenen Bereichen:
Natural Language Processing (NLP): Aufgaben wie Textzusammenfassung, Sentimentanalyse und Erkennung benannter Entitäten.
Konversationelle KI: Echtzeit-Chatbot-Systeme und virtuelle Assistenten.
Retrieval-Augmented Generation (RAG): Integration großer Modelle mit Retrieval-Systemen für fortgeschrittene Frage-Antwort- und Wissensabrufaufgaben.
RAG-Anwendung mit Milvus, vLLM und Qwen
Dieses Tutorial zeigt, wie man eine RAG-Pipeline mit Milvus als Vektordatenbank, Qwen als Sprachmodell, vLLM für optimierte Inferenz und LangChain als Framework implementiert. Der vollständige Code dieses Tutorials ist im folgenden Notebook zu finden.
Schritt 1: Umgebung einrichten
Um vLLM effizient zu nutzen, benötigen wir eine GPU. Das folgende Notebook wurde in Google Colab mit einer A100-GPU ausgeführt. Zusätzlich ist ein OpenAI API Key erforderlich, um die Embeddings zu generieren.
Schritt 2: Daten laden
Als Quelle für unsere Wissensdatenbank laden wir einige Blogs über Qwen-Modelle während ihrer Veröffentlichungen und teilen sie mit der RecursiveCharacterTextSplitter-Methode von LangChain in Chunks auf.
# Load documents
loader = WebBaseLoader(
web_paths=(
"https://qwenlm.github.io/blog/qwq-32b-preview/",
"https://qwenlm.github.io/blog/qwen2.5/",
"https://qwenlm.github.io/blog/qwen2.5-coder-family/",
)
)
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=200)
docs = text_splitter.split_documents(documents)
Schritt 3: Milvus Retriever erstellen
Als Nächstes konfigurieren wir den Milvus-Retriever mit dem Textinhalt und den Metadaten für effizientes Retrieval, da Metadaten der Wissensdatenbank zusätzlichen unterstützenden Kontext hinzufügen.
# Set Milvus retriever
embeddings = OpenAIEmbeddings()
vectorstore = Milvus.from_documents(
documents=docs,
embedding=embeddings,
connection_args={
"uri": "./milvus_demo.db",
},
text_field="page_content",
metadata_field="metadata",
drop_old=True,
)
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": 4})
Schritt 4: LLM-Engine initialisieren
Die vLLM-Engine muss effizient initialisiert werden, um das spezifische Modell zu laden, in diesem Fall "Qwen/Qwen2.5-1.5B”. Mit Konfigurationen wie optimierter GPU-Speichernutzung (80%) und bfloat16 für effiziente Berechnung stellen wir sicher, dass der Speicher nicht ausgeht, und ermöglichen einen schnellen und ressourcenschonenden Betrieb zur Generierung von bis zu 500 Tokens.
# Initialize vLLM
llm = VLLM(
model="Qwen/Qwen2.5-1.5B",
max_new_tokens=500,
enforce_eager=True,
dtype="bfloat16",
gpu_memory_utilization=0.8)
Schritt 5: RAG-Pipeline implementieren
Dann erstellen wir eine RAG-Pipeline mit dem Qwen-Modell, dem Milvus-Retriever und einer Prompt-Vorlage, um unseren Kontext und unsere Frage einzuspeisen. Zusätzlich fügen wir eine Funktion zur Anzeige der Antwort hinzu, um nicht nur die Antwort, sondern auch den Quellkontext zu visualisieren.
# Set QA chain
template = """
You are an assistant for question-answering tasks.
Use the following pieces of retrieved context to answer the
question.
If you don't know the answer, just say that you don't know.
Please provide the answer in the English language.
Question: {question}
Context: {context}
Answer:
"""
prompt = PromptTemplate.from_template(template)
qa_chain = RetrievalQA.from_chain_type(
llm,
retriever=retriever,
chain_type_kwargs={"prompt": prompt },
return_source_documents=True
)
# Print statements for response details
def display_response_details(response):
print("Query:", response["query"])
print("Result:", response["result"])
# Metadaten aus dem ersten Quelldokument extrahieren
source_doc = response["source_documents"][0].metadata
print("Quelle:", source_doc["source"])
print("Beschreibung:", source_doc["description"])
print("Titel:", source_doc["title"])
# Frage festlegen
question = "Was kannst du mir über das QwQ-Modell erzählen?"
# Abfrage initialisieren
response = qa_chain.invoke({"query": question, "context": retriever})
Ausgabe:
Abfrage: Was kannst du mir über das QwQ-Modell erzählen?
Ergebnis: Das QwQ-Modell (Qwen with Questions) zeigt, dass es tiefgehend denken, fragen und verstehen kann. Es ist wie ein Schüler, der sich immer wundert und sorgfältig nachdenkt, bevor er eine Antwort gibt. Genau wie beim Lernen neuer Dinge weiß es, dass es nichts weiß, und stellt weiterhin Fragen, um mehr zu lernen. Es hat außerdem einige Einschränkungen und muss im Laufe der Zeit mehr lernen. Genau wie jeder andere wächst und verbessert es sich ständig.
Quelle: https://qwenlm.github.io/blog/qwq-32b-preview/
Beschreibung: GITHUB HUGGING FACE MODELSCOPE DEMO DISCORD
Hinweis: Dies ist die Aussprache von QwQ: /kwju:/ , ähnlich wie das Wort „quill“.
Was bedeutet es zu denken, zu fragen, zu verstehen? Das sind die tiefen Gewässer, in die QwQ (Qwen with Questions) eintaucht. Wie ein ewiger Schüler der Weisheit nähert es sich jedem Problem – sei es Mathematik, Code oder Wissen über unsere Welt – mit echter Verwunderung und Zweifel. QwQ verkörpert diesen alten philosophischen Geist: Es weiß, dass es nichts weiß, und genau das treibt seine Neugier an.
Titel: QwQ: Tief über die Grenzen des Unbekannten reflektieren | Qwen
Wir können auch eine zweite Frage zu den anderen Modellen hinzufügen. Wir sehen, dass die Antworten in beiden Fällen detailliert und präzise sind, was eine hohe Leistung sowohl von Milvus als auch von Qwen zeigt, zusammen mit vLLM, das die Antwort in weniger als 1 s geliefert hat.
# Frage festlegen
question = "Was kannst du mir über die Open-Source-Modelle Qwen2.5 erzählen: Qwen2.5, Qwen2.5-Coder, Qwen2.5-Math?"
# Abfrage initialisieren
response = qa_chain.invoke({"query": question, "context": retriever})
Ausgabe:
Abfrage: Was kannst du mir über die Open-Source-Modelle Qwen2.5 erzählen: Qwen2.5, Qwen2.5-Coder, Qwen2.5-Math?
Ergebnis: Die Qwen2.5-Modelle, nämlich Qwen2.5, Qwen2.5-Coder und Qwen2.5-Math, haben im Vergleich zu ihren Vorgängern erhebliche Verbesserungen in verschiedenen Aspekten erzielt. Hier sind einige wichtige Erkenntnisse:
1. **Akademische Leistung:**
- Qwen2.5 erzielte unter Open-Source-Modellen die beste Leistung bei mehreren beliebten Benchmarks zur Codegenerierung (EvalPlus, LiveCodeBench, BigCodeBench).
- Qwen2.5 schnitt auch bei einer instruktiven Evaluierungsaufgabe sehr gut ab, was auf eine starke Ausrichtung an menschenähnlichen Fähigkeiten zum Befolgen von Anweisungen hinweist.
- Qwen2.5 bot eine mit GPT-4o konkurrenzfähige Leistung und zeigte damit Überlegenheit gegenüber seinen Vorgängern.
2. **Praktische Anwendungen:**
- Qwen2.5-Modelle zeichnen sich im Umgang mit verschiedenen Programmiersprachen aus und zeigen ihre Anpassungsfähigkeit und Vielseitigkeit.
- Qwen2.5-Modelle wurden erheblich verbessert, wodurch ihre Fähigkeiten auf komplexere Schlussfolgerungsaufgaben ausgeweitet wurden.
3. **Modelltraining:**
- Qwen2.5 wurde zusammen mit Qwen2.5-Coder und Qwen2.5-Math auf umfangreichen Datensätzen trainiert, die 18 Billionen Tokens umfassen. Dazu gehören codebezogene Daten, wodurch kleinere Coding-Modelle konkurrenzfähig mit größeren und umfassenderen Modellen arbeiten können.
4. **Modellunterstützung:**
- Alle Qwen2.5-Modelle können eine breite Palette von Programmiersprachen unterstützen und bieten Nutzern Zugänglichkeit und Anwendbarkeit.
5. **Allgemeine Fähigkeiten:**
- Qwen2.5-Modelle zeigen nun eine verbesserte Leistung bei Schlussfolgerungs- und Generierungsaufgaben wie Code-Reparatur und Code-Schreiben.
6. **Spezialisierte Modelle:**
- Qwen2.5-Coder konzentriert sich auf Coding-Aufgaben und bietet eine bessere Leistung bei Code-Generierung, Reparatur und sogar Reasoning-Fähigkeiten.
- Qwen2.5-Math verbessert das Basismodell Qwen2-Math, erweitert die Unterstützung für Chinesisch und integriert ausgefeilte Reasoning-Methoden wie Chain-of-Thought (CoT), Program-of-Thought (PoT) und Tool-Integrated Reasoning (TIR).
7. **Modelllizenzierung:**
- Alle Open-Source-Modelle sind unter Apache 2.0 lizenziert, wodurch Kompatibilität und einfache Nutzung in verschiedenen Entwicklungsumgebungen gewährleistet werden.
Diese Verbesserungen tragen gemeinsam zur Entwicklung leistungsstarker und vielseitiger intelligenter Programmierassistenten mit breiteren Fähigkeiten und verbesserter Leistung bei.
Quelle: https://qwenlm.github.io/blog/qwen2.5/
Beschreibung: GITHUB HUGGING FACE MODELSCOPE DEMO DISCORD
Einführung In den vergangenen drei Monaten seit der Veröffentlichung von Qwen2 haben zahlreiche Entwickler neue Modelle auf Basis der Qwen2-Sprachmodelle erstellt und uns wertvolles Feedback gegeben. In dieser Zeit haben wir uns darauf konzentriert, intelligentere und wissensreichere Sprachmodelle zu entwickeln. Heute freuen wir uns, die neueste Ergänzung der Qwen-Familie vorzustellen: Qwen2.5. Wir kündigen an, was möglicherweise die größte Open-Source-Veröffentlichung der Geschichte ist!
Titel: Qwen2.5: Eine Party der Basismodelle! | Qwen
Fazit
Die in dieser Untersuchung vorgestellten technischen Innovationen—insbesondere die Integration von PagedAttention in vLLM und das effiziente Vektormanagement von Milvus—verdeutlichen die entscheidende Bedeutung der Infrastruktur, um große Sprachmodelle praxistauglich und zugänglich zu machen. Diese Technologien adressieren zentrale Herausforderungen bei der Modellbereitstellung, wie Speicheroptimierung, Inferenzgeschwindigkeit und skalierbaren Wissensabruf. Durch die Lösung dieser technischen Engpässe können Entwickler und Organisationen nun anspruchsvolle Retrieval-Augmented Generation (RAG)-Systeme implementieren, die zuvor komplex oder ressourcenintensiv waren, und damit neue Grenzen für KI-gestützte Anwendungen in Branchen wie Gesundheitswesen, Bildung, Softwareentwicklung und wissenschaftlicher Forschung eröffnen.
Verwandte Ressourcen
Schätzen Sie schnell Ihre Kosten für den Aufbau von RAG-Pipelines mit diesem kostenlosen Rechner
Fortgeschrittenes RAG und multimodale Abfragen mit Milvus und Friendli AI erstellen
RAG-Anwendungen 10x schneller mit Zilliz und Vectorize bereitstellen
So verwenden Sie Function Calling mit Ollama, Llama3 und Milvus
Weiterlesen

Zilliz Named "Highest Performer" and "Easiest to Use" in G2's Summer 2025 Grid® Report for Vector Databases
Zilliz shines in G2's Summer 2025 Grid® Report as both "Highest Performer" and "Easiest to Use," solving the performance-usability dilemma.

Legal Document Analysis: Harnessing Zilliz Cloud's Semantic Search and RAG for Legal Insights
Enhance legal document analysis with Zilliz Cloud’s Semantic Search and RAG. Improve accuracy, efficiency, and scalability for contracts, case law, and compliance.

Vector Databases vs. Graph Databases
Use a vector database for AI-powered similarity search; use a graph database for complex relationship-based queries and network analysis.



