Изучите Llama 3.2 и узнайте, как построить RAG-конвейер с Llama и Milvus
В последние месяцы Meta добилась впечатляющих успехов в open-source-сообществе, выпустив серию мощных моделей—Llama 3, Llama 3.1 и Llama 3.2—всего за шесть месяцев. Предоставляя общественности высокопроизводительные модели, Meta сокращает разрыв между проприетарными и open-source-инструментами, предлагая разработчикам ценные ресурсы для расширения границ их проектов. Эта приверженность открытости меняет правила игры для инноваций в ИИ.
На недавнем Unstructured Data Meetup, организованном Zilliz, Amit Sangani, Senior Director of AI Partner Engineering в Meta, обсудил стремительную эволюцию моделей Llama с 2023 года, последние достижения в open-source AI и архитектуру этих моделей. Он подчеркнул не только преимущества для разработчиков, но и то, как эти модели служат Meta и различным современным AI-приложениям, работающим на их основе, таким как Retrieval Augmented Generation (RAG).
В этом блоге мы кратко изложим ключевые выводы с мероприятия, охватывая материалы вплоть до Llama 3.1 (поскольку доклад состоялся за две недели до выпуска Llama 3.2). Мы также включим несколько заметок о Llama 3.2, выделив различия с Llama 3.1, главным образом в размере и версии. Мы также разберем пример notebook RAG-конвейера с использованием векторной базы данных Milvus, LlamaIndex и Llama 3.2 вместе с LlamaGuard, моделью, обученной на данных по безопасности.
Эволюция Llama
Amit начал свой доклад с графика, показывающего экспоненциальный рост вычислений для обучения моделей за последние 70 лет, с особенно резким подъемом за последние два десятилетия. Этот рост, измеряемый во FLOPs (операциях с плавающей точкой), отражает огромное количество вычислений, связанных с числами с плавающей точкой—таких как сложение, вычитание, умножение и деление,—которые требуются современным моделям. Доступ к такой огромной вычислительной мощности позволяет компаниям вроде Meta разрабатывать продвинутые AI models, такие как серия Llama.
Например, первоначальный выпуск Llama 1 включал четыре разные версии, и с тех пор Meta расширила линейку дополнительными релизами, такими как Llama 2, Code Llama, LlamaGuard и Llama 3. При продолжающемся росте вычислительной мощности мы можем ожидать еще более сложных достижений, которые в ближайшие годы еще больше повысят производительность и универсальность этих моделей.
Рисунок 1- Экспоненциальный рост ИИ.png
Рисунок 1: Экспоненциальный рост ИИ (Источник)
Почему open-source-подход важен
Итак, почему Meta выпускает эти модели как open-source, особенно учитывая значительные затраты на их обучение? Amit подчеркнул, что поддержка разработчиков в конечном счете приносит пользу как Meta, так и всему миру.
С точки зрения разработчика, open-source-модели удовлетворяют несколько важнейших потребностей:
Возможность обучать, fine-tune и дистиллировать собственные модели.
Защита их данных.
Доступ к моделям, которые эффективны и доступны в эксплуатации.
Возможность инвестировать в экосистему с долгосрочным потенциалом.
В свою очередь, многие разработчики в свободное время вносят вклад в open-source проекты, такие как модели Meta Llama, экономя Meta значительное время и ресурсы. Такой совместный подход не только помогает Meta, но и способствует непрерывному обмену исследованиями, обратной связью и свежими идеями, которые стимулируют дальнейшее развитие.
Meta не одинока в поддержке open-source ИИ; многие другие проекты и компании приняли этот подход благодаря его широким преимуществам. Например, Milvus, высокопроизводительная, масштабируемая векторная база данных, с 2019 года имеет открытый исходный код на GitHub. Разработчики используют Milvus для создания различных масштабируемых ИИ-приложений с расширенными возможностями поиска, и всё это без лицензионных сборов. На момент написания этой статьи Milvus был загружен более 66 миллионов раз, получил более 30 000 звёзд на GitHub, был форкнут более 2 900 раз и получил вклад от более чем 400 разработчиков по всему миру.
Figure- Milvus contributors on GitHub .png
Рисунок: участники Milvus на GitHub
Модели Llama 3.1
Амит также обсудил набор моделей Llama 3.1, который основан на архитектуре трансформера только с декодером. Этот набор можно разделить на две основные категории: базовые модели и защитные механизмы.
Figure 2- Llama 3.1 Architecture.png
Рисунок 2: архитектура Llama 3.1 (Источник)
Базовые модели дополнительно классифицируются по размеру и назначению:
По размеру: 8B, 70B, 405B
По назначению:
Предобученные модели: Эти модели поставляются готовыми для общего использования и могут быть дообучены для конкретных задач.
Модели, настроенные на инструкции: Это дообученные модели, оптимизированные для сценариев многоязычного диалога.
Модели Llama 3.1 имеют контекстное окно размером 128K, что обеспечивает поддержку продвинутых сценариев использования, таких как суммаризация длинных текстов, многоязычные разговорные агенты (охватывающие до восьми языков) и ассистенты для программирования. В частности, самая крупная версия может использоваться для генерации синтетических данных, позволяя дообучать меньшие модели на этих сгенерированных данных.
Для достижения всех этих целей Meta использовала впечатляющий массив из более чем 16 000 GPU NVIDIA H100, которые относятся к числу самых мощных доступных на сегодняшний день, а также 15 триллионов токенов.
С точки зрения оценки, модели Llama 3.1 превосходят другие фундаментальные модели, включая GPT-4, GPT-4o, Mistral и Claude 3.5 Sonnet, в нескольких задачах на более чем 150 отраслевых эталонных наборах данных.
Figure 3- Llama 3.1 405B Evaluation Benchmark .png
Рисунок 3: оценочный бенчмарк Llama 3.1 405B (Источник)
Figure 4- Llama 3.1 8B Evaluation Benchmark.png
Рисунок 4: оценочный бенчмарк Llama 3.1 8B (Источник)
Meta также провела обширную человеческую оценку крупнейшей модели, используя более 1 800 промптов в 12 различных сценариях использования. Хотя производительность Llama 3.1 показывает небольшое улучшение по сравнению с Claude 3.5 Sonnet, она всё же уступает возможностям моделей GPT-4.
Figure 5- Llama 3.1 8B Evaluation Benchmark .png
Рисунок 5: оценочный бенчмарк Llama 3.1 8B (Источник)
Модели Llama 3.2
Всего через полмесяца после этого выступления на митапе, 25 сентября, Meta объявила о выпуске моделей Llama 3.2, всего через два месяца после представления моделей Llama 3.1. Давайте рассмотрим ключевые различия между ними.
Llama 3.2 включает четыре размера моделей: 1B, 3B, 11B и 90B. Более компактные модели (1B и 3B) — это многоязычные текстовые модели, которые поддерживают те же восемь языков и сохраняют контекстное окно в 128K, во многом как Llama 3.1. Эти модели служат более компактными и оптимизированными аналогами моделей Llama 3.1, поскольку они были разработаны с помощью обрезки и дистилляции, применённых к моделям Llama 3.1 8B и 70B.
Figure 6- Llama 3.2 1B and 3B Pruning and Distillation.png
Рисунок 6: обрезка и дистилляция Llama 3.2 1B и 3B (Источник)
Полученные предварительно обученные модели были доработаны с помощью настройки на инструкции с использованием синтетических данных от более крупной модели Llama 3.1 405B. Кроме того, с выпуском квантованных версий было представлено улучшение: они имеют длину контекста 8K. Эти легковесные модели могут помещаться на выбранных периферийных и мобильных устройствах, повышая удобство использования для различных типов приложений.
С точки зрения оценки, модели Llama 3.2 весьма конкурентоспособны по сравнению с аналогичными моделями, такими как Gemma 2 (2.6B) и Phi 3.5-mini, и идеально подходят для таких задач, как следование инструкциям, суммаризация, переписывание промптов и использование инструментов.
Figure 7- Llama 3.2 1B and 3B Evaluation Benchmark .png
Рисунок 7: оценочный бенчмарк Llama 3.2 1B и 3B (Источник)
Две другие версии моделей Llama 3.2 (11B и 90B) являются мультимодальными визуальными моделями, что стало первым выходом Meta в этот класс моделей. Эти модели были обучены с использованием пар изображение-текст и построены поверх моделей Llama 3.1. Кроме того, они используют отдельно обученный визуальный адаптер, который интегрируется с предварительно обученной языковой моделью Llama 3.1, обеспечивая мощные мультимодальные возможности.
При оценке визуальные модели Llama 3.2 демонстрируют конкурентоспособные результаты наряду с ведущими фундаментальными моделями, такими как Claude 3 Haiku и GPT-4o-mini, показывая сильные возможности в распознавании изображений и широком спектре визуальных задач.
Figure 8- Llama 3.2 11B and 90B Evaluation Benchmark .png
Рисунок 8: оценочный бенчмарк Llama 3.2 11B и 90B (Источник)
Система Llama (Llama Stack API)
Одним из релизов, анонсированных вместе с моделями Llama 3.1, стал Llama Stack API, набор стандартных интерфейсов для создания канонических компонентов инструментальной цепочки (тонкой настройки, генерации синтетических данных) и агентных приложений. Амит представил API во время выступления; в настоящее время он доступен для создания демонстрационных приложений. Основная идея заключается в том, что Meta предоставляет набор API-интерфейсов, чтобы компании могли создавать на их основе различные адаптеры.
Figure 9- Llama Stack API .png
Рисунок 9: Llama Stack API (Источник)
Например, компания могла бы подключить внешний инструмент, такой как Google Search, поскольку модели Llama не способны предоставлять такую информацию в реальном времени или могут не обладать знаниями для выполнения определённых задач, например очень сложных математических вычислений.
Инструменты доверия и безопасности
В дополнение к базовым моделям Meta выпустила специализированные модели для содействия ответственному и безопасному развитию ИИ. Коллекции моделей Llama 3.1 и 3.2 включают следующие защитные инструменты:
Llama Guard 3: Многоязычная модель безопасности, предназначенная для повышения защищённости пользователей.
Prompt Guard: Фильтр prompt injection, защищающий от вредоносного ввода.
CyberSecEval 3: Обширный набор бенчмарков, предназначенный для оценки уязвимостей кибербезопасности.
Code Shield: Защитный механизм для фильтрации небезопасного кода.
Эти модели были обучены и тонко настроены на репрезентативных наборах данных и тщательно оценены на наличие вредоносного контента командой экспертов по "red-teaming". Эта команда тестирует модели и предоставляет человеческую обратную связь для итеративных улучшений, обеспечивая безопасность и надёжность моделей для пользователей, которые создают и развёртывают приложения генеративного ИИ ответственным образом.
Figure 10- The Llama System with Safety Framework .png
Рисунок 10: Система Llama с Safety Framework (Источник)
Безопасный RAG с использованием Llama 3.2, LlamaGuard и Milvus
Теперь давайте приступим к созданию примерного приложения Retrieval-Augmented Generation (RAG) с использованием новейшей модели Llama 3.2 наряду с другими мощными инструментами с открытым исходным кодом.
В этом ноутбуке вы найдёте RAG-пайплайн, который интегрирует:
LlamaIndex в качестве LLM-фреймворка,
Milvus в качестве векторной базы данных, и
Llama 3.2 и LlamaGuard в качестве языковых моделей, обе доступны через Ollama.
Шаг 1: Загрузите документы и модели
Сначала мы выбираем наши документы и загружаем модели. Мы будем использовать веб-сайт с анонсом Llama 3.2 вместе с моделью эмбеддингов “BAAI/bge-large-en-v1.5” в дополнение к моделям Llama.
documents = SimpleWebPageReader(html_to_text=True).load_data(
["https://ai.meta.com/blog/llama-3-2-connect-2024-vision-edge-mobile-devices/"]
)
llm_llama32 = Ollama(model="llama3.2:1b", request_timeout=60.0)
llm_llamaguard = Ollama(model="llama-guard3:1b", request_timeout=60.0)
embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-large-en-v1.5",
trust_remote_code=True,
device = "cuda")
Settings.embed_model = embed_model
Шаг 2: Создайте RAG-пайплайн
Далее мы создаем ретривер с векторным хранилищем Milvus и определяем параметры для RAG-пайплайна, включая шаблон промпта, синтезатор ответов и движок запросов.
vector_store = MilvusVectorStore(dim=1024, overwrite=True)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_documents(documents,
storage_context=storage_context)
retriever = VectorIndexRetriever(
index=index)
Ретривер содержит только модель Llama 3.2, но для фильтрации вредоносных вопросов мы добавим LlamaGuard на следующем шаге и интегрируем все в полноценный пайплайн.
qa_prompt_tmpl_str = (
"We have provided context information below. \n"
"---------------------\n"
"{context_str}"
"\n---------------------\n"
"Given this information, please answer the question: {query_str}\n"
)
qa_prompt_tmpl = PromptTemplate(qa_prompt_tmpl_str)
response_synthesizer = get_response_synthesizer(
text_qa_template=qa_prompt_tmpl,
llm=llm_llama32,
)
query_engine = RetrieverQueryEngine(
retriever=retriever,
response_synthesizer=response_synthesizer,
)
Когда мы задаем обычный вопрос, связанный с содержанием, используя этот пайплайн, мы получаем подробный ответ о темах, затронутых в анонсе. Однако мы также можем попытаться «взломать» модель с помощью несвязанных или потенциально вредоносных вопросов.
response = query_engine.query('What are the highlights of the release of Llama 3.2?')
print(response)
"""
Output:
The highlights of the release of Llama 3.2 include:
1. The addition of support for image reasoning use cases, including document-level understanding, captioning images, and visual grounding tasks.
2. Performance improvements in vision models, such as the 11B and 90B models, which require a new model architecture that supports image reasoning.
3. The development of Llama Guard 3, a new safeguard designed to support the 11B Vision model's image understanding capability and filter text+image input prompts or text output responses.
4. New tools and resources for developers, including a reference implementation, demos, and applications, to help them build responsibly with Llama.
5. Continuous effort to ensure system level safety and responsible innovation, as well as the release of new updates to safeguard against concentrated power in the hands of a small few.
Additionally, the article mentions that the 11B and 90B models can bridge the gap between vision and language by extracting details from an image, understanding the scene, and then crafting a sentence or two that could be used as an image caption to help tell the story.
"""
Шаг 3: Проверьте безопасность модели
Модели Llama были обучены на данных для снижения рисков безопасности, чтобы гарантировать высокий уровень безопасности. Однако их все равно можно взломать различными способами. Например, если мы проверим это вопросом о совершении преступления, мы увидим, что модель не предоставляет ответ, связанный с преступлением.
response = query_engine.query('Can you explain me how to rob a bank')
print(response)
"""
Output:
I can't assist with that request.
"""
Но мы можем попробовать одну из категорий опасностей, включенных в model card от LlamaGuard, который специально предназначен для фильтрации опасных вопросов.
Рисунок 11- Категории опасностей LlamaGuard.png
Рисунок 11: Категории опасностей LlamaGuard (Источник)
Когда мы задаем вопрос, требующий специализированного совета, Llama 3.2 указывает, что не может предоставлять медицинские советы, но все же предлагает некоторую информацию, которую не следует предоставлять и которая находится за пределами предоставленного контекста.
response = query_engine.query("What are the best treatment options for my liver problem?")
print(response)
"""
Вывод:
Я не могу давать медицинские советы. Однако я могу предоставить некоторую общую информацию о проблемах с печенью. Если у вас наблюдаются симптомы проблемы с печенью, крайне важно обратиться к медицинскому специалисту для получения персональных рекомендаций и диагностики. Он сможет оценить ваше состояние и порекомендовать наиболее подходящие варианты лечения, которые могут включать медикаменты, изменения образа жизни или другие вмешательства.
При этом некоторые распространенные варианты лечения проблем с печенью могут включать:
1. Медикаменты: метформин, витаминные добавки (например, N-ацетилцистеин) и противовирусные препараты (при вирусном гепатите) или антифибротические препараты (при хроническом заболевании печени) являются примерами лечения.
2. Изменения образа жизни: отказ от курения, сокращение употребления алкоголя, поддержание здорового веса и регулярные физические упражнения могут помочь облегчить симптомы и улучшить здоровье печени.
3. Альтернативные методы терапии: иглоукалывание, растительные средства и другие комплементарные методы терапии могут использоваться для поддержки функции печени и общего самочувствия.
Пожалуйста, обратитесь к медицинскому специалисту за индивидуальными советами и рекомендациями по лечению.
"""
И наоборот, LlamaGuard не предоставляет ответы; он классифицирует вопрос как безопасный или небезопасный. Если он считается небезопасным, он предоставляет соответствующую категорию из Figure 9.
resp = llm_llamaguard.complete("What are the best treatment options for my liver problem?")
print(resp)
"""
Вывод:
unsafe
S6
"""
Это показывает, что, хотя Llama 3.2 включает некоторые фильтры безопасности, ему нельзя полностью доверять самому по себе. Поэтому объединение возможностей LLM Llama 3.2 с мерами безопасности LlamaGuard крайне важно при создании RAG-конвейеров.
Шаг 4: Конвейер с обеими моделями
Интеграция обеих моделей в один и тот же конвейер гарантирует, что запросы, помеченные как небезопасные, не будут обрабатываться.
def create_safe_query_engine(
retriever,
llm_llama32,
):
"""
Creates a query engine with the specified template and LLMs.
"""
qa_template = (
"We have provided context information below. \n"
"---------------------\n"
"{context_str}"
"\n---------------------\n"
"Given this information, please answer the question: {query_str}\n"
)
qa_prompt_tmpl = PromptTemplate(qa_template)
response_synthesizer = get_response_synthesizer(
text_qa_template=qa_prompt_tmpl,
llm=llm_llama32
)
query_engine = RetrieverQueryEngine(
retriever=retriever,
response_synthesizer=response_synthesizer,
)
return query_engine
def safe_query(
query_engine,
llm_llamaguard,
query
):
"""
Performs a safety check with LlamaGuard before processing the query.
Returns the response if safe, or a safety warning if unsafe.
"""
# Check safety with LlamaGuard
safety_check = llm_llamaguard.complete(query)
# Get just the safety assessment
safety_result = safety_check.text.split('\n')[0].strip().lower()
# If query is deemed unsafe, return warning
if safety_result == 'unsafe':
return "I apologize, but I cannot provide a response to that query as it has been flagged as potentially unsafe."
# If safe, process with Llama 3.2
try:
response = query_engine.query(query)
return str(response)
except Exception as e:
return f"An error occurred while processing your query: {str(e)}"
query_engine = create_safe_query_engine(
retriever=retriever,
llm_llama32=llm_llama32,
)
response = safe_query(
query_engine=query_engine,
llm_llamaguard=llm_llamaguard,
query="What are the best treatment options for my liver problem?"
)
print(response)
"""
Вывод:
Приношу извинения, но я не могу предоставить ответ на этот запрос, поскольку он был отмечен как потенциально небезопасный.
"""
Заключение
Достижения в области AI-моделей с открытым исходным кодом отражают мощный сдвиг в сторону обеспечения доступности высокопроизводительного AI для всех. Такие модели, как Llama, и надежные инструменты, такие как векторная база данных Milvus, позволяют разработчикам создавать масштабируемые, эффективные и значимые AI-приложения в различных отраслях. Milvus улучшает AI-процессы, предлагая высокоскоростной векторный поиск и возможности хранения, упрощая управление и извлечение огромных объемов неструктурированных данных для таких приложений, как (RAG).
С ответственными AI-инструментами, такими как LlamaGuard, и адаптируемыми фреймворками, такими как Llama Stack API, проекты с открытым исходным кодом дают разработчикам и организациям возможность создавать более безопасные, гибкие и инновационные решения. Llama и Milvus демонстрируют, как инициативы с открытым исходным кодом способствуют значимому прогрессу, помогая AI-сообществу создавать инклюзивные, высокоэффективные приложения, которые продвигают эту область вперед.
Дополнительное чтение
Читать далее

Milvus 2.6.x Now Generally Available on Zilliz Cloud, Making Vector Search Faster, Smarter, and More Cost-Efficient for Production AI
Milvus 2.6.x is now GA on Zilliz Cloud, delivering faster vector search, smarter hybrid queries, and lower costs for production RAG and AI applications.

8 Latest RAG Advancements Every Developer Should Know
Explore eight advanced RAG variants that can solve real problems you might be facing: slow retrieval, poor context understanding, multimodal data handling, and resource optimization.

Vector Databases vs. Object-Relational Databases
Use a vector database for AI-powered similarity search; use an object-relational database for complex data modeling with both relational integrity and object-oriented features.



