Creare applicazioni RAG con Milvus, Qwen e vLLM
Introduzione
Nell'agosto 2023, Alibaba Group ha rilasciato una famiglia di modelli open-source all'avanguardia chiamata Qwen che combina fluidità multilingue, capacità avanzate di ragionamento ed elevata efficienza. Qwen introduce un'architettura scalabile basata su transformer ottimizzata per diverse applicazioni, tra cui comprensione del linguaggio naturale, capacità visive e audio, risoluzione di problemi matematici e generazione di codice. Questa serie di Large Language Models (LLM) solo decoder sblocca potenti possibilità per costruire sistemi di Retrieval Augmented Generation (RAG) e introduce capacità innovative nell'attuale ecosistema open-source competitivo.
Sebbene gli LLM possano essere eseguiti su CPU o tramite endpoint di inferenza dedicati, strumenti come vLLM offrono soluzioni specializzate per il deployment efficiente di modelli su larga scala. vLLM è una libreria open-source progettata per ottimizzare il processo di inferenza dei modelli basati su transformer, in particolare per modelli di dimensioni enormi come Qwen. Sfruttando tecniche all'avanguardia di ottimizzazione della memoria e parallelizzazione, vLLM migliora le prestazioni dei grandi modelli, rendendoli più accessibili e scalabili per ambienti di produzione. L'integrazione di Qwen con vLLM consente il deployment fluido ed efficiente di modelli complessi, il che facilita l'utilizzo degli LLM in applicazioni in tempo reale in vari settori.
In questo blog, esploreremo Qwen e vLLM e come la combinazione di entrambi con il database vettoriale Milvus possa essere utilizzata per costruire un solido sistema RAG. Queste tre tecnologie combinano i punti di forza degli approcci basati sul recupero e generativi, creando un sistema capace di gestire query complesse in tempo reale. Milvus migliora il sistema gestendo ed eseguendo query in modo efficiente su embedding su larga scala, mentre le capacità linguistiche avanzate di Qwen forniscono la base per le risposte. Con vLLM che ottimizza il deployment, questa integrazione offre una soluzione ad alte prestazioni per un'ampia gamma di applicazioni basate sull'IA.
Panoramica dei modelli della serie Qwen
Nel loro primo rapporto tecnico , Alibaba Group ha spiegato che il nome Qwen deriva da "Qianwen," che significa "migliaia di prompt" in cinese. I modelli Qwen sono stati addestrati utilizzando fino a 3 trilioni di token di testo e codice multilingue, incorporando tecniche avanzate di fine-tuning come Supervised Fine-Tuning (SFT) e Reinforcement Learning from Human Feedback (RLHF).
Figura 1- Lignaggio dei modelli della serie Qwen
Figura 1: Lignaggio dei modelli della serie Qwen (Fonte)
I modelli Qwen di base sono disponibili in quattro dimensioni, da 1,8 miliardi a 72 miliardi di parametri. I modelli hanno versioni specializzate per attività come matematica e coding. Dal loro rilascio iniziale, i modelli Qwen si sono evoluti, migliorando dimensione del modello, prestazioni, capacità linguistiche e lunghezza del contesto. Attualmente, i modelli Qwen sono categorizzati come segue:
Primi rilasci: Qwen 1.8B, 7B, 14B e 72B
Figura 2- Primi rilasci di Qwen .png
Figura 2: Primi rilasci di Qwen (Fonte)
Serie di modelli Qwen Vision
Il modello Qwen Vision è stato inizialmente rilasciato in due versioni: Qwen-VL e Qwen-VL-Chat. Questi modelli sono stati progettati per gestire attività basate sulla visione, come la lettura di documenti, il ragionamento matematico e la risposta a domande visive. Da allora sono stati aggiornati alle versioni Qwen-VL e Qwen2-VL, la più recente delle quali è la più avanzata, offrendo miglioramenti significativi delle prestazioni e superando modelli come Gemini di Google e GPT di OpenAI in vari benchmark di visione:
Qwen-VL: Qwen-VL-Plus e Qwen-VL-Max.
Qwen2-VL: Qwen2-VL-2B, Qwen2-VL-7B e Qwen2-VL-72B.
Figure 3- Qwen-VL Benchmark Comparison.png
Figura 3: Confronto benchmark Qwen-VL (Fonte)
Figure 4- Qwen2-VL Architecture.png
Figura 4: Architettura Qwen2-VL (Fonte)
Figure 5- Qwen2-VL-72B Benchmark Comparison.png
Figura 5: Confronto benchmark Qwen2-VL-72B (Fonte)
Serie Qwen Audio
Analogamente al modello di visione, la serie Qwen Audio è stata inizialmente rilasciata in due versioni: Qwen-Audio (un modello audio-linguistico multi-task) e Qwen-Audio-Chat (una versione perfezionata con istruzioni). Questi modelli sono stati progettati per gestire sia input audio sia testuali, generando output basati su testo. Con l’avvento della serie Qwen2, entrambi i modelli sono stati ulteriormente migliorati:
- Qwen2-Audio-7B e Qwen2-Audio-7B-Instruct: Questi modelli possono accettare sia input audio sia testuali e generare output testuali, migliorando le capacità multilingue per applicazioni come il riconoscimento vocale, la trascrizione e gli assistenti IA basati sulla voce
Figure 6- Qwen-Audio Architecture
Figura 6: Architettura Qwen-Audio (Fonte)
Figure 7- Qwen2-Audio Architecture
Figura 7: Architettura Qwen2-Audio (Fonte)
Serie Qwen 2.5
La serie Qwen 2.5 si basa sulle fondamenta dei modelli Qwen originali con due aggiornamenti significativi: Qwen 1.5 e Qwen 2. Queste serie introducono modelli specializzati progettati per estendere ulteriormente le capacità della famiglia Qwen, offrendo miglioramenti avanzati in vari domini come matematica, programmazione e comprensione generale del linguaggio. In particolare, il rilascio di Qwen 1.5 includeva anche una versione Mixture of Experts (MoE), aggiungendo versatilità e miglioramenti delle prestazioni alla suite di modelli. Questi sviluppi rendono la serie Qwen 2.5 altamente adattabile a compiti specializzati, pur mantenendo un’ampia applicabilità.
I modelli Qwen 2.5 sono disponibili in una gamma di dimensioni, tra cui 0.5B, 1.5B, 3B, 7B, 14B, 32B e 72B, offrendo flessibilità per diversi casi d’uso:
Qwen 2.5-Math: Questo modello è specificamente progettato per risolvere problemi matematici complessi. Fornisce soluzioni accurate in vari campi, dall’aritmetica di base al calcolo avanzato. La serie include modelli di diverse dimensioni: 1.5B, 7B e 32B, oltre a Qwen 2.5-Math-RM-72B, una versione specializzata ottimizzata con un modello di ricompensa matematica per una precisione ancora maggiore nei compiti matematici.
Qwen 2.5-Coder: Un modello ottimizzato per la generazione e il debugging del codice, Qwen 2.5-Coder è ideale per automatizzare attività di programmazione, inclusa la scrittura di script, il completamento del codice e le revisioni del codice. Il modello è disponibile nelle dimensioni 0.5B, 1.5B, 3B, 7B, 14B e 32B, offrendo flessibilità agli sviluppatori che lavorano su un’ampia gamma di applicazioni di codifica.
Figure 8- Qwen 2-5 Benchmark Comparison.png
Figura 8: Confronto dei benchmark di Qwen 2-5 (Fonte)
Figure 9- Qwen 2-5-Coder Benchmark Comparison
Figura 9: Confronto dei benchmark di Qwen 2-5-Coder (Fonte)
Figure 10- Qwen 2-5-Math Benchmark .png
Figura 10: Benchmark di Qwen 2-5-Math (Fonte)
Serie QwQ
La serie QwQ, attualmente un modello di ricerca sperimentale, rappresenta un audace balzo in avanti nel ragionamento AI avanzato. Il modello agisce come uno studente riflessivo, incarna la curiosità, mettendo in discussione le proprie riflessioni prima di offrire intuizioni. Focalizzata sulla risoluzione di problemi complessi in matematica, codifica e ragionamento, la release inaugurale, QwQ-32B-Preview, mostra prestazioni eccezionali in benchmark come GPQA, AIME e MATH-500.
Figure 11- QwQ Benchmark Comparison
Figura 11: Confronto dei benchmark di QwQ (Fonte)
vLLM: Ottimizzazione dell’inferenza dei modelli di grandi dimensioni
vLLM (Virtual Large Language Model) è una libreria open-source progettata per ottimizzare l’inferenza per i modelli linguistici di grandi dimensioni, affrontando le principali sfide nell’implementazione su larga scala di architetture basate su transformer. Attraverso tecniche innovative come PagedAttention, il parallelismo tensoriale e strategie di caching efficienti, vLLM ottiene riduzioni significative dell’overhead computazionale e dell’uso della memoria durante l’inferenza. Queste ottimizzazioni consentono l’implementazione di modelli più grandi e complessi con maggiore efficienza, riducendo i costi e lo sforzo necessari per eseguire sistemi AI all’avanguardia.
Figure 12- vLLM System Overview.png
Figura 12: Panoramica del sistema vLLM (Fonte)
Caratteristiche e innovazioni principali
PagedAttention
La caratteristica distintiva di vLLM, PagedAttention, rivoluziona la gestione della memoria GPU adottando principi della gestione della memoria dei sistemi operativi. Questo approccio consente l’allocazione dinamica e la paginazione della memoria durante l’inferenza, migliorando significativamente il throughput e riducendo la latenza. Gestendo in modo efficiente le risorse GPU, PagedAttention facilita l’uso di modelli più grandi senza richiedere ampie risorse hardware, rendendola una scelta pratica per scalare le applicazioni AI.
Parallelismo tensoriale e caching
Oltre a PagedAttention, vLLM utilizza un parallelismo tensoriale avanzato per distribuire efficacemente i carichi di lavoro su più GPU. Integra inoltre meccanismi di caching efficienti per minimizzare i calcoli ridondanti, migliorando ulteriormente le prestazioni del modello durante l’inferenza. Queste tecniche garantiscono complessivamente che vLLM offra inferenza ad alta velocità ed economicamente conveniente per i modelli transformer.
Applicazioni
vLLM supporta l’implementazione in tempo reale di modelli linguistici di grandi dimensioni in diversi domini:
Elaborazione del linguaggio naturale (NLP): Attività come il riassunto di testi, l’analisi del sentiment e il riconoscimento di entità denominate.
AI conversazionale: Sistemi chatbot in tempo reale e assistenti virtuali.
Generazione aumentata da recupero (RAG): Integrazione di modelli di grandi dimensioni con sistemi di recupero per attività avanzate di risposta a domande e recupero della conoscenza.
Applicazione RAG con Milvus, vLLM e Qwen
Questo tutorial dimostra come implementare una pipeline RAG utilizzando Milvus come database vettoriale, Qwen come modello linguistico, vLLM per inferenza ottimizzata e LangChain come framework. Il codice completo di questo tutorial si trova nel seguente notebook.
Passaggio 1: Configurare l’ambiente
Per utilizzare vLLM in modo efficiente, avremmo bisogno di una GPU. Il seguente notebook è stato eseguito in Google Colab utilizzando una GPU A100. Inoltre, è necessaria una chiave API OpenAI per generare gli embedding.
Passaggio 2: Caricare i dati
Come fonte per la nostra base di conoscenza caricheremo alcuni blog sui modelli Qwen pubblicati durante i loro rilasci e li suddivideremo in blocchi con il metodo RecursiveCharacterTextSplitter di 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)
Passaggio 3: Creare il retriever Milvus
Successivamente configureremo il retriever Milvus con il contenuto testuale e i metadati per un recupero efficiente, poiché i metadati aggiungono ulteriore contesto di supporto alla base di conoscenza.
# 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})
Passaggio 4: Inizializzare il motore LLM
Il motore vLLM deve essere inizializzato in modo efficiente per caricare il modello specifico, in questo caso, "Qwen/Qwen2.5-1.5B”. Con configurazioni quali l’uso ottimizzato della memoria GPU (80%) e bfloat16 per un calcolo efficiente, ci assicuriamo di evitare l’esaurimento della memoria e di ottenere un’operazione rapida e attenta alle risorse per generare fino a 500 token.
# Initialize vLLM
llm = VLLM(
model="Qwen/Qwen2.5-1.5B",
max_new_tokens=500,
enforce_eager=True,
dtype="bfloat16",
gpu_memory_utilization=0.8)
Passaggio 5: Implementare la pipeline RAG
Quindi, costruiamo una pipeline RAG con il modello Qwen, il retriever Milvus e un template di prompt per integrare il nostro contesto e la domanda. Inoltre aggiungiamo una funzione di visualizzazione della risposta per visualizzare non solo la risposta ma anche il contesto sorgente.
# 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"])
# Extract metadata from the first source document
source_doc = response["source_documents"][0].metadata
print("Source:", source_doc["source"])
print("Description:", source_doc["description"])
print("Title:", source_doc["title"])
# Set the question
question = "What can you tell me about QwQ model?"
# Initialize the query
response = qa_chain.invoke({"query": question, "context": retriever})
Output:
Query: Cosa puoi dirmi sul modello QwQ?
Risultato: Il modello QwQ (Qwen with Questions) mostra di poter pensare, porsi domande e comprendere in modo profondo. È come uno studente che si interroga sempre e riflette attentamente prima di dare una risposta. Proprio come quando si imparano cose nuove, sa di non sapere nulla e continua a fare domande per imparare di più. Ha anche alcune limitazioni e deve imparare di più man mano che procede. Proprio come tutti, è sempre in crescita e in miglioramento.
Source: https://qwenlm.github.io/blog/qwq-32b-preview/
Description: GITHUB HUGGING FACE MODELSCOPE DEMO DISCORD
Nota: Questa è la pronuncia di QwQ: /kwju:/ , simile alla parola “quill”.
Cosa significa pensare, porsi domande, comprendere? Queste sono le acque profonde in cui si addentra QwQ (Qwen with Questions). Come uno studente eterno della saggezza, affronta ogni problema - che si tratti di matematica, codice o conoscenza del nostro mondo - con autentica meraviglia e dubbio. QwQ incarna quell’antico spirito filosofico: sa di non sapere nulla, ed è proprio questo che alimenta la sua curiosità.
Title: QwQ: Rifletti profondamente sui confini dell’ignoto | Qwen
Possiamo aggiungere anche una seconda domanda sugli altri modelli. Vediamo che in entrambi i casi le risposte sono dettagliate e accurate, il che mostra un’elevata prestazione sia di Milvus sia di Qwen, insieme a vLLM, che ha fornito la risposta in meno di 1 s.
# Set the question
question = "What can you tell me about Qwen2.5 open-source models: Qwen2.5, Qwen2.5-Coder, Qwen2.5-Math?"
# Initialize the query
response = qa_chain.invoke({"query": question, "context": retriever})
Output:
Query: Cosa puoi dirmi sui modelli open-source Qwen2.5: Qwen2.5, Qwen2.5-Coder, Qwen2.5-Math?
Risultato: I modelli Qwen2.5, vale a dire Qwen2.5, Qwen2.5-Coder e Qwen2.5-Math, hanno ottenuto miglioramenti significativi in vari aspetti rispetto ai loro predecessori. Ecco alcuni punti chiave:
1. **Prestazioni accademiche:**
- Qwen2.5 ha raggiunto le migliori prestazioni tra i modelli open-source su diversi benchmark popolari di generazione di codice (EvalPlus, LiveCodeBench, BigCodeBench).
- Qwen2.5 ha ottenuto anche punteggi elevati in un compito di valutazione Instructive, indicando un forte allineamento con capacità di seguire istruzioni simili a quelle umane.
- Qwen2.5 ha fornito prestazioni competitive con GPT-4o, dimostrando superiorità rispetto ai suoi predecessori.
2. **Applicazioni pratiche:**
- I modelli Qwen2.5 eccellono nella gestione di diversi linguaggi di programmazione, mostrando la loro adattabilità e versatilità.
- I modelli Qwen2.5 hanno subito miglioramenti significativi, estendendo le loro competenze per gestire compiti di ragionamento più complessi.
3. **Addestramento del modello:**
- Qwen2.5, insieme a Qwen2.5-Coder e Qwen2.5-Math, è stato addestrato su dataset su larga scala che coprono 18 trilioni di token. Ciò include dati relativi al codice, consentendo ai modelli di coding più piccoli di competere con modelli più grandi e più completi.
4. **Supporto del modello:**
- Tutti i modelli Qwen2.5 sono in grado di supportare un’ampia gamma di linguaggi di programmazione, offrendo accessibilità e applicabilità agli utenti.
5. **Capacità generali:**
- I modelli Qwen2.5 ora dimostrano prestazioni migliorate nei compiti di ragionamento e generazione, come la riparazione del codice e la scrittura del codice.
6. **Modelli specializzati:**
- Qwen2.5-Coder è focalizzato sui compiti di coding, offrendo prestazioni migliori nella generazione di codice, nella correzione e persino nelle capacità di ragionamento.
- Qwen2.5-Math migliora il modello fondamentale Qwen2-Math, estendendo il supporto per il cinese e incorporando metodi di ragionamento sofisticati, come Chain-of-Thought (CoT), Program-of-Thought (PoT) e Tool-Integrated Reasoning (TIR).
7. **Licenze dei modelli:**
- Tutti i modelli open-source sono concessi in licenza Apache 2.0, garantendo compatibilità e facilità d’uso in diversi ambienti di sviluppo.
Questi miglioramenti contribuiscono collettivamente allo sviluppo di assistenti di programmazione intelligenti potenti e versatili, con capacità più ampie e prestazioni migliorate.
Fonte: https://qwenlm.github.io/blog/qwen2.5/
Descrizione: GITHUB HUGGING FACE MODELSCOPE DEMO DISCORD
Introduzione Nei tre mesi trascorsi dal rilascio di Qwen2, numerosi sviluppatori hanno creato nuovi modelli sui modelli linguistici Qwen2, fornendoci feedback preziosi. Durante questo periodo, ci siamo concentrati sulla creazione di modelli linguistici più intelligenti e più ricchi di conoscenza. Oggi siamo entusiasti di presentare l’ultima aggiunta alla famiglia Qwen: Qwen2.5. Stiamo annunciando quella che potrebbe essere la più grande release opensource della storia!
Titolo: Qwen2.5: Una festa di modelli di fondazione! | Qwen
Conclusione
Le innovazioni tecniche presentate in questa esplorazione—in particolare l’integrazione di PagedAttention in vLLM e l’efficiente gestione vettoriale di Milvus—evidenziano l’importanza critica dell’infrastruttura nel rendere i grandi modelli linguistici pratici e accessibili. Queste tecnologie affrontano sfide chiave nella distribuzione dei modelli, come l’ottimizzazione della memoria, la velocità di inferenza e il recupero scalabile della conoscenza. Risolvendo questi colli di bottiglia tecnici, sviluppatori e organizzazioni possono ora implementare sistemi sofisticati di Retrieval-Augmented Generation (RAG) che in precedenza erano complessi o richiedevano molte risorse, aprendo nuove frontiere nelle applicazioni basate sull’AI in settori come sanità, istruzione, sviluppo software e ricerca scientifica.
Risorse correlate
Continua a leggere

Build Multimodal Search for 3D Assets with Tripo and Zilliz Cloud
Generate 3D assets with Tripo, then search them by text, image, and metadata with multimodal embeddings and Zilliz Cloud.

How Zilliz Saw the Future of Vector Databases—and Built for Production
An inside look at how Zilliz built vector databases for real-world use, focusing on scalability, stability, and running them reliably at scale.

Why I’m Against Claude Code’s Grep-Only Retrieval? It Just Burns Too Many Tokens
Learn how vector-based code retrieval cuts Claude Code token consumption by 40%. Open-source solution with easy MCP integration. Try claude-context today.



