Créer des applications RAG avec Milvus, Qwen et vLLM
Introduction
En août 2023, le groupe Alibaba a publié une famille de modèles open source de pointe appelée Qwen, qui combine fluidité multilingue, capacités de raisonnement avancées et haute efficacité. Qwen introduit une architecture basée sur les transformers évolutive, optimisée pour diverses applications, notamment la compréhension du langage naturel, les capacités de vision et audio, la résolution de problèmes mathématiques et la génération de code. Cette série de grands modèles de langage (LLMs) uniquement décodeurs ouvre de puissantes possibilités pour la création de systèmes de génération augmentée par récupération (RAG) et introduit des capacités innovantes dans l’écosystème open source concurrentiel actuel.
Bien que les LLM puissent être exécutés sur des CPU ou via des points de terminaison d’inférence dédiés, des outils comme vLLM offrent des solutions spécialisées pour un déploiement efficace de modèles à grande échelle. vLLM est une bibliothèque open source conçue pour optimiser le processus d’inférence des modèles basés sur les transformers, en particulier pour les tailles de modèles massives comme Qwen. En tirant parti de techniques de pointe d’optimisation de la mémoire et de parallélisation, vLLM améliore les performances des grands modèles, les rendant plus accessibles et évolutifs pour les environnements de production. L’intégration de Qwen avec vLLM permet un déploiement fluide et efficace de modèles complexes, ce qui facilite l’utilisation des LLM dans des applications en temps réel dans divers secteurs.
Dans ce blog, nous explorerons Qwen et vLLM, ainsi que la manière dont leur combinaison avec la base de données vectorielle Milvus peut être utilisée pour construire un système RAG robuste. Ces trois technologies combinent les forces des approches basées sur la récupération et génératives, créant un système capable de répondre à des requêtes complexes en temps réel. Milvus améliore le système en gérant et en interrogeant efficacement des embeddings à grande échelle, tandis que les capacités linguistiques avancées de Qwen fournissent la base des réponses. Avec vLLM optimisant le déploiement, cette intégration fournit une solution haute performance pour un large éventail d’applications pilotées par l’IA.
Présentation des modèles de la série Qwen
Dans leur premier rapport technique , le groupe Alibaba a expliqué que le nom Qwen est dérivé de « Qianwen », qui signifie « des milliers de prompts » en chinois. Les modèles Qwen ont été entraînés à l’aide de jusqu’à 3 000 milliards de tokens de texte multilingue et de code, intégrant des techniques avancées de fine-tuning telles que le fine-tuning supervisé (SFT) et l’apprentissage par renforcement à partir de retours humains (RLHF).
Figure 1- Lignée des modèles de la série Qwen
Figure 1 : Lignée des modèles de la série Qwen (Source)
Les modèles Qwen de base sont disponibles en quatre tailles, allant de 1,8 milliard à 72 milliards de paramètres. Les modèles disposent de versions spécialisées pour des tâches telles que les mathématiques et le codage. Depuis leur publication initiale, les modèles Qwen ont évolué, améliorant la taille du modèle, les performances, les capacités linguistiques et la longueur du contexte. Actuellement, les modèles Qwen sont classés comme suit :
Premières versions : Qwen 1.8B, 7B, 14B et 72B
Figure 2- Premières versions de Qwen .png
Figure 2 : Premières versions de Qwen (Source)
Série de modèles Qwen Vision
Le modèle Qwen Vision a initialement été publié en deux versions : Qwen-VL et Qwen-VL-Chat. Ces modèles ont été conçus pour gérer des tâches basées sur la vision, comme la lecture de documents, le raisonnement mathématique et la réponse visuelle aux questions. Ils ont depuis été mis à niveau vers les versions Qwen-VL et Qwen2-VL, la dernière étant la plus avancée, qui offrent des améliorations significatives des performances, surpassant des modèles comme Gemini de Google et GPT d’OpenAI dans divers benchmarks de vision :
Qwen-VL : Qwen-VL-Plus et Qwen-VL-Max.
Qwen2-VL : Qwen2-VL-2B, Qwen2-VL-7B et Qwen2-VL-72B.
Figure 3- Qwen-VL Benchmark Comparison.png
Figure 3 : Comparaison des benchmarks de Qwen-VL (Source)
Figure 4- Qwen2-VL Architecture.png
Figure 4 : Architecture de Qwen2-VL (Source)
Figure 5- Qwen2-VL-72B Benchmark Comparison.png
Figure 5 : Comparaison des benchmarks de Qwen2-VL-72B (Source)
Série Qwen Audio
Comme le modèle de vision, la série Qwen Audio a initialement été publiée en deux versions : Qwen-Audio (un modèle audio-langage multitâche) et Qwen-Audio-Chat (une version affinée avec des instructions). Ces modèles ont été conçus pour gérer à la fois des entrées audio et textuelles, en générant des sorties basées sur du texte. Avec l’arrivée de la série Qwen2, les deux modèles ont été encore améliorés :
- Qwen2-Audio-7B et Qwen2-Audio-7B-Instruct : Ces modèles peuvent accepter à la fois des entrées audio et textuelles et générer des sorties textuelles, améliorant les capacités multilingues pour des applications telles que la reconnaissance vocale, la transcription et les assistants d’IA vocaux
Figure 6- Qwen-Audio Architecture
Figure 6 : Architecture de Qwen-Audio (Source)
Figure 7- Qwen2-Audio Architecture
Figure 7 : Architecture de Qwen2-Audio (Source)
Série Qwen 2.5
La série Qwen 2.5 s’appuie sur les fondations des modèles Qwen originaux avec deux mises à niveau majeures : Qwen 1.5 et Qwen 2. Ces séries introduisent des modèles spécialisés conçus pour étendre davantage les capacités de la famille Qwen, offrant des améliorations avancées dans divers domaines tels que les mathématiques, le codage et la compréhension générale du langage. Notamment, la version Qwen 1.5 comprenait également une version Mixture of Experts (MoE), ajoutant de la polyvalence et des améliorations de performance à la suite de modèles. Ces développements rendent la série Qwen 2.5 hautement adaptable aux tâches spécialisées tout en conservant une large applicabilité.
Les modèles Qwen 2.5 sont disponibles dans une gamme de tailles, notamment 0.5B, 1.5B, 3B, 7B, 14B, 32B et 72B, offrant une flexibilité pour différents cas d’utilisation :
Qwen 2.5-Math : Ce modèle est spécialement conçu pour résoudre des problèmes mathématiques complexes. Il fournit des solutions précises dans divers domaines, de l’arithmétique de base au calcul avancé. La série comprend des modèles de différentes tailles : 1.5B, 7B et 32B, ainsi que le Qwen 2.5-Math-RM-72B, une version spécialisée optimisée avec un modèle de récompense mathématique pour une précision encore plus grande dans les tâches mathématiques.
Qwen 2.5-Coder : modèle affiné pour la génération de code et le débogage, Qwen 2.5-Coder est idéal pour automatiser les tâches de programmation, notamment l’écriture de scripts, la complétion de code et les revues de code. Le modèle est disponible en tailles 0.5B, 1.5B, 3B, 7B, 14B et 32B, offrant de la flexibilité aux développeurs travaillant sur un large éventail d’applications de codage.
Figure 8- Qwen 2-5 Benchmark Comparison.png
Figure 8 : comparaison des benchmarks Qwen 2-5 (Source)
Figure 9- Qwen 2-5-Coder Benchmark Comparison
Figure 9 : comparaison des benchmarks Qwen 2-5-Coder (Source)
Figure 10- Qwen 2-5-Math Benchmark .png
Figure 10 : benchmark Qwen 2-5-Math (Source)
Série QwQ
La série QwQ, actuellement un modèle de recherche expérimental, représente un saut audacieux vers le raisonnement avancé en IA. Le modèle agit comme un étudiant réfléchi, incarne la curiosité, remettant en question ses propres réflexions avant d’offrir des perspectives. Axée sur la résolution de problèmes complexes en mathématiques, en codage et en raisonnement, la première version, QwQ-32B-Preview, présente des performances exceptionnelles dans des benchmarks tels que GPQA, AIME et MATH-500.
Figure 11- QwQ Benchmark Comparison
Figure 11 : comparaison des benchmarks QwQ (Source)
vLLM : optimisation de l’inférence des grands modèles
vLLM (Virtual Large Language Model) est une bibliothèque open source conçue pour optimiser l’inférence des grands modèles de langage, en répondant aux principaux défis liés au déploiement à grande échelle des architectures basées sur les transformeurs. Grâce à des techniques innovantes telles que PagedAttention, le parallélisme tensoriel et des stratégies de mise en cache efficaces, vLLM réduit considérablement la surcharge de calcul et l’utilisation de la mémoire pendant l’inférence. Ces optimisations permettent le déploiement de modèles plus grands et plus complexes avec une efficacité accrue, réduisant le coût et les efforts nécessaires pour exécuter des systèmes d’IA de pointe.
Figure 12- vLLM System Overview.png
Figure 12 : aperçu du système vLLM (Source)
Fonctionnalités et innovations clés
PagedAttention
La fonctionnalité phare de vLLM, PagedAttention, révolutionne la gestion de la mémoire GPU en adoptant des principes issus de la gestion de la mémoire des systèmes d’exploitation. Cette approche permet l’allocation dynamique et la pagination de la mémoire pendant l’inférence, améliorant considérablement le débit et réduisant la latence. En gérant efficacement les ressources GPU, PagedAttention facilite l’utilisation de modèles plus grands sans nécessiter de ressources matérielles importantes, ce qui en fait un choix pratique pour la mise à l’échelle des applications d’IA.
Parallélisme tensoriel et mise en cache
Outre PagedAttention, vLLM utilise un parallélisme tensoriel avancé pour répartir efficacement les charges de travail sur plusieurs GPU. Il intègre également des mécanismes de mise en cache efficaces afin de minimiser les calculs redondants, améliorant encore les performances du modèle pendant l’inférence. Ensemble, ces techniques garantissent que vLLM fournit une inférence rapide et rentable pour les modèles de transformeurs.
Applications
vLLM prend en charge le déploiement en temps réel de grands modèles de langage dans divers domaines :
Traitement du langage naturel (NLP)** :** tâches telles que le résumé de texte, l’analyse des sentiments et la reconnaissance d’entités nommées.
IA conversationnelle : systèmes de chatbots en temps réel et assistants virtuels.
Génération augmentée par récupération (RAG): Intégration de grands modèles avec des systèmes de récupération pour des tâches avancées de question-réponse et de récupération de connaissances.
Application RAG avec Milvus, vLLM et Qwen
Ce tutoriel montre comment implémenter un pipeline RAG en utilisant Milvus comme base de données vectorielle, Qwen comme modèle de langage, vLLM pour l’inférence optimisée et LangChain comme framework. Le code complet de ce tutoriel est disponible dans le notebook suivant.
Étape 1 : Configurer l’environnement
Pour utiliser efficacement vLLM, nous aurions besoin d’un GPU. Le notebook suivant a été exécuté dans Google Colab à l’aide d’un GPU A100. De plus, une clé API OpenAI est nécessaire pour générer les embeddings.
Étape 2 : Charger les données
Comme source pour notre base de connaissances, nous chargerons quelques blogs sur les modèles Qwen lors de leurs sorties et les diviserons en segments avec la méthode RecursiveCharacterTextSplitter de LangChain.
# 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)
Étape 3 : Créer le retriever Milvus
Ensuite, nous configurerons le retriever Milvus avec le contenu textuel et les métadonnées pour une récupération efficace, car les métadonnées ajoutent un contexte de soutien supplémentaire à la base de connaissances.
# 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})
Étape 4 : Initialiser le moteur LLM
Le moteur vLLM doit être initialisé efficacement pour charger le modèle spécifique, dans ce cas, "Qwen/Qwen2.5-1.5B”. Avec des configurations telles qu’une utilisation optimisée de la mémoire GPU (80 %) et bfloat16 pour un calcul efficace, nous évitons le manque de mémoire et garantissons un fonctionnement rapide et économe en ressources pour générer jusqu’à 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)
Étape 5 : Implémenter le pipeline RAG
Ensuite, nous construisons un pipeline RAG avec le modèle Qwen, le retriever Milvus et un modèle de prompt pour ingérer notre contexte et notre question. De plus, nous ajoutons une fonction d’affichage de la réponse pour visualiser non seulement la réponse, mais aussi le contexte source.
# 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"])
# Extraire les métadonnées du premier document source
source_doc = response["source_documents"][0].metadata
print("Source :", source_doc["source"])
print("Description :", source_doc["description"])
print("Titre :", source_doc["title"])
# Définir la question
question = "Que pouvez-vous me dire sur le modèle QwQ ?"
# Initialiser la requête
response = qa_chain.invoke({"query": question, "context": retriever})
Sortie :
Requête : Que pouvez-vous me dire sur le modèle QwQ ?
Résultat : Le modèle QwQ (Qwen with Questions) montre qu’il peut réfléchir, questionner et comprendre de manière profonde. Il est comme un étudiant qui s’interroge toujours et réfléchit attentivement avant de donner une réponse. Tout comme lorsqu’on apprend de nouvelles choses, il sait qu’il ne sait rien et continue à poser des questions pour en apprendre davantage. Il présente également certaines limites et doit apprendre davantage au fil du temps. Comme tout le monde, il ne cesse de grandir et de s’améliorer.
Source : https://qwenlm.github.io/blog/qwq-32b-preview/
Description : GITHUB HUGGING FACE MODELSCOPE DEMO DISCORD
Remarque : Voici la prononciation de QwQ : /kwju:/ , similaire au mot « quill ».
Que signifie penser, questionner, comprendre ? Ce sont les eaux profondes dans lesquelles QwQ (Qwen with Questions) s’aventure. Tel un éternel étudiant de la sagesse, il aborde chaque problème — qu’il s’agisse de mathématiques, de code ou de connaissances sur notre monde — avec un émerveillement et un doute authentiques. QwQ incarne cet ancien esprit philosophique : il sait qu’il ne sait rien, et c’est précisément ce qui nourrit sa curiosité.
Titre : QwQ : Réfléchir profondément aux limites de l’inconnu | Qwen
Nous pouvons également ajouter une deuxième question sur les autres modèles. Nous constatons que, dans les deux cas, les réponses sont détaillées et précises, ce qui montre les hautes performances de Milvus et de Qwen, avec vLLM, qui a fourni la réponse en moins de 1 s.
# Définir la question
question = "Que pouvez-vous me dire sur les modèles open source Qwen2.5 : Qwen2.5, Qwen2.5-Coder, Qwen2.5-Math ?"
# Initialiser la requête
response = qa_chain.invoke({"query": question, "context": retriever})
Sortie :
Requête : Que pouvez-vous me dire sur les modèles open source Qwen2.5 : Qwen2.5, Qwen2.5-Coder, Qwen2.5-Math ?
Résultat : Les modèles Qwen2.5, à savoir Qwen2.5, Qwen2.5-Coder et Qwen2.5-Math, ont bénéficié d’améliorations significatives dans divers aspects par rapport à leurs prédécesseurs. Voici quelques points clés :
1. **Performances académiques :**
- Qwen2.5 a obtenu les meilleures performances parmi les modèles open source sur plusieurs benchmarks populaires de génération de code (EvalPlus, LiveCodeBench, BigCodeBench).
- Qwen2.5 a également obtenu un score élevé sur une tâche d’évaluation instructive, indiquant un fort alignement avec des capacités de suivi d’instructions proches de celles des humains.
- Qwen2.5 a fourni des performances compétitives avec GPT-4o, démontrant sa supériorité par rapport à ses prédécesseurs.
2. **Applications pratiques :**
- Les modèles Qwen2.5 excellent dans la gestion de différents langages de programmation, montrant leur adaptabilité et leur polyvalence.
- Les modèles Qwen2.5 ont bénéficié d’améliorations significatives, étendant leurs compétences pour gérer des tâches de raisonnement plus complexes.
3. **Entraînement des modèles :**
- Qwen2.5, avec Qwen2.5-Coder et Qwen2.5-Math, ont été entraînés sur des jeux de données à grande échelle couvrant 18 billions de tokens. Cela inclut des données liées au code, permettant à des modèles de codage plus petits d’être compétitifs face à des modèles plus grands et plus complets.
4. **Prise en charge des modèles :**
- Tous les modèles Qwen2.5 sont capables de prendre en charge un large éventail de langages de programmation, offrant accessibilité et applicabilité aux utilisateurs.
5. **Capacités générales :**
- Les modèles Qwen2.5 démontrent désormais des performances améliorées dans les tâches de raisonnement et de génération, telles que la réparation de code et l’écriture de code.
6. **Modèles spécialisés :**
- Qwen2.5-Coder est axé sur les tâches de codage, offrant de meilleures performances en génération de code, en réparation et même en capacités de raisonnement.
- Qwen2.5-Math améliore le modèle fondamental Qwen2-Math, en étendant la prise en charge du chinois et en intégrant des méthodes de raisonnement sophistiquées, telles que Chain-of-Thought (CoT), Program-of-Thought (PoT) et Tool-Integrated Reasoning (TIR).
7. **Licences des modèles :**
- Tous les modèles open source sont sous licence Apache 2.0, garantissant la compatibilité et la facilité d’utilisation dans différents environnements de développement.
Ces améliorations contribuent collectivement au développement d’assistants de programmation intelligents puissants et polyvalents, dotés de capacités plus étendues et de performances améliorées.
Source : https://qwenlm.github.io/blog/qwen2.5/
Description : GITHUB HUGGING FACE MODELSCOPE DEMO DISCORD
Introduction Au cours des trois mois écoulés depuis la sortie de Qwen2, de nombreux développeurs ont créé de nouveaux modèles à partir des modèles de langage Qwen2, nous fournissant de précieux retours. Durant cette période, nous nous sommes concentrés sur la création de modèles de langage plus intelligents et plus riches en connaissances. Aujourd’hui, nous sommes ravis de présenter le dernier ajout à la famille Qwen : Qwen2.5. Nous annonçons ce qui pourrait être la plus grande publication open source de l’histoire !
Title : Qwen2.5 : Une fête de modèles fondamentaux ! | Qwen
Conclusion
Les innovations techniques présentées dans cette exploration — en particulier l’intégration de PagedAttention dans vLLM et la gestion efficace des vecteurs par Milvus — soulignent l’importance critique de l’infrastructure pour rendre les grands modèles de langage pratiques et accessibles. Ces technologies répondent aux principaux défis du déploiement de modèles, tels que l’optimisation de la mémoire, la vitesse d’inférence et la récupération évolutive des connaissances. En résolvant ces goulots d’étranglement techniques, les développeurs et les organisations peuvent désormais mettre en œuvre des systèmes sophistiqués de Retrieval-Augmented Generation (RAG) qui étaient auparavant complexes ou gourmands en ressources, ouvrant de nouvelles frontières dans les applications fondées sur l’IA dans des secteurs tels que la santé, l’éducation, le développement logiciel et la recherche scientifique.
Ressources connexes
Estimez rapidement le coût de construction de vos pipelines RAG avec ce calculateur gratuit
Construire des requêtes RAG avancées et multimodales avec Milvus et Friendli AI
Livrer des applications RAG 10x plus rapidement avec Zilliz et Vectorize
Techniques RAG avancées : faire le lien entre texte et visuels
Comment utiliser l’appel de fonctions avec Ollama, Llama3 et Milvus
Continuer à lire

3 Easiest Ways to Use Claude Code on Your Mobile Phone
Run Claude Code from your phone with Remote Control, Happy Coder, or SSH + Tailscale. Comparison table, setup steps, and tools for typing, memory, and parallel tasks.

Introducing Zilliz Cloud Global Cluster: Region-Level Resilience for Mission-Critical AI
Zilliz Cloud Global Cluster delivers multi-region resilience, automatic failover, and fast global AI search with built-in security and compliance.

Why Teams Are Migrating from Weaviate to Zilliz Cloud — and How to Do It Seamlessly
Explore how Milvus scales for large datasets and complex queries with advanced features, and discover how to migrate from Weaviate to Zilliz Cloud.



