Создание RAG-приложений с Milvus, Qwen и vLLM
Введение
В августе 2023 года Alibaba Group выпустила семейство современных моделей с открытым исходным кодом под названием Qwen, которые сочетают многоязычную беглость, продвинутые возможности рассуждения и высокую эффективность. Qwen представляет масштабируемую архитектуру на основе трансформеров, оптимизированную для разнообразных приложений, включая понимание естественного языка, возможности работы с изображениями и аудио, решение математических задач и генерацию кода. Эта серия декодерных больших языковых моделей (LLMs) открывает мощные возможности для создания систем Retrieval Augmented Generation (RAG) и привносит инновационные функции в современную конкурентную экосистему открытого исходного кода.
Хотя LLM могут запускаться на CPU или через специализированные конечные точки инференса, такие инструменты, как vLLM ,предлагают специализированные решения для эффективного развертывания крупномасштабных моделей. vLLM — это библиотека с открытым исходным кодом, предназначенная для оптимизации процесса инференса моделей на основе трансформеров, особенно для моделей огромного размера, таких как Qwen. Используя передовые методы оптимизации памяти и параллелизации, vLLM повышает производительность больших моделей, делая их более доступными и масштабируемыми для производственных сред. Интеграция Qwen с vLLM обеспечивает бесшовное и эффективное развертывание сложных моделей, что упрощает использование LLM в приложениях реального времени в различных отраслях.
В этом блоге мы рассмотрим Qwen и vLLM, а также то, как их сочетание с векторной базой данных Milvus можно использовать для создания надежной RAG-системы. Эти три технологии объединяют сильные стороны подходов на основе поиска и генерации, создавая систему, способную обрабатывать сложные запросы в реальном времени. Milvus улучшает систему, эффективно управляя крупномасштабными эмбеддингами и выполняя запросы к ним, а продвинутые языковые возможности Qwen обеспечивают основу для ответов. Благодаря оптимизации развертывания с помощью vLLM эта интеграция предоставляет высокопроизводительное решение для широкого спектра приложений на основе ИИ.
Обзор моделей серии Qwen
В своем первом техническом отчете Alibaba Group объяснила, что название Qwen происходит от "Qianwen", что означает "тысячи подсказок" на китайском языке. Модели Qwen были обучены на до 3 триллионах токенов многоязычного текста и кода с использованием продвинутых техник fine-tuning, таких как Supervised Fine-Tuning (SFT) и Reinforcement Learning from Human Feedback (RLHF).
Рисунок 1- Происхождение моделей серии Qwen
Рисунок 1: Происхождение моделей серии Qwen (Источник)
Базовые модели Qwen доступны в четырех размерах — от 1,8 миллиарда до 72 миллиардов параметров. У моделей есть специализированные версии для таких задач, как математика и программирование. С момента первого релиза модели Qwen развивались, улучшая размер модели, производительность, языковые возможности и длину контекста. В настоящее время модели Qwen классифицируются следующим образом:
Первые релизы: Qwen 1.8B, 7B, 14B и 72B
Рисунок 2- Первые релизы Qwen .png
Рисунок 2: Первые релизы Qwen (Источник)
Серия моделей Qwen Vision
Модель Qwen Vision изначально была выпущена в двух версиях: Qwen-VL и Qwen-VL-Chat. Эти модели были разработаны для выполнения задач на основе визуальных данных, таких как чтение документов, математические рассуждения и визуальные ответы на вопросы. С тех пор они были обновлены до версий Qwen-VL и Qwen2-VL, причем последняя является самой продвинутой и обеспечивает значительное повышение производительности, превосходя такие модели, как Google Gemini и OpenAI GPT, в различных визуальных бенчмарках:
Qwen-VL: Qwen-VL-Plus и Qwen-VL-Max.
Qwen2-VL: Qwen2-VL-2B, Qwen2-VL-7B и Qwen2-VL-72B.
Figure 3- Qwen-VL Benchmark Comparison.png
Рисунок 3: сравнение бенчмарков Qwen-VL (Источник)
Figure 4- Qwen2-VL Architecture.png
Рисунок 4: архитектура Qwen2-VL (Источник)
Figure 5- Qwen2-VL-72B Benchmark Comparison.png
Рисунок 5: сравнение бенчмарков Qwen2-VL-72B (Источник)
Серия Qwen Audio
Подобно визуальной модели, серия Qwen Audio изначально была выпущена в двух версиях: Qwen-Audio (многозадачная аудио-языковая модель) и Qwen-Audio-Chat (версия, дообученная с инструкциями). Эти модели были разработаны для обработки как аудио-, так и текстовых входных данных, генерируя текстовые выходные данные. С появлением серии Qwen2 обе модели были дополнительно улучшены:
- Qwen2-Audio-7B и Qwen2-Audio-7B-Instruct: Эти модели могут принимать как аудио-, так и текстовые входные данные и генерировать текстовые выходные данные, улучшая многоязычные возможности для таких приложений, как распознавание речи, транскрипция и голосовые ИИ-ассистенты
Figure 6- Qwen-Audio Architecture
Рисунок 6: архитектура Qwen-Audio (Источник)
Figure 7- Qwen2-Audio Architecture
Рисунок 7: архитектура Qwen2-Audio (Источник)
Серия Qwen 2.5
Серия Qwen 2.5 строится на основах оригинальных моделей Qwen с двумя значительными обновлениями: Qwen 1.5 и Qwen 2. Эти серии представляют специализированные модели, разработанные для дальнейшего расширения возможностей семейства Qwen, предлагая продвинутые улучшения в различных областях, таких как математика, программирование и общее понимание языка. Примечательно, что выпуск Qwen 1.5 также включал версию Mixture of Experts (MoE), добавляющую универсальность и улучшение производительности набору моделей. Эти разработки делают серию Qwen 2.5 высокоадаптивной для специализированных задач, сохраняя при этом широкую применимость.
Модели Qwen 2.5 доступны в диапазоне размеров, включая 0.5B, 1.5B, 3B, 7B, 14B, 32B и 72B, обеспечивая гибкость для разных сценариев использования:
Qwen 2.5-Math: Эта модель специально разработана для решения сложных математических задач. Она обеспечивает точные решения в различных областях, от базовой арифметики до высшего анализа. Серия включает модели разных размеров: 1.5B, 7B и 32B, а также Qwen 2.5-Math-RM-72B — специализированную версию, оптимизированную с помощью математической модели вознаграждения для еще большей точности в математических задачах.
Qwen 2.5-Coder: Модель, дообученная для генерации и отладки кода, Qwen 2.5-Coder идеально подходит для автоматизации задач программирования, включая написание скриптов, автодополнение кода и ревью кода. Модель доступна в размерах 0.5B, 1.5B, 3B, 7B, 14B и 32B, обеспечивая гибкость для разработчиков, работающих с широким спектром приложений для кодирования.
Figure 8- Qwen 2-5 Benchmark Comparison.png
Рисунок 8: Сравнение бенчмарков Qwen 2-5 (Источник)
Figure 9- Qwen 2-5-Coder Benchmark Comparison
Рисунок 9: Сравнение бенчмарков Qwen 2-5-Coder (Источник)
Figure 10- Qwen 2-5-Math Benchmark .png
Рисунок 10: Бенчмарк Qwen 2-5-Math (Источник)
Серия QwQ
Серия QwQ, в настоящее время являющаяся экспериментальной исследовательской моделью, представляет собой смелый скачок в область продвинутого рассуждения ИИ. Модель действует как вдумчивый студент, воплощает любознательность, подвергая сомнению собственные размышления, прежде чем предложить выводы. Сфокусированная на решении сложных задач в математике, программировании и рассуждении, первая версия, QwQ-32B-Preview, демонстрирует исключительную производительность в бенчмарках, таких как GPQA, AIME и MATH-500.
Figure 11- QwQ Benchmark Comparison
Рисунок 11: Сравнение бенчмарков QwQ (Источник)
vLLM: Оптимизация инференса больших моделей
vLLM (Virtual Large Language Model) — это open-source библиотека, разработанная для оптимизации инференса больших языковых моделей и решения ключевых задач при развертывании архитектур на основе трансформеров в масштабе. Благодаря инновационным методам, таким как PagedAttention, тензорный параллелизм и эффективные стратегии кэширования, vLLM достигает значительного сокращения вычислительных накладных расходов и использования памяти во время инференса. Эти оптимизации позволяют развертывать более крупные и сложные модели с повышенной эффективностью, снижая затраты и усилия, необходимые для запуска современных систем ИИ.
Figure 12- vLLM System Overview.png
Рисунок 12: Обзор системы vLLM (Источник)
Ключевые особенности и инновации
PagedAttention
Выдающаяся особенность vLLM, PagedAttention, революционизирует управление памятью GPU, применяя принципы управления памятью из операционных систем. Этот подход обеспечивает динамическое выделение и страничную организацию памяти во время инференса, значительно повышая пропускную способность и снижая задержку. Эффективно управляя ресурсами GPU, PagedAttention облегчает использование более крупных моделей без необходимости в обширных аппаратных ресурсах, что делает его практичным выбором для масштабирования ИИ-приложений.
Тензорный параллелизм и кэширование
В дополнение к PagedAttention, vLLM использует продвинутый тензорный параллелизм для эффективного распределения рабочих нагрузок между несколькими GPU. Он также включает эффективные механизмы кэширования для минимизации избыточных вычислений, дополнительно повышая производительность модели во время инференса. В совокупности эти методы гарантируют, что vLLM обеспечивает высокоскоростной и экономически эффективный инференс для моделей-трансформеров.
Приложения
vLLM поддерживает развертывание больших языковых моделей в реальном времени в различных областях:
Обработка естественного языка (NLP): Задачи, такие как суммаризация текста, анализ тональности и распознавание именованных сущностей.
Разговорный ИИ: Системы чат-ботов в реальном времени и виртуальные ассистенты.
Генерация с дополненным извлечением (RAG): Интеграция больших моделей с системами извлечения для продвинутых задач ответов на вопросы и извлечения знаний.
Приложение RAG с Milvus, vLLM и Qwen
В этом руководстве показано, как реализовать конвейер RAG, используя Milvus в качестве векторной базы данных, Qwen в качестве языковой модели, vLLM для оптимизированного инференса и LangChain в качестве фреймворка. Полный код этого руководства можно найти в следующем notebook.
Шаг 1: Настройка окружения
Для эффективного использования vLLM нам понадобится GPU. Следующий notebook был запущен в Google Colab с использованием GPU A100. Кроме того, для генерации эмбеддингов требуется OpenAI API Key.
Шаг 2: Загрузка данных
В качестве источника для нашей базы знаний мы загрузим несколько блогов о моделях Qwen во время их релизов и разделим их на фрагменты с помощью метода RecursiveCharacterTextSplitter из 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)
Шаг 3: Создание Milvus Retriever
Далее мы настроим Milvus retriever с текстовым содержимым и метаданными для эффективного извлечения, поскольку метаданные добавляют дополнительный поддерживающий контекст в базу знаний.
# 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})
Шаг 4: Инициализация LLM Engine
Движок vLLM должен быть эффективно инициализирован для загрузки конкретной модели, в данном случае "Qwen/Qwen2.5-1.5B”. Благодаря таким конфигурациям, как оптимизированное использование памяти GPU (80%) и bfloat16 для эффективных вычислений, мы избегаем нехватки памяти и обеспечиваем быструю и ресурсосберегающую работу для генерации до 500 токенов.
# Initialize vLLM
llm = VLLM(
model="Qwen/Qwen2.5-1.5B",
max_new_tokens=500,
enforce_eager=True,
dtype="bfloat16",
gpu_memory_utilization=0.8)
Шаг 5: Реализация конвейера RAG
Затем мы создаем конвейер RAG с моделью Qwen, Milvus retriever и шаблоном prompt для передачи нашего контекста и вопроса. Кроме того, мы добавляем функцию отображения ответа, чтобы визуализировать не только ответ, но и исходный контекст.
# 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})
Вывод:
Запрос: Что вы можете рассказать мне о модели QwQ?
Результат: Модель QwQ (Qwen with Questions) показывает, что она может глубоко мыслить, задаваться вопросами и понимать. Она похожа на ученика, который всегда размышляет и тщательно думает, прежде чем дать ответ. Подобно изучению нового, она знает, что ничего не знает, и продолжает задавать вопросы, чтобы узнать больше. У нее также есть некоторые ограничения, и ей нужно учиться дальше по мере развития. Как и все, она постоянно растет и совершенствуется.
Источник: https://qwenlm.github.io/blog/qwq-32b-preview/
Описание: GITHUB HUGGING FACE MODELSCOPE DEMO DISCORD
Примечание: это произношение QwQ: /kwju:/ , похоже на слово “quill”.
Что значит мыслить, задаваться вопросами, понимать? Это глубокие воды, в которые погружается QwQ (Qwen with Questions). Подобно вечному ученику мудрости, она подходит к каждой проблеме — будь то математика, код или знания о нашем мире — с искренним удивлением и сомнением. QwQ воплощает этот древний философский дух: она знает, что ничего не знает, и именно это движет ее любознательностью.
Заголовок: QwQ: глубоко размышляя о границах неизвестного | Qwen
Мы также можем добавить второй вопрос о других моделях. Мы видим, что в обоих случаях ответы подробные и точные, что демонстрирует высокую производительность как Milvus и Qwen, так и vLLM, который предоставил ответ менее чем за 1 с.
# 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})
Вывод:
Запрос: Что вы можете рассказать мне об open-source моделях Qwen2.5: Qwen2.5, Qwen2.5-Coder, Qwen2.5-Math?
Результат: Модели Qwen2.5, а именно Qwen2.5, Qwen2.5-Coder и Qwen2.5-Math, получили значительные улучшения в различных аспектах по сравнению со своими предшественниками. Вот несколько ключевых выводов:
1. **Академическая производительность:**
- Qwen2.5 достигла лучшей производительности среди open-source моделей на нескольких популярных бенчмарках генерации кода (EvalPlus, LiveCodeBench, BigCodeBench).
- Qwen2.5 также показала высокий результат в задаче оценки следования инструкциям, что указывает на сильное соответствие способностям следовать инструкциям в человеческом стиле.
- Qwen2.5 продемонстрировала конкурентоспособную производительность по сравнению с GPT-4o, показав превосходство над своими предшественниками.
2. **Практические применения:**
- Модели Qwen2.5 отлично справляются с различными языками программирования, демонстрируя свою адаптивность и универсальность.
- Модели Qwen2.5 прошли значительные улучшения, расширив свои навыки для обработки более сложных задач рассуждения.
3. **Обучение моделей:**
- Qwen2.5, вместе с Qwen2.5-Coder и Qwen2.5-Math, были обучены на крупномасштабных наборах данных, охватывающих 18 триллионов токенов. Это включает данные, связанные с кодом, что позволяет меньшим моделям для программирования конкурировать с более крупными и более комплексными моделями.
4. **Поддержка моделей:**
- Все модели Qwen2.5 способны поддерживать широкий спектр языков программирования, обеспечивая доступность и применимость для пользователей.
5. **Общие возможности:**
- Модели Qwen2.5 теперь демонстрируют улучшенную производительность в задачах рассуждения и генерации, таких как исправление кода и написание кода.
6. **Специализированные модели:**
- Qwen2.5-Coder ориентирована на задачи программирования, обеспечивая лучшую производительность в генерации кода, его исправлении и даже возможностях рассуждения.
- Qwen2.5-Math улучшает базовую модель Qwen2-Math, расширяя поддержку китайского языка и включая сложные методы рассуждения, такие как Chain-of-Thought (CoT), Program-of-Thought (PoT) и Tool-Integrated Reasoning (TIR).
7. **Лицензирование моделей:**
- Все модели с открытым исходным кодом лицензированы по Apache 2.0, что обеспечивает совместимость и простоту использования в различных средах разработки.
Эти улучшения в совокупности способствуют разработке мощных и универсальных интеллектуальных помощников для программирования с более широкими возможностями и повышенной производительностью.
Источник: https://qwenlm.github.io/blog/qwen2.5/
Описание: GITHUB HUGGING FACE MODELSCOPE DEMO DISCORD
Введение За последние три месяца с момента выпуска Qwen2 многочисленные разработчики создали новые модели на основе языковых моделей Qwen2, предоставив нам ценную обратную связь. В этот период мы сосредоточились на создании более умных и более осведомленных языковых моделей. Сегодня мы рады представить новейшее пополнение семейства Qwen: Qwen2.5. Мы объявляем о том, что, возможно, является крупнейшим релизом с открытым исходным кодом в истории!
Заголовок: Qwen2.5: Вечеринка фундаментальных моделей! | Qwen
Заключение
Технические инновации, продемонстрированные в этом обзоре, — особенно интеграция PagedAttention в vLLM и эффективное управление векторами в Milvus — подчеркивают критическую важность инфраструктуры для того, чтобы сделать большие языковые модели практичными и доступными. Эти технологии решают ключевые проблемы развертывания моделей, такие как оптимизация памяти, скорость инференса и масштабируемое извлечение знаний. Устраняя эти технические узкие места, разработчики и организации теперь могут внедрять сложные системы Retrieval-Augmented Generation (RAG), которые ранее были сложными или ресурсоемкими, открывая новые горизонты в приложениях на базе ИИ в таких отраслях, как здравоохранение, образование, разработка программного обеспечения и научные исследования.
Связанные ресурсы
Читать далее

Why We Built Vector Lakebase: Rethinking Unstructured Data Architecture for AI
Vector Lakebase: a unified, lake-native data foundation for AI workloads — and an answer to what happens after vector databases succeed.

Zilliz Cloud Now Available in AWS Asia Pacific (Seoul)
Zilliz Cloud is now available in AWS Seoul — low-latency vector search, in-country data residency, and one-step migration for Korean AI teams. 31 regions across 5 clouds.

Announcing the General Availability of Zilliz Cloud BYOC on Google Cloud Platform
Zilliz Cloud BYOC on GCP offers enterprise vector search with full data sovereignty and seamless integration.



