Недавний релиз Llama 3.2 с мультимодальными версиями 11B и 90B открывает возможности для создания AI приложений, анализирующих визуальный ввод.

Мультимодальные модели были и раньше, но это первая официальная версия Llama с такими функциями. Модель может быть использована для распознавания объектов и текста на изображении, как это делает GPT-4o. Довольно интересен технический рецепт создания мультимодальной Llama 3.2. За основу была взята предыдущая версия - 3.1, обычная текстовая LLM. Логично, если принять во внимание, что конечная цель - извлекать признаки изображения и “транслировать” их в текстовые токены. 

К LLM добавили image encoder, это модуль, который встраивает представление картинки-ввода в векторное пространство. А также слои image adapter’а - для того, чтобы полученные визуальные признаки передавать в языковую модель. Подробнее об энкодерах и адаптерах изображений можно прочитать, например, в статье Bordes et al. 2024 - введение в визуально-языковые модели. Обучают VLM на парах изображение-текст, именно так обучали и Llama 3.2. Причем в несколько этапов - сначала на большом корпусе данных, а затем применили файнтюнинг на меньшей, но более качественной выборке. Как показывает прошлый опыт работы с моделями Llama 3, такой подход дает хорошие результаты. Базовая модель, обученная на большом корпусе данных (например, 15трлн токенов Llama 3), хорошо генерализуется при файнтюнинге и меньше подвержена оверфиттингу. Пример - моя модель ruslandev/llama-3-8b-gpt-4o-ru1.0, которая после обучения на небольшом, но качественном датасете превзошла GPT-3.5 на русскоязычном бенчмарке.

Архитектура мультимодальных моделей Llama 3.2 - вопрос интересный, но в этой статье я хочу рассказать и о прикладной стороне, то есть о разработке AI приложений с использованием этих моделей.

Создатели Llama предложили Llama Stack - фреймворк для работы с их моделями, который позволяет деплоить многофункциональные API (для инференса, систем агентов, генерации собственных данных для обучения и других задач). У Llama Stack есть несколько клиентских SDK, в том числе на Python. С недавнего времени поддерживается мобильная платформа iOS - потому что модели Llama 3.2 1B и 3B могут работать на мобильном девайсе. Это обычные текстовые, только очень легковесные модели. По качеству сопоставимы с Gemma 2 и Phi-3. 

Но если вас интересует именно мультимодальная Llama 3.2, то для ее деплоя на Llama Stack потребуется GPU -  особенно для версии 90B. Я развернул Llama Stack с мультимодальной 11B в облаке immers.cloud на видеокарте RTX 4090 и протестировал через Inference API и Python-клиент. По моим впечатлениям, и модель, и API вполне себе готовы к запуску в продакшен. Llama Stack поддерживает разнообразные API-бэкенды, как self-hosted (например, TGI) так и cloud-hosted (AWS Bedrock, Together и другие).

Если вам нужно развернуть Llama Stack на своей виртуальной машине - вот как я это сделал в облаке. Кстати, видеокарты RTX 4090 более чем достаточно для работы мультимодальной 11B. Если хотите версию 90B, можете выбрать другой GPU или несколько. Llama Stack поддерживает мульти-GPU и квантизацию. 

Я установил фреймворк, используя anaconda, но есть и вариант для тех, кто предпочитает докер. Мой тест модели и фреймворка можно посмотреть в этом видео:

Из минусов фреймворка - не помешала бы более подробная документация. В репозитории Llama Stack есть пример из демо - приложение-помощник дизайнера интерьера. Оно демонстрирует несколько концепций фреймворка, в том числе - создание и конфигурация агента, мультимодальный инференс, работа с памятью и RAG. 

Чем хорошо наличие еще одного фреймворка для Generative AI? На первый взгляд функционал Llama Stack напоминает то, что уже было до него - LangChain, LlamaIndex и другие подобные фреймворки. Хорошо то, что этот инструмент является частью экосистемы Llama и, вероятно, станет официальным открытым API последующих версий ламы. Прицел на кроссплатформенность и многозадачность говорит о том же. Ранние доморощенные решения, скорее всего, перестанут быть актуальными, что относится и к моему собственному фреймворку - gptchain. Однако это верный признак того, что прикладная отрасль Generative AI становится более зрелой.

Комментарии (13)


  1. Fizikoleg
    21.10.2024 09:11

    По вашему мнению, какие из открытых llm лучше всего справляются с текстами на русском?


    1. ruslandevlabs Автор
      21.10.2024 09:11

      lightblue/suzume-llama-3-8B-multilingual и моя ruslandev/llama-3-8b-gpt-4o-ru1.0


    1. dolovar
      21.10.2024 09:11

      какие из открытых llm лучше всего справляются с текстами на русском?

      Вашему вопросу не хватает уточнений по весу модели, свежести её знаний и характере работы с текстом.
      Например, ллама с весом 405b великолепно справляется с текстами на русском но сможете ли вы эффективно крутить эту модель?
      Гибриды на основе третьей лламы неплохо писали тексты, но большинство из них ничего не знают о событиях и технологиях после 2021 года, подходит ли это под цели ваших текстов?
      Ну и читать с пониманием могут даже модели с весом 0.5b, причем делают это быстрее прочих - попадает ли это под ваше определение "справляться с текстом"?


      1. Fizikoleg
        21.10.2024 09:11

        По большей части хотел попробовать с помощью локальной модели организовать работу со своими файлами. Свежесть знаний не сильно значима.


  1. Fizikoleg
    21.10.2024 09:11

    А что скажете на счёт Gemma 2?


    1. ruslandevlabs Автор
      21.10.2024 09:11

      Не пробовал, знаю что у 2B хорошие результаты по бенчмаркам среди малых LLM. Но теперь есть Llama 3.2 3B


    1. dolovar
      21.10.2024 09:11

      Gemma2 даже в малых весах значительно превосходит Llama3.2 в мультиязычности. Нельзя использовать последние лламы для генерации на русском.


  1. PDEMON
    21.10.2024 09:11

    Парни, а такой вопрос. Кто нибудь встраивал небольшие LLM в полноценное приложение? К примеру, как скрепка в офисе или обработчик какой нибудь. Хочется посмотреть реализацию


    1. dolovar
      21.10.2024 09:11

      Работа с LLM по API или полноценное встраивание сервера в свое приложение?

      Скрепку можно реализовать простым расширением к браузеру, которое будет хранить часто используемые промпты и бегать с ними на сервер по мере надобности.


      1. PDEMON
        21.10.2024 09:11

        Не, без сервиса. Чисто локально, исключительно внутри приложения. Скрепка, это так пример. Без интернета, без отдельного, ручного поднимания сервера. Как агент приложения


        1. znsoft
          21.10.2024 09:11

          хм, судя по интернету Ллама поднимают даже на малинках без интернета, что мешает поднять его уже внутри приложения ? (ну да надо как то прилинковать все)

          https://www.dfrobot.com/blog-13412.html

          https://github.com/garyexplains/examples/blob/master/how-to-run-llama-cpp-on-raspberry-pi.md


          1. PDEMON
            21.10.2024 09:11

            То что локально маленького чат бота поднять хоть на осциллографе это понятно. Мне саму реализацию интересно посмотреть. Это ведь уже полноценного специализированно помощника сделать можно. Бухгалтерию, на данным момент я бы ему не доверил, но какую-то автоматизацию со сверкой данных или тому подобное можно было бы сделать.


            1. dolovar
              21.10.2024 09:11

              Рискну спросить - почему бы не попробовать спросить кого-нибудь из больших нейросетей? Они вполне способны рассказать о подходах и даже набросать скелет простого приложения для решения интересной вам задачи на интересной вам платформе. И если заинтересуют особенности какой-нибудь детали вроде "JNI для взаимодействия с llama.cpp", то тоже можно расспросить.

              Как мне кажется, для вашей задачи "хочется посмотреть реализацию" такой подход вполне достаточен.