Creación de aplicaciones RAG con Milvus, Qwen y vLLM
Introducción
En agosto de 2023, Alibaba Group lanzó una familia de modelos de código abierto de última generación llamada Qwen que combina fluidez multilingüe, capacidades avanzadas de razonamiento y alta eficiencia. Qwen presenta una arquitectura basada en transformadores escalable optimizada para diversas aplicaciones, incluida la comprensión del lenguaje natural, capacidades de visión y audio, resolución de problemas matemáticos y generación de código. Esta serie de Modelos de Lenguaje Grandes solo decodificadores (LLMs) desbloquea poderosas posibilidades para crear sistemas de Generación Aumentada por Recuperación (RAG) e introduce capacidades innovadoras en el ecosistema competitivo actual de código abierto.
Si bien los LLMs pueden ejecutarse en CPUs o a través de endpoints de inferencia dedicados, herramientas como vLLM ofrecen soluciones especializadas para el despliegue eficiente de modelos a gran escala. vLLM es una biblioteca de código abierto diseñada para optimizar el proceso de inferencia de modelos basados en transformadores, particularmente para tamaños de modelo masivos como Qwen. Al aprovechar técnicas de vanguardia de optimización de memoria y paralelización, vLLM mejora el rendimiento de los modelos grandes, haciéndolos más accesibles y escalables para entornos de producción. Integrar Qwen con vLLM permite un despliegue fluido y eficiente de modelos complejos, lo que facilita el uso de LLMs en aplicaciones en tiempo real en diversas industrias.
En este blog, exploraremos Qwen y vLLM y cómo combinarlos con la base de datos vectorial Milvus puede utilizarse para crear un sistema RAG robusto. Estas tres tecnologías combinan las fortalezas de los enfoques basados en recuperación y generativos, creando un sistema capaz de abordar consultas complejas en tiempo real. Milvus mejora el sistema al gestionar y consultar eficientemente embeddings a gran escala, mientras que las capacidades lingüísticas avanzadas de Qwen proporcionan la base para las respuestas. Con vLLM optimizando el despliegue, esta integración ofrece una solución de alto rendimiento para una amplia gama de aplicaciones impulsadas por IA.
Descripción general de los modelos de la serie Qwen
En su primer informe técnico , Alibaba Group explicó que el nombre Qwen deriva de "Qianwen," que significa "miles de prompts" en chino. Los modelos Qwen fueron entrenados utilizando hasta 3 billones de tokens de texto y código multilingües, incorporando técnicas avanzadas de fine-tuning como Supervised Fine-Tuning (SFT) y Reinforcement Learning from Human Feedback (RLHF).
Figura 1- Linaje de modelos de la serie Qwen
Figura 1: Linaje de modelos de la serie Qwen (Fuente)
Los modelos base Qwen vienen en cuatro tamaños, que van desde 1,8 mil millones hasta 72 mil millones de parámetros. Los modelos tienen versiones especializadas para tareas como matemáticas y programación. Desde su lanzamiento inicial, los modelos Qwen han evolucionado, mejorando el tamaño del modelo, el rendimiento, las capacidades lingüísticas y la longitud de contexto. Actualmente, los modelos Qwen se categorizan de la siguiente manera:
Primeros lanzamientos: Qwen 1.8B, 7B, 14B y 72B
Figura 2- Primeros lanzamientos de Qwen .png
Figura 2: Primeros lanzamientos de Qwen (Fuente)
Serie de modelos de visión Qwen
El modelo de visión Qwen se lanzó inicialmente con dos versiones: Qwen-VL y Qwen-VL-Chat. Estos modelos fueron diseñados para abordar tareas basadas en visión, como la lectura de documentos, el razonamiento matemático y la respuesta visual a preguntas. Desde entonces, se han actualizado a las versiones Qwen-VL y Qwen2-VL, siendo la más reciente la más avanzada, que ofrece mejoras significativas de rendimiento y supera a modelos como Gemini de Google y GPT de OpenAI en varios benchmarks de visión:
Qwen-VL: Qwen-VL-Plus y Qwen-VL-Max.
Qwen2-VL: Qwen2-VL-2B, Qwen2-VL-7B y Qwen2-VL-72B.
Figura 3- Comparación de benchmarks de Qwen-VL.png
Figura 3: Comparación de benchmarks de Qwen-VL (Fuente)
Figura 4- Arquitectura de Qwen2-VL.png
Figura 4: Arquitectura de Qwen2-VL (Fuente)
Figura 5- Comparación de benchmarks de Qwen2-VL-72B.png
Figura 5: Comparación de benchmarks de Qwen2-VL-72B (Fuente)
Serie Qwen Audio
De forma similar al modelo de visión, la serie Qwen Audio se lanzó inicialmente con dos versiones: Qwen-Audio (un modelo de audio-lenguaje multitarea) y Qwen-Audio-Chat (una versión ajustada finamente con instrucciones). Estos modelos fueron diseñados para manejar entradas tanto de audio como de texto, generando salidas basadas en texto. Con la llegada de la serie Qwen2, ambos modelos se han mejorado aún más:
- Qwen2-Audio-7B y Qwen2-Audio-7B-Instruct: Estos modelos pueden aceptar entradas tanto de audio como de texto y generar salidas de texto, mejorando las capacidades multilingües para aplicaciones como el reconocimiento de voz, la transcripción y los asistentes de IA basados en voz
Figura 6- Arquitectura de Qwen-Audio
Figura 6: Arquitectura de Qwen-Audio (Fuente)
Figura 7- Arquitectura de Qwen2-Audio
Figura 7: Arquitectura de Qwen2-Audio (Fuente)
Serie Qwen 2.5
La serie Qwen 2.5 se basa en los fundamentos de los modelos Qwen originales con dos actualizaciones significativas: Qwen 1.5 y Qwen 2. Estas series introducen modelos especializados diseñados para ampliar aún más las capacidades de la familia Qwen, ofreciendo mejoras avanzadas en diversos dominios como matemáticas, codificación y comprensión general del lenguaje. Cabe destacar que el lanzamiento de Qwen 1.5 también incluyó una versión Mixture of Experts (MoE), añadiendo versatilidad y mejoras de rendimiento al conjunto de modelos. Estos desarrollos hacen que la serie Qwen 2.5 sea altamente adaptable para tareas especializadas, manteniendo al mismo tiempo una amplia aplicabilidad.
Los modelos Qwen 2.5 están disponibles en una variedad de tamaños, incluidos 0.5B, 1.5B, 3B, 7B, 14B, 32B y 72B, ofreciendo flexibilidad para diferentes casos de uso:
Qwen 2.5-Math: Este modelo está diseñado específicamente para resolver problemas matemáticos complejos. Ofrece soluciones precisas en diversos campos, desde aritmética básica hasta cálculo avanzado. La serie incluye modelos de diferentes tamaños: 1.5B, 7B y 32B, así como Qwen 2.5-Math-RM-72B, una versión especializada optimizada con un modelo de recompensa matemática para lograr una precisión aún mayor en tareas matemáticas.
Qwen 2.5-Coder: Un modelo ajustado para la generación y depuración de código, Qwen 2.5-Coder es ideal para automatizar tareas de programación, incluida la escritura de scripts, la finalización de código y las revisiones de código. El modelo está disponible en tamaños 0.5B, 1.5B, 3B, 7B, 14B y 32B, lo que proporciona flexibilidad a los desarrolladores que trabajan en una amplia gama de aplicaciones de codificación.
Figure 8- Qwen 2-5 Benchmark Comparison.png
Figura 8: Comparación de benchmarks de Qwen 2-5 (Fuente)
Figure 9- Qwen 2-5-Coder Benchmark Comparison
Figura 9: Comparación de benchmarks de Qwen 2-5-Coder (Fuente)
Figure 10- Qwen 2-5-Math Benchmark .png
Figura 10: Benchmark de Qwen 2-5-Math (Fuente)
Serie QwQ
La serie QwQ, actualmente un modelo de investigación experimental, representa un salto audaz hacia el razonamiento avanzado de IA. El modelo actúa como un estudiante reflexivo, encarna la curiosidad y cuestiona sus propias reflexiones antes de ofrecer perspectivas. Centrado en resolver problemas complejos de matemáticas, codificación y razonamiento, el lanzamiento inaugural, QwQ-32B-Preview, muestra un rendimiento excepcional en benchmarks como GPQA, AIME y MATH-500.
Figure 11- QwQ Benchmark Comparison
Figura 11: Comparación de benchmarks de QwQ (Fuente)
vLLM: Optimización de la inferencia de modelos grandes
vLLM (Virtual Large Language Model) es una biblioteca de código abierto diseñada para optimizar la inferencia de grandes modelos de lenguaje, abordando los desafíos clave en la implementación de arquitecturas basadas en transformadores a escala. Mediante técnicas innovadoras como PagedAttention, el paralelismo de tensores y estrategias de almacenamiento en caché eficientes, vLLM logra reducciones significativas en la sobrecarga computacional y el uso de memoria durante la inferencia. Estas optimizaciones permiten la implementación de modelos más grandes y complejos con mayor eficiencia, reduciendo el costo y el esfuerzo necesarios para ejecutar sistemas de IA de última generación.
Figure 12- vLLM System Overview.png
Figura 12: Descripción general del sistema vLLM (Fuente)
Características e innovaciones clave
PagedAttention
La característica destacada de vLLM, PagedAttention, revoluciona la gestión de memoria de GPU al adoptar principios de la gestión de memoria de los sistemas operativos. Este enfoque permite la asignación dinámica y la paginación de memoria durante la inferencia, lo que mejora significativamente el rendimiento y reduce la latencia. Al gestionar eficientemente los recursos de GPU, PagedAttention facilita el uso de modelos más grandes sin requerir amplios recursos de hardware, lo que lo convierte en una opción práctica para escalar aplicaciones de IA.
Paralelismo de tensores y almacenamiento en caché
Además de PagedAttention, vLLM emplea paralelismo de tensores avanzado para distribuir las cargas de trabajo de manera efectiva entre múltiples GPU. También incorpora mecanismos de almacenamiento en caché eficientes para minimizar los cálculos redundantes, lo que mejora aún más el rendimiento del modelo durante la inferencia. En conjunto, estas técnicas garantizan que vLLM ofrezca inferencia de alta velocidad y rentable para modelos transformadores.
Aplicaciones
vLLM admite la implementación en tiempo real de grandes modelos de lenguaje en diversos dominios:
Procesamiento del lenguaje natural (NLP): Tareas como resumen de texto, análisis de sentimientos y reconocimiento de entidades nombradas.
IA conversacional: Sistemas de chatbot en tiempo real y asistentes virtuales.
Generación aumentada por recuperación (RAG): Integración de modelos grandes con sistemas de recuperación para tareas avanzadas de respuesta a preguntas y recuperación de conocimiento.
Aplicación RAG con Milvus, vLLM y Qwen
Este tutorial demuestra cómo implementar un pipeline de RAG usando Milvus como base de datos vectorial, Qwen como modelo de lenguaje, vLLM para inferencia optimizada y LangChain como framework. El código completo de este tutorial se puede encontrar en el siguiente notebook.
Paso 1: Configurar el entorno
Para usar vLLM de manera eficiente, necesitaríamos una GPU. El siguiente notebook se ejecutó en Google Colab usando una GPU A100. Además, se requiere una clave de API de OpenAI para generar los embeddings.
Paso 2: Cargar los datos
Como fuente para nuestra base de conocimiento, cargaremos algunos blogs sobre los modelos Qwen durante sus lanzamientos y los dividiremos en fragmentos con el método 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)
Paso 3: Crear el recuperador de Milvus
A continuación, configuraremos el recuperador de Milvus con el contenido de texto y los metadatos para una recuperación eficiente, ya que los metadatos añaden contexto de apoyo adicional a la base de conocimiento.
# 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})
Paso 4: Inicializar el motor LLM
El motor vLLM debe inicializarse de manera eficiente para cargar el modelo específico, en este caso, "Qwen/Qwen2.5-1.5B”. Con configuraciones como el uso optimizado de memoria de GPU (80%) y bfloat16 para un cálculo eficiente, garantizamos no quedarnos sin memoria, y una operación rápida y consciente de los recursos para generar hasta 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)
Paso 5: Implementar el pipeline RAG
Luego, construimos un pipeline RAG con el modelo Qwen, el recuperador de Milvus y una plantilla de prompt para ingerir nuestro contexto y pregunta. Además, añadimos una función de visualización de respuesta para visualizar no solo la respuesta, sino también el contexto de origen.
# 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})
Salida:
Consulta: ¿Qué puedes decirme sobre el modelo QwQ?
Resultado: El modelo QwQ (Qwen con preguntas) muestra que puede pensar, cuestionar y comprender de una manera profunda. Es como un estudiante que siempre se pregunta cosas y piensa cuidadosamente antes de dar una respuesta. Al igual que al aprender cosas nuevas, sabe que no sabe nada y sigue haciendo preguntas para aprender más. También tiene algunas limitaciones y necesita aprender más a medida que avanza. Como todo el mundo, siempre está creciendo y mejorando.
Fuente: https://qwenlm.github.io/blog/qwq-32b-preview/
Descripción: GITHUB HUGGING FACE MODELSCOPE DEMO DISCORD
Nota: Esta es la pronunciación de QwQ: /kwju:/ , similar a la palabra “quill”.
¿Qué significa pensar, cuestionar, comprender? Estas son las aguas profundas en las que se adentra QwQ (Qwen con preguntas). Como un eterno estudiante de la sabiduría, aborda cada problema —ya sea matemáticas, código o conocimiento de nuestro mundo— con auténtico asombro y duda. QwQ encarna ese antiguo espíritu filosófico: sabe que no sabe nada, y eso es precisamente lo que impulsa su curiosidad.
Título: QwQ: Reflexiona profundamente sobre los límites de lo desconocido | Qwen
También podemos añadir una segunda pregunta sobre los otros modelos. Vemos que en ambos casos las respuestas son detalladas y precisas, lo que demuestra un alto rendimiento tanto de Milvus como de Qwen, junto con vLLM, que proporcionó la respuesta en menos de 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})
Salida:
Consulta: ¿Qué puedes decirme sobre los modelos de código abierto Qwen2.5: Qwen2.5, Qwen2.5-Coder, Qwen2.5-Math?
Resultado: Los modelos Qwen2.5, concretamente Qwen2.5, Qwen2.5-Coder y Qwen2.5-Math, han adquirido mejoras significativas en varios aspectos en comparación con sus predecesores. Estos son algunos puntos clave:
1. **Rendimiento académico:**
- Qwen2.5 logró el mejor rendimiento entre los modelos de código abierto en múltiples benchmarks populares de generación de código (EvalPlus, LiveCodeBench, BigCodeBench).
- Qwen2.5 también obtuvo una puntuación alta en una tarea de evaluación instructiva, lo que indica una sólida alineación con capacidades de seguimiento de instrucciones similares a las humanas.
- Qwen2.5 ofreció un rendimiento competitivo con GPT-4o, demostrando superioridad sobre sus predecesores.
2. **Aplicaciones prácticas:**
- Los modelos Qwen2.5 sobresalen en el manejo de diferentes lenguajes de programación, mostrando su adaptabilidad y versatilidad.
- Los modelos Qwen2.5 han experimentado mejoras significativas, ampliando sus habilidades para abordar tareas de razonamiento más complejas.
3. **Entrenamiento del modelo:**
- Qwen2.5, junto con Qwen2.5-Coder y Qwen2.5-Math, han sido entrenados con conjuntos de datos a gran escala que cubren 18 billones de tokens. Esto incluye datos relacionados con código, lo que permite que los modelos de codificación más pequeños rindan de forma competitiva frente a otros más grandes y completos.
4. **Soporte del modelo:**
- Todos los modelos Qwen2.5 son capaces de admitir una amplia gama de lenguajes de programación, proporcionando accesibilidad y aplicabilidad para los usuarios.
5. **Capacidades generales:**
- Los modelos Qwen2.5 ahora demuestran un rendimiento mejorado en tareas de razonamiento y generación, como la reparación de código y la escritura de código.
6. **Modelos especializados:**
- Qwen2.5-Coder se centra en tareas de programación, ofreciendo un mejor rendimiento en la generación de código, la reparación e incluso las capacidades de razonamiento.
- Qwen2.5-Math mejora el modelo fundacional Qwen2-Math, ampliando el soporte para chino e incorporando métodos de razonamiento sofisticados, como Chain-of-Thought (CoT), Program-of-Thought (PoT) y Tool-Integrated Reasoning (TIR).
7. **Licenciamiento de modelos:**
- Todos los modelos de código abierto tienen licencia Apache 2.0, lo que garantiza compatibilidad y facilidad de uso en diferentes entornos de desarrollo.
Estas mejoras contribuyen colectivamente al desarrollo de asistentes de programación inteligentes potentes y versátiles con capacidades más amplias y un rendimiento mejorado.
Fuente: https://qwenlm.github.io/blog/qwen2.5/
Descripción: GITHUB HUGGING FACE MODELSCOPE DEMO DISCORD
Introducción En los últimos tres meses desde el lanzamiento de Qwen2, numerosos desarrolladores han creado nuevos modelos sobre los modelos de lenguaje Qwen2, proporcionándonos comentarios valiosos. Durante este período, nos hemos centrado en crear modelos de lenguaje más inteligentes y con más conocimiento. Hoy, nos emociona presentar la última incorporación a la familia Qwen: Qwen2.5. ¡Estamos anunciando lo que podría ser el mayor lanzamiento de código abierto de la historia!
Título: Qwen2.5: ¡Una fiesta de modelos fundacionales! | Qwen
Conclusión
Las innovaciones técnicas mostradas en esta exploración—particularmente la integración de PagedAttention en vLLM y la eficiente gestión de vectores de Milvus—destacan la importancia crítica de la infraestructura para hacer que los grandes modelos de lenguaje sean prácticos y accesibles. Estas tecnologías abordan desafíos clave en el despliegue de modelos, como la optimización de memoria, la velocidad de inferencia y la recuperación de conocimiento escalable. Al resolver estos cuellos de botella técnicos, los desarrolladores y las organizaciones ahora pueden implementar sistemas sofisticados de Retrieval-Augmented Generation (RAG) que antes eran complejos o intensivos en recursos, abriendo nuevas fronteras en aplicaciones impulsadas por IA en sectores como la salud, la educación, el desarrollo de software y la investigación científica.
Recursos relacionados
Sigue leyendo

How to Choose the Best Embedding Model for RAG in 2026: 10 Models Benchmarked
We benchmarked 10 embedding models on cross-modal, cross-lingual, long-document, and dimension compression tasks. See which one fits your RAG pipeline.

Zilliz Cloud Update: Tiered Storage, Business Critical Plan, Cross-Region Backup, and Pricing Changes
This release offers a rebuilt tiered storage with lower costs, a new Business Critical plan for enhanced security, and pricing updates, among other features.

Smarter Autoscaling in Zilliz Cloud: Always Optimized for Every Workload
With the latest upgrade, Zilliz Cloud introduces smarter autoscaling—a fully automated, more streamlined, elastic resource management system.



