API LLM Inference позволяет запускать большие языковые модели (LLM) полностью на устройстве, что дает возможность выполнять широкий спектр задач, таких как генерация текста, извлечение информации на естественном языке и составление резюме документов. Эта функция обеспечивает встроенную поддержку нескольких больших языковых моделей преобразования текста в текст, позволяя применять новейшие модели генеративного ИИ на устройствах в ваших приложениях и продуктах.
Данная задача обеспечивает встроенную поддержку различных LLM-моделей. Модели, размещенные на странице сообщества LiteRT , доступны в формате, совместимом с MediaPipe, и не требуют дополнительных преобразований или компиляций.
С помощью LiteRT Torch можно экспортировать модели PyTorch в модели LiteRT с множественной подписью ( tflite ), которые объединяются с параметрами токенизатора для создания пакетов задач (Task Bundles). Модели, преобразованные с помощью LiteRT Torch, совместимы с API вывода LLM и могут работать на ЦП, что делает их подходящими для приложений Android и iOS.
Начать
Начните использовать эту задачу, следуя одному из этих руководств по реализации для вашей целевой платформы. Эти руководства, специфичные для каждой платформы, помогут вам выполнить базовую реализацию этой задачи, предоставив примеры кода с использованием доступной модели и рекомендуемых параметров конфигурации:
Веб :
Android :
iOS
Детали задачи
В этом разделе описываются возможности, входные и выходные данные, а также параметры конфигурации данной задачи.
Функции
API для вывода LLM содержит следующие ключевые функции:
- Генерация текста в текст — создание текста на основе введенного текстового запроса.
- Выбор LLM — используйте несколько моделей, чтобы адаптировать приложение под конкретные задачи. Вы также можете переобучить модель и применить к ней пользовательские веса.
- Поддержка LoRA — Расширьте и настройте возможности LLM с помощью модели LoRA, обучив ее на всем вашем наборе данных или используя готовые предварительно созданные модели LoRA от сообщества разработчиков с открытым исходным кодом (несовместимо с моделями, преобразованными с помощью API генерации LiteRT Torch).
| Входные данные задачи | Результаты выполнения задачи |
|---|---|
API для вывода LLM принимает следующие входные данные:
| API для вывода LLM-функций выдает следующие результаты:
|
Параметры конфигурации
Данная задача имеет следующие параметры конфигурации:
| Название варианта | Описание | Диапазон значений | Значение по умолчанию |
|---|---|---|---|
modelPath | Путь к месту хранения модели в каталоге проекта. | ПУТЬ | Н/Д |
maxTokens | Максимальное количество токенов (входные токены + выходные токены), которое обрабатывает модель. | Целое число | 512 |
topK | Количество токенов, которые модель рассматривает на каждом шаге генерации. Ограничивает прогнозы k наиболее вероятными токенами. | Целое число | 40 |
temperature | Степень случайности, вносимая в процесс генерации. Более высокая температура приводит к большей креативности в генерируемом тексте, в то время как более низкая температура обеспечивает более предсказуемую генерацию. | Плавать | 0,8 |
randomSeed | Начальное значение генератора случайных чисел, используемое при генерации текста. | Целое число | 0 |
loraPath | Абсолютный путь к локальной модели LoRA на устройстве. Примечание: это совместимо только с моделями с графическим процессором (GPU). | ПУТЬ | Н/Д |
resultListener | Устанавливает обработчик результатов для асинхронного получения результатов. Применимо только при использовании метода асинхронной генерации. | Н/Д | Н/Д |
errorListener | Устанавливает необязательный обработчик ошибок. | Н/Д | Н/Д |
Модели
API LLM Inference поддерживает множество больших языковых моделей преобразования текста в текст, включая встроенную поддержку нескольких моделей, оптимизированных для работы в браузерах и на мобильных устройствах. Эти легковесные модели можно использовать для выполнения вывода результатов полностью на устройстве.
Перед инициализацией API LLM Inference загрузите модель и сохраните файл в каталоге вашего проекта. Вы можете использовать предварительно преобразованную модель из репозитория LiteRT Community HuggingFace или преобразовать модель в формат, совместимый с MediaPipe, с помощью AI Edge Torch Generative Converter .
Если у вас еще нет модели LLM для использования с API вывода LLM, начните с одной из следующих моделей.
Gemma-3n
Gemma-3n E2B и E4B — это новейшие модели в семействе Gemma, представляющие собой облегченные, современные открытые системы, созданные на основе тех же исследований и технологий, что и модели Gemini . Модели Gemma 3n разработаны для эффективного выполнения на устройствах с ограниченными ресурсами. Они способны обрабатывать многомодальный ввод, включая текст, изображения и аудио, а также генерировать текстовый вывод.
В моделях Gemma 3n используется технология селективной активации параметров для снижения требований к ресурсам. Эта технология позволяет моделям работать с эффективным размером 2B и 4B параметров, что меньше общего числа содержащихся в них параметров.
Модели Gemma-3n E2B и E4B от HuggingFace доступны в формате .litertlm и готовы к использованию с API LLM Inference для Android и Web.
Джемма-3 1Б
Gemma-3 1B — самая легкая модель в семействе Gemma, представляющая собой современные, легкие модели открытого типа, созданные на основе тех же исследований и технологий, что и модели Gemini . Модель содержит параметры и весовые характеристики, характерные для модели 1B.
Модель Gemma-3 1B от HuggingFace доступна в формате .task / .litertlm и готова к использованию с API LLM Inference для приложений Android и веб-приложений.
При запуске Gemma-3 1B с использованием API вывода LLM настройте следующие параметры соответствующим образом:
-
preferredBackend: Используйте эту опцию для выбора между бэкендом на основеCPUилиGPU. Эта опция доступна только для Android. -
supportedLoraRanks: API вывода LLM нельзя настроить для поддержки адаптации низкого ранга (LoRA) с моделью Gemma-3 1B. Не используйте параметрыsupportedLoraRanksилиloraRanks. -
maxTokens: Значение параметраmaxTokensдолжно соответствовать размеру контекста, заложенному в модель. Это также может называться кэшем «ключ-значение» (KV) или длиной контекста. -
numResponses: Всегда должно быть равно 1. Эта опция доступна только для веб-версии.
При запуске Gemma-3 1B в веб-приложениях инициализация может вызвать длительную блокировку в текущем потоке. По возможности всегда запускайте модель из отдельного рабочего потока.
Джемма-2 2Б
Gemma-2 2B — это вариант Gemma-2 под названием 2B, работающий на всех платформах.
Модель содержит 2B параметров и открытые веса. Gemma-2 2B известна своими передовыми возможностями рассуждения для моделей своего класса.
Преобразование модели в PyTorch
Генеративные модели PyTorch можно преобразовать в формат, совместимый с MediaPipe, с помощью API генерации LiteRT Torch . Вы можете использовать этот API для преобразования моделей PyTorch в модели LiteRT (TensorFlow Lite) с множественными сигнатурами. Более подробную информацию о сопоставлении и экспорте моделей можно найти на странице LiteRT Torch в GitHub .
Преобразование модели PyTorch с помощью генеративного API LiteRT Torch включает в себя следующие шаги:
- Загрузите контрольные точки модели PyTorch.
- Используйте API генерации LiteRT Torch для создания, преобразования и квантования модели в формат файла, совместимый с MediaPipe (
.tflite). - Создайте пакет задач (
.task/.litertlm) из файла tflite и модели токенизатора.
Генеративный конвертер Torch выполняет преобразование только для процессора и требует наличия машины под управлением 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 | Токены остановки, специфичные для данной модели. Токены остановки должны присутствовать в предоставленной модели токенизатора. | LIST[STRING] |
output_filename | Имя файла пакета выходных задач. | ПУТЬ |
Настройка LoRA
API Mediapipe для вывода LLM-моделей можно настроить для поддержки адаптации к низкому рангу (LoRA) для больших языковых моделей. Используя точно настроенные модели LoRA, разработчики могут настраивать поведение LLM-моделей в процессе экономичного обучения.Поддержка LoRA в API вывода LLM работает для всех вариантов Gemma и моделей Phi-2 для бэкенда GPU, при этом веса LoRA применяются только к слоям внимания. Эта первоначальная реализация служит экспериментальным API для будущих разработок, в планах — поддержка большего количества моделей и различных типов слоев в будущих обновлениях.
Подготовьте модели LoRA
Следуйте инструкциям на HuggingFace , чтобы обучить тонко настроенную модель LoRA на собственном наборе данных с использованием поддерживаемых типов моделей: Gemma или Phi-2. Модели Gemma-2 2B , Gemma 2B и Phi-2 доступны на HuggingFace в формате safetensors. Поскольку API вывода LLM поддерживает 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"],
)
Для тестирования на HuggingFace доступны общедоступные доработанные модели LoRA, соответствующие API вывода LLM. Например, 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 Flatbuffer, используя пакет Python MediaPipe. В файле ConversionConfig следует указать базовые параметры модели, а также дополнительные параметры LoRA. Обратите внимание, что поскольку API поддерживает вывод LoRA только с использованием GPU, в качестве бэкенда необходимо установить значение '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 в веб-версии, 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() , что и в базовой модели.