Руководство по выводам LLM

API вывода LLM позволяет полностью запускать большие языковые модели (LLM) на устройстве, что позволяет выполнять широкий спектр задач, таких как генерация текста, извлечение информации на естественном языке и реферирование документов. Эта задача обеспечивает встроенную поддержку нескольких больших языковых моделей преобразования текста в текст, что позволяет применять новейшие модели генеративного ИИ на устройстве в своих приложениях и продуктах.

Попробуйте!

Задача обеспечивает встроенную поддержку различных LLM. Модели, размещённые на странице сообщества LiteRT , доступны в формате, совместимом с MediaPipe, и не требуют дополнительных этапов конвертации или компиляции.

С помощью AI Edge Torch можно экспортировать модели PyTorch в мультисигнатурные модели LiteRT ( tflite ), которые объединяются с параметрами токенизатора для создания пакетов задач. Модели, преобразованные с помощью AI Edge Torch, совместимы с API вывода LLM и могут работать на процессорном сервере, что делает их подходящими для приложений Android и iOS.

Начать

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

Подробности задачи

В этом разделе описываются возможности, входы, выходы и параметры конфигурации этой задачи.

Функции

API вывода LLM содержит следующие ключевые функции:

  1. Генерация текста в текст — генерация текста на основе введенной текстовой подсказки.
  2. Выбор программы магистратуры (LLM) — используйте несколько моделей, чтобы адаптировать приложение к вашим конкретным сценариям использования. Вы также можете переобучить модель и применить к ней собственные веса.
  3. Поддержка LoRA . Расширьте и настройте возможности LLM с помощью модели LoRA, либо обучив ее на вашем полном наборе данных, либо взяв готовые предварительно созданные модели LoRA из сообщества с открытым исходным кодом (несовместимо с моделями, преобразованными с помощью AI Edge Torch Generative API).
Входные данные задачи Результаты задач
API вывода LLM принимает следующие входные данные:
  • Текстовая подсказка (например, вопрос, тема электронного письма, документ, который необходимо резюмировать)
API вывода LLM выдает следующие результаты:
  • Сгенерированный текст на основе введенного запроса (например, ответ на вопрос, черновик электронного письма, краткое содержание документа)

Варианты конфигураций

Эта задача имеет следующие параметры конфигурации:

Название опции Описание Диапазон значений Значение по умолчанию
modelPath Путь к месту хранения модели в каталоге проекта. ПУТЬ Н/Д
maxTokens Максимальное количество токенов (входные токены + выходные токены), которые обрабатывает модель. Целое число 512
topK Количество токенов, которые модель учитывает на каждом этапе генерации. Ограничивает прогнозы k наиболее вероятными токенами. Целое число 40
temperature Степень случайности, вносимая при генерации. Более высокая температура приводит к большей креативности в генерируемом тексте, тогда как более низкая температура обеспечивает более предсказуемую генерацию. Плавать 0,8
randomSeed Случайное начальное число, используемое при генерации текста. Целое число 0
loraPath Абсолютный путь к модели LoRA локально на устройстве. Примечание: совместимо только с моделями на базе графических процессоров. ПУТЬ Н/Д
resultListener Настраивает прослушиватель результатов на асинхронное получение результатов. Применимо только при использовании метода асинхронной генерации. Н/Д Н/Д
errorListener Устанавливает необязательный прослушиватель ошибок. Н/Д Н/Д

Модели

API вывода LLM поддерживает множество моделей преобразования текста в текст, включая встроенную поддержку нескольких моделей, оптимизированных для работы в браузерах и на мобильных устройствах. Эти облегченные модели можно использовать для выполнения вывода непосредственно на устройстве.

Перед инициализацией LLM Inference API загрузите модель и сохраните файл в каталоге вашего проекта. Вы можете использовать предварительно сконвертированную модель из репозитория LiteRT Community HuggingFace или преобразовать модель в формат, совместимый с MediaPipe, с помощью AI Edge Torch Generative Converter .

Если у вас еще нет LLM для использования с LLM Inference API, начните с одной из следующих моделей.

Джемма-3н

Gemma-3n E2B и E4B — новейшие модели семейства Gemma, представляющие собой лёгкие, современные открытые модели, созданные на основе тех же исследований и технологий, что и модели Gemini . Модели Gemma 3n разработаны для эффективной работы на устройствах с низким потреблением ресурсов. Они поддерживают мультимодальный ввод, обработку текста, изображений и аудиоданных, а также генерацию текстовых выходных данных.

Модели Gemma 3n используют технологию выборочной активации параметров для снижения требований к ресурсам. Эта технология позволяет моделям работать с эффективным размером параметров 2B и 4B, что меньше общего числа содержащихся в них параметров.

Скачать Gemma-3n E2B

Скачать Gemma-3n E4B

Модели Gemma-3n E2B и E4B от HuggingFace доступны в формате .litertlm и готовы к использованию с API вывода LLM для Android и Web.

Джемма-3 1Б

Gemma-3 1B — самая лёгкая модель в семействе Gemma, состоящем из лёгких, современных открытых моделей, созданных на основе тех же исследований и технологий, что и модели Gemini . Модель содержит параметры 1B и открытые веса.

Скачать Джемма-3 1Б

Модель Gemma-3 1B от HuggingFace доступна в формате .task / .litertlm и готова к использованию с API вывода LLM для Android и веб-приложений.

При запуске Gemma-3 1B с API вывода LLM настройте следующие параметры соответствующим образом:

  • preferredBackend : используйте этот параметр для выбора между CPU и GPU . Этот параметр доступен только для Android.
  • supportedLoraRanks : API вывода LLM невозможно настроить для поддержки низкоранговой адаптации (LoRA) с моделью Gemma-3 1B. Не используйте параметры supportedLoraRanks или loraRanks .
  • maxTokens : значение maxTokens должно соответствовать размеру контекста, встроенному в модель. Это также может называться кэшем «ключ-значение» (KV) или длиной контекста.
  • numResponses : всегда должно быть равно 1. Эта опция доступна только для Web.

При запуске Gemma-3 1B в веб-приложениях инициализация может привести к длительной блокировке текущего потока. По возможности всегда запускайте модель из рабочего потока.

Джемма-2 2Б

Gemma-2 2B — это вариант Gemma-2 2B, работающий на всех платформах.

Скачать Джемма-2 2Б

Модель содержит параметры 2B и открытые веса. Gemma-2 2B известна своими передовыми навыками рассуждения для моделей своего класса.

Преобразование модели PyTorch

Генеративные модели PyTorch можно преобразовать в формат, совместимый с MediaPipe, с помощью API AI Edge Torch Generative . Этот API можно использовать для преобразования моделей PyTorch в модели LiteRT (TensorFlow Lite) с мультисигнатурой. Подробнее о сопоставлении и экспорте моделей см. на странице AI Edge Torch на GitHub .

Преобразование модели PyTorch с помощью AI Edge Torch Generative API включает следующие этапы:

  1. Загрузите контрольные точки модели PyTorch.
  2. Используйте API AI Edge Torch Generative для создания, преобразования и квантования модели в формат файла, совместимый с MediaPipe ( .tflite ).
  3. Создайте пакет задач ( .task / .litertlm ) из файла tflite и токенизатора модели.

Конвертер Torch Generative выполняет конвертацию только для ЦП и требует наличия машины Linux с объемом оперативной памяти не менее 64 ГБ.

Чтобы создать пакет задач , используйте скрипт связывания . В процессе связывания сопоставленная модель упаковывается в дополнительные метаданные (например, параметры токенизатора), необходимые для выполнения сквозного вывода.

Для сборки модели требуется пакет MediaPipe PyPI. Скрипт конвертации доступен во всех пакетах MediaPipe после 0.10.14 .

Установите и импортируйте зависимости с помощью следующей команды:

$ python3 -m pip install mediapipe

Используйте библиотеку genai.bundler для сборки модели:

import mediapipe as mp
from mediapipe.tasks.python.genai import bundler

config = bundler.BundleConfig(
    tflite_model=TFLITE_MODEL,
    tokenizer_model=TOKENIZER_MODEL,
    start_token=START_TOKEN,
    stop_tokens=STOP_TOKENS,
    output_filename=OUTPUT_FILENAME,
    enable_bytes_to_unicode_mapping=ENABLE_BYTES_TO_UNICODE_MAPPING,
)
bundler.create_bundle(config)
Параметр Описание Принятые значения
tflite_model Путь к экспортированной модели TFLite AI Edge. ПУТЬ
tokenizer_model Путь к модели токенизатора SentencePiece. ПУТЬ
start_token Начальный токен, специфичный для модели. Начальный токен должен присутствовать в предоставленной модели токенизатора. НИТЬ
stop_tokens Стоп-токены, специфичные для модели. Стоп-токены должны присутствовать в предоставленной модели токенизатора. СПИСОК[СТРОКА]
output_filename Имя выходного файла пакета задач. ПУТЬ

Настройка LoRA

API вывода LLM Mediapipe можно настроить для поддержки низкоранговой адаптации (LoRA) для больших языковых моделей. Используя точно настроенные модели LoRA, разработчики могут настраивать поведение LLM посредством экономичного процесса обучения.

Поддержка LoRA в LLM Inference API работает для всех вариантов Gemma и моделей Phi-2 для бэкэнда на GPU, при этом веса LoRA применяются только к слоям внимания. Эта начальная реализация служит экспериментальным API для будущих разработок, и в следующих обновлениях планируется поддержка большего количества моделей и различных типов слоёв.

Подготовка моделей LoRA

Следуйте инструкциям на HuggingFace , чтобы обучить точно настроенную модель LoRA на вашем собственном наборе данных с поддерживаемыми типами моделей: Gemma или Phi-2. Модели Gemma-2 2B , Gemma 2B и Phi-2 доступны на HuggingFace в формате safetensors. Поскольку LLM Inference API поддерживает LoRA только на уровнях внимания, укажите уровни внимания только при создании LoraConfig следующим образом:

# For Gemma
from peft import LoraConfig
config = LoraConfig(
    r=LORA_RANK,
    target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
)

# For Phi-2
config = LoraConfig(
    r=LORA_RANK,
    target_modules=["q_proj", "v_proj", "k_proj", "dense"],
)

Для тестирования доступны публично настроенные модели LoRA, соответствующие API вывода LLM, доступные на HuggingFace. Например, monsterapi/gemma-2b-lora-maths-orca-200k для Gemma-2B и lole25/phi-2-sft-ultrachat-lora для Phi-2.

После обучения на подготовленном наборе данных и сохранения модели вы получаете файл adapter_model.safetensors , содержащий точно настроенные веса модели LoRA. Файл safetensors — это контрольная точка LoRA, используемая при конвертации модели.

На следующем этапе необходимо преобразовать веса модели в плоский буфер TensorFlow Lite с помощью пакета MediaPipe Python. ConversionConfig должны быть указаны базовые параметры модели, а также дополнительные параметры LoRA. Обратите внимание: поскольку API поддерживает вывод LoRA только с использованием графического процессора, бэкенд должен быть установлен на 'gpu' .

import mediapipe as mp
from mediapipe.tasks.python.genai import converter

config = converter.ConversionConfig(
  # Other params related to base model
  ...
  # Must use gpu backend for LoRA conversion
  backend='gpu',
  # LoRA related params
  lora_ckpt=LORA_CKPT,
  lora_rank=LORA_RANK,
  lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
)

converter.convert_checkpoint(config)

Конвертер выведет два файла TFLite flatbuffer: один для базовой модели, а другой для модели LoRA.

Вывод модели LoRA

API вывода LLM для Web, Android и iOS обновлены для поддержки вывода модели LoRA.

Android поддерживает статическую модель LoRA во время инициализации. Для загрузки модели LoRA пользователи указывают путь к модели LoRA, а также базовый LLM.

// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
        .setModelPath('<path to base model>')
        .setMaxTokens(1000)
        .setTopK(40)
        .setTemperature(0.8)
        .setRandomSeed(101)
        .setLoraPath('<path to LoRA model>')
        .build()

// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)

Чтобы запустить вывод LLM с LoRA, используйте те же методы generateResponse() или generateResponseAsync() что и в базовой модели.