Criando aplicações RAG com Milvus, Qwen e vLLM
Introdução
Em agosto de 2023, o Alibaba Group lançou uma família de modelos de código aberto de última geração chamada Qwen, que combina fluência multilíngue, capacidades avançadas de raciocínio e alta eficiência. O Qwen introduz uma arquitetura baseada em transformer escalável, otimizada para diversas aplicações, incluindo compreensão de linguagem natural, capacidades de visão e áudio, resolução de problemas matemáticos e geração de código. Esta série de Large Language Models (LLMs) somente decodificadores abre possibilidades poderosas para a criação de sistemas de Retrieval Augmented Generation (RAG) e introduz capacidades inovadoras no atual ecossistema competitivo de código aberto.
Embora LLMs possam ser executados em CPUs ou por meio de endpoints de inferência dedicados, ferramentas como vLLM oferecem soluções especializadas para a implantação eficiente de modelos em larga escala. vLLM é uma biblioteca de código aberto projetada para otimizar o processo de inferência de modelos baseados em transformer, especialmente para tamanhos de modelos massivos como o Qwen. Ao aproveitar técnicas de otimização de memória e paralelização de última geração, o vLLM melhora o desempenho de modelos grandes, tornando-os mais acessíveis e escaláveis para ambientes de produção. Integrar o Qwen ao vLLM permite a implantação contínua e eficiente de modelos complexos, o que facilita a utilização de LLMs em aplicações em tempo real em vários setores.
Neste blog, exploraremos o Qwen e o vLLM e como a combinação de ambos com o banco de dados vetorial Milvus pode ser usada para criar um sistema RAG robusto. Essas três tecnologias combinam os pontos fortes das abordagens baseadas em recuperação e generativas, criando um sistema capaz de lidar com consultas complexas em tempo real. O Milvus aprimora o sistema ao gerenciar e consultar com eficiência embeddings em larga escala, enquanto as capacidades avançadas de linguagem do Qwen fornecem a base para as respostas. Com o vLLM otimizando a implantação, essa integração oferece uma solução de alto desempenho para uma ampla gama de aplicações impulsionadas por IA.
Visão geral dos modelos da série Qwen
Em seu primeiro relatório técnico , o Alibaba Group explicou que o nome Qwen é derivado de "Qianwen," que significa "milhares de prompts" em chinês. Os modelos Qwen foram treinados usando até 3 trilhões de tokens de texto e código multilíngues, incorporando técnicas avançadas de fine-tuning, como Supervised Fine-Tuning (SFT) e Reinforcement Learning from Human Feedback (RLHF).
Figura 1- Linhagem de modelos da série Qwen
Figura 1: Linhagem de modelos da série Qwen (Fonte)
Os modelos Qwen base vêm em quatro tamanhos, variando de 1,8 bilhão a 72 bilhões de parâmetros. Os modelos têm versões especializadas para tarefas como matemática e programação. Desde seu lançamento inicial, os modelos Qwen evoluíram, melhorando o tamanho do modelo, o desempenho, as capacidades linguísticas e o comprimento de contexto. Atualmente, os modelos Qwen são categorizados da seguinte forma:
Primeiros lançamentos: Qwen 1.8B, 7B, 14B e 72B
Figura 2- Primeiros lançamentos do Qwen .png
Figura 2: Primeiros lançamentos do Qwen (Fonte)
Série de modelos Qwen Vision
O Modelo de Visão Qwen foi lançado inicialmente com duas versões: Qwen-VL e Qwen-VL-Chat. Esses modelos foram projetados para lidar com tarefas baseadas em visão, como leitura de documentos, raciocínio matemático e resposta a perguntas visuais. Desde então, eles foram atualizados para as versões Qwen-VL e Qwen2-VL, sendo a mais recente a mais avançada, que oferece melhorias significativas de desempenho, superando modelos como o Gemini do Google e o GPT da OpenAI em vários benchmarks de visão:
Qwen-VL: Qwen-VL-Plus e Qwen-VL-Max.
Qwen2-VL: Qwen2-VL-2B, Qwen2-VL-7B e Qwen2-VL-72B.
Figura 3- Comparação de Benchmark do Qwen-VL.png
Figura 3: Comparação de Benchmark do Qwen-VL (Fonte)
Figura 4- Arquitetura do Qwen2-VL.png
Figura 4: Arquitetura do Qwen2-VL (Fonte)
Figura 5- Comparação de Benchmark do Qwen2-VL-72B.png
Figura 5: Comparação de Benchmark do Qwen2-VL-72B (Fonte)
Série Qwen Audio
Semelhante ao modelo de visão, a série Qwen Audio foi lançada inicialmente com duas versões: Qwen-Audio (um modelo de áudio-linguagem multitarefa) e Qwen-Audio-Chat (uma versão ajustada com instruções). Esses modelos foram projetados para lidar com entradas de áudio e texto, gerando saídas baseadas em texto. Com o advento da série Qwen2, ambos os modelos foram ainda mais aprimorados:
- Qwen2-Audio-7B e Qwen2-Audio-7B-Instruct: Esses modelos podem aceitar entradas de áudio e texto e gerar saídas de texto, melhorando as capacidades multilíngues para aplicações como reconhecimento de fala, transcrição e assistentes de IA baseados em voz
Figura 6- Arquitetura do Qwen-Audio
Figura 6: Arquitetura do Qwen-Audio (Fonte)
Figura 7- Arquitetura do Qwen2-Audio
Figura 7: Arquitetura do Qwen2-Audio (Fonte)
Série Qwen 2.5
A série Qwen 2.5 se baseia nos fundamentos dos modelos Qwen originais com duas atualizações significativas: Qwen 1.5 e Qwen 2. Essas séries introduzem modelos especializados projetados para ampliar ainda mais as capacidades da família Qwen, oferecendo melhorias avançadas em vários domínios, como matemática, programação e compreensão geral da linguagem. Notavelmente, o lançamento do Qwen 1.5 também incluiu uma versão Mistura de Especialistas (MoE), adicionando versatilidade e melhorias de desempenho ao conjunto de modelos. Esses desenvolvimentos tornam a série Qwen 2.5 altamente adaptável para tarefas especializadas, mantendo ampla aplicabilidade.
Os modelos Qwen 2.5 estão disponíveis em uma variedade de tamanhos, incluindo 0.5B, 1.5B, 3B, 7B, 14B, 32B e 72B, oferecendo flexibilidade para diferentes casos de uso:
Qwen 2.5-Math: Este modelo é especificamente projetado para resolver problemas matemáticos complexos. Ele fornece soluções precisas em vários campos, desde aritmética básica até cálculo avançado. A série inclui modelos de diferentes tamanhos: 1.5B, 7B e 32B, bem como o Qwen 2.5-Math-RM-72B, uma versão especializada otimizada com um modelo de recompensa matemática para ainda maior precisão em tarefas matemáticas.
Qwen 2.5-Coder: Um modelo ajustado para geração e depuração de código, o Qwen 2.5-Coder é ideal para automatizar tarefas de programação, incluindo escrita de scripts, conclusão de código e revisões de código. O modelo está disponível nos tamanhos 0.5B, 1.5B, 3B, 7B, 14B e 32B, oferecendo flexibilidade para desenvolvedores que trabalham em uma ampla variedade de aplicações de codificação.
Figura 8- Comparação de Benchmark Qwen 2-5.png
Figura 8: Comparação de Benchmark Qwen 2-5 (Fonte)
Figura 9- Comparação de Benchmark Qwen 2-5-Coder
Figura 9: Comparação de Benchmark Qwen 2-5-Coder (Fonte)
Figura 10- Benchmark Qwen 2-5-Math .png
Figura 10: Benchmark Qwen 2-5-Math (Fonte)
Série QwQ
A série QwQ, atualmente um modelo de pesquisa experimental, representa um salto ousado no raciocínio avançado de IA. O modelo age como um estudante reflexivo, incorpora curiosidade, questionando suas próprias reflexões antes de oferecer insights. Focada em resolver problemas complexos em matemática, codificação e raciocínio, a versão inaugural, QwQ-32B-Preview, apresenta desempenho excepcional em benchmarks como GPQA, AIME e MATH-500.
Figura 11- Comparação de Benchmark QwQ
Figura 11: Comparação de Benchmark QwQ (Fonte)
vLLM: Otimizando a Inferência de Grandes Modelos
vLLM (Virtual Large Language Model) é uma biblioteca de código aberto projetada para otimizar a inferência de grandes modelos de linguagem, abordando desafios-chave na implantação de arquiteturas baseadas em transformers em escala. Por meio de técnicas inovadoras como PagedAttention, paralelismo de tensores e estratégias eficientes de cache, o vLLM alcança reduções significativas na sobrecarga computacional e no uso de memória durante a inferência. Essas otimizações permitem a implantação de modelos maiores e mais complexos com eficiência aprimorada, reduzindo o custo e o esforço necessários para executar sistemas de IA de última geração.
Figura 12- Visão Geral do Sistema vLLM.png
Figura 12: Visão Geral do Sistema vLLM (Fonte)
Principais Recursos e Inovações
PagedAttention
O recurso de destaque do vLLM, PagedAttention, revoluciona o gerenciamento de memória da GPU ao adotar princípios do gerenciamento de memória de sistemas operacionais. Essa abordagem permite alocação dinâmica e paginação de memória durante a inferência, melhorando significativamente a taxa de transferência e reduzindo a latência. Ao gerenciar eficientemente os recursos da GPU, o PagedAttention facilita o uso de modelos maiores sem exigir recursos extensivos de hardware, tornando-o uma escolha prática para escalar aplicações de IA.
Paralelismo de Tensores e Cache
Além do PagedAttention, o vLLM emprega paralelismo avançado de tensores para distribuir cargas de trabalho de forma eficaz entre várias GPUs. Ele também incorpora mecanismos eficientes de cache para minimizar cálculos redundantes, aprimorando ainda mais o desempenho do modelo durante a inferência. Essas técnicas, em conjunto, garantem que o vLLM ofereça inferência de alta velocidade e econômica para modelos transformer.
Aplicações
O vLLM oferece suporte à implantação em tempo real de grandes modelos de linguagem em diversos domínios:
Processamento de Linguagem Natural (NLP): Tarefas como sumarização de texto, análise de sentimento e reconhecimento de entidades nomeadas.
IA Conversacional: Sistemas de chatbot em tempo real e assistentes virtuais.
Geração Aumentada por Recuperação (RAG): Integração de modelos grandes com sistemas de recuperação para tarefas avançadas de perguntas e respostas e recuperação de conhecimento.
Aplicação RAG com Milvus, vLLM e Qwen
Este tutorial demonstra como implementar um pipeline RAG usando Milvus como um banco de dados vetorial, Qwen como o modelo de linguagem, vLLM para inferência otimizada e LangChain como o framework. O código completo deste tutorial pode ser encontrado no seguinte notebook.
Etapa 1: Configurar o Ambiente
Para usar o vLLM de forma eficiente, precisaríamos de uma GPU. O notebook a seguir foi executado no Google Colab usando uma GPU A100. Além disso, uma chave de API da OpenAI é necessária para gerar os embeddings.
Etapa 2: Carregar os Dados
Como fonte para nossa base de conhecimento, carregaremos alguns blogs sobre modelos Qwen durante seus lançamentos e os dividiremos em partes com o método RecursiveCharacterTextSplitter do 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)
Etapa 3: Criar o Recuperador Milvus
Em seguida, configuraremos o recuperador Milvus com o conteúdo de texto e metadados para uma recuperação eficiente, pois os metadados adicionam contexto de suporte adicional à base de conhecimento.
# 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})
Etapa 4: Inicializar o Mecanismo LLM
O mecanismo vLLM deve ser inicializado de forma eficiente para carregar o modelo específico, neste caso, "Qwen/Qwen2.5-1.5B”. Com configurações como uso otimizado de memória da GPU (80%) e bfloat16 para computação eficiente, garantimos que não haja falta de memória, além de uma operação rápida e consciente dos recursos para gerar até 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)
Etapa 5: Implementar o Pipeline RAG
Então, construímos um pipeline RAG com o modelo Qwen, o recuperador Milvus e um modelo de prompt para ingerir nosso contexto e pergunta. Além disso, adicionamos uma função de exibição de resposta para visualizar não apenas a resposta, mas também o contexto da fonte.
# 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})
Saída:
Consulta: O que você pode me dizer sobre o modelo QwQ?
Resultado: O modelo QwQ (Qwen with Questions) mostra que consegue pensar, questionar e compreender de forma profunda. Ele é como um estudante que sempre se pergunta e pensa cuidadosamente antes de dar uma resposta. Assim como ao aprender coisas novas, ele sabe que nada sabe e continua fazendo perguntas para aprender mais. Ele também tem algumas limitações e precisa aprender mais à medida que avança. Assim como todos, está sempre crescendo e melhorando.
Fonte: https://qwenlm.github.io/blog/qwq-32b-preview/
Descrição: GITHUB HUGGING FACE MODELSCOPE DEMO DISCORD
Nota: Esta é a pronúncia de QwQ: /kwju:/ , semelhante à palavra “quill”.
O que significa pensar, questionar, compreender? Estas são as águas profundas nas quais QwQ (Qwen with Questions) se aventura. Como um eterno estudante da sabedoria, ele aborda cada problema — seja matemática, código ou conhecimento do nosso mundo — com genuíno assombro e dúvida. QwQ incorpora aquele antigo espírito filosófico: ele sabe que nada sabe, e é exatamente isso que impulsiona sua curiosidade.
Título: QwQ: Reflita Profundamente sobre os Limites do Desconhecido | Qwen
Também podemos adicionar uma segunda pergunta sobre os outros modelos. Vemos que, em ambos os casos, as respostas são detalhadas e precisas, o que demonstra o alto desempenho tanto do Milvus quanto do Qwen, junto com o vLLM, que forneceu a resposta em 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})
Saída:
Consulta: O que você pode me dizer sobre os modelos open-source Qwen2.5: Qwen2.5, Qwen2.5-Coder, Qwen2.5-Math?
Resultado: Os modelos Qwen2.5, ou seja, Qwen2.5, Qwen2.5-Coder e Qwen2.5-Math, obtiveram melhorias significativas em vários aspectos em comparação com seus antecessores. Aqui estão alguns pontos principais:
1. **Desempenho Acadêmico:**
- O Qwen2.5 alcançou o melhor desempenho entre os modelos open-source em vários benchmarks populares de geração de código (EvalPlus, LiveCodeBench, BigCodeBench).
- O Qwen2.5 também obteve uma pontuação alta em uma tarefa de avaliação instrutiva, indicando forte alinhamento com capacidades de seguir instruções semelhantes às humanas.
- O Qwen2.5 apresentou desempenho competitivo com o GPT-4o, demonstrando superioridade em relação aos seus antecessores.
2. **Aplicações Práticas:**
- Os modelos Qwen2.5 se destacam ao lidar com diferentes linguagens de programação, demonstrando sua adaptabilidade e versatilidade.
- Os modelos Qwen2.5 passaram por aprimoramentos significativos, ampliando suas habilidades para lidar com tarefas de raciocínio mais complexas.
3. **Treinamento do Modelo:**
- O Qwen2.5, juntamente com o Qwen2.5-Coder e o Qwen2.5-Math, foi treinado em conjuntos de dados de grande escala que abrangem 18 trilhões de tokens. Isso inclui dados relacionados a código, permitindo que modelos menores de programação tenham desempenho competitivo com modelos maiores e mais abrangentes.
4. **Suporte do Modelo:**
- Todos os modelos Qwen2.5 são capazes de oferecer suporte a uma ampla variedade de linguagens de programação, proporcionando acessibilidade e aplicabilidade para os usuários.
5. **Capacidades Gerais:**
- Os modelos Qwen2.5 agora demonstram desempenho aprimorado em tarefas de raciocínio e geração, como reparo de código e escrita de código.
6. **Modelos Especializados:**
- Qwen2.5-Coder é focado em tarefas de programação, oferecendo melhor desempenho na geração de código, correção e até mesmo capacidades de raciocínio.
- Qwen2.5-Math aprimora o modelo fundamental Qwen2-Math, ampliando o suporte ao chinês e incorporando métodos sofisticados de raciocínio, como Chain-of-Thought (CoT), Program-of-Thought (PoT) e Tool-Integrated Reasoning (TIR).
7. **Licenciamento dos Modelos:**
- Todos os modelos de código aberto são licenciados sob Apache 2.0, garantindo compatibilidade e facilidade de uso em diferentes ambientes de desenvolvimento.
Esses aprimoramentos contribuem coletivamente para o desenvolvimento de assistentes de programação inteligentes poderosos e versáteis, com capacidades mais amplas e desempenho aprimorado.
Fonte: https://qwenlm.github.io/blog/qwen2.5/
Descrição: GITHUB HUGGING FACE MODELSCOPE DEMO DISCORD
Introdução Nos últimos três meses desde o lançamento do Qwen2, inúmeros desenvolvedores criaram novos modelos com base nos modelos de linguagem Qwen2, fornecendo-nos feedback valioso. Durante esse período, concentramos nossos esforços em criar modelos de linguagem mais inteligentes e com mais conhecimento. Hoje, estamos empolgados em apresentar a mais recente adição à família Qwen: Qwen2.5. Estamos anunciando o que pode ser o maior lançamento de código aberto da história!
Título: Qwen2.5: Uma Festa de Modelos Fundamentais! | Qwen
Conclusão
As inovações técnicas apresentadas nesta exploração—particularmente a integração do PagedAttention no vLLM e o gerenciamento eficiente de vetores do Milvus—destacam a importância crítica da infraestrutura para tornar grandes modelos de linguagem práticos e acessíveis. Essas tecnologias abordam desafios importantes na implantação de modelos, como otimização de memória, velocidade de inferência e recuperação escalável de conhecimento. Ao resolver esses gargalos técnicos, desenvolvedores e organizações agora podem implementar sistemas sofisticados de Geração Aumentada por Recuperação (RAG) que antes eram complexos ou intensivos em recursos, abrindo novas fronteiras em aplicações impulsionadas por IA em setores como saúde, educação, desenvolvimento de software e pesquisa científica.
Recursos Relacionados
Continue lendo
Stop Building AI Data Infra for the Wrong Stage
Learn how AI data infrastructure should evolve from prototype to enterprise scale, and when Vector Lakebase becomes the right architecture for AI apps.

Why and How to Migrate from Self-Hosted Milvus to Zilliz Cloud
A simple, step-by-step guide to migrating from Milvus to Zilliz Cloud. Learn both endpoint and backup methods for a smooth, scalable vector database migration.

Zilliz Cloud Introduces Advanced BYOC-I Solution for Ultimate Enterprise Data Sovereignty
Explore Zilliz Cloud BYOC-I, the solution that balances AI innovation with data control, enabling secure deployments in finance, healthcare, and education sectors.



