API LLM Inference позволяет запускать большие языковые модели (LLM) полностью на устройстве для веб-приложений, что дает возможность выполнять широкий спектр задач, таких как генерация текста, извлечение информации на естественном языке и составление резюме документов. Эта функция обеспечивает встроенную поддержку нескольких больших языковых моделей преобразования текста в текст, позволяя применять новейшие модели генеративного ИИ на устройстве к вашим веб-приложениям. При использовании новейших моделей Gemma-3n поддерживаются также ввод изображений и аудиоданных.
Чтобы быстро добавить API вывода LLM в ваше веб-приложение, следуйте инструкциям в разделе «Быстрый старт» . Простой пример веб-приложения, работающего с API вывода LLM, можно найти в примере приложения . Для более подробного понимания принципов работы API вывода LLM обратитесь к разделам «Параметры конфигурации» , «Преобразование модели » и «Настройка LoRA» .
Вы можете увидеть эту задачу в действии в демонстрационной версии MediaPipe Studio . Для получения дополнительной информации о возможностях, моделях и параметрах конфигурации этой задачи см. раздел «Обзор» .
Быстрый старт
Выполните следующие шаги, чтобы добавить API вывода LLM в ваше веб-приложение. Для работы API вывода LLM требуется веб-браузер, совместимый с WebGPU. Полный список совместимых браузеров см. в разделе «Совместимость браузеров с GPU» .
Добавить зависимости
API для вывода LLM использует пакет @mediapipe/tasks-genai .
Установите необходимые пакеты для локальной среды разработки:
npm install @mediapipe/tasks-genai
Для развертывания на сервере используйте сервис сети доставки контента (CDN), например jsDelivr , чтобы добавить код непосредственно в вашу HTML-страницу:
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai/genai_bundle.cjs"
crossorigin="anonymous"></script>
</head>
Скачать модель
Скачайте Gemma-3n E4B или E2B с сайта HuggingFace. Модели с "-Web" в названии специально адаптированы для использования в интернете, поэтому настоятельно рекомендуется всегда использовать одну из этих моделей.
Для получения дополнительной информации о доступных моделях см. документацию по моделям или посетите нашу страницу сообщества HuggingFace , где представлены несколько дополнительных вариантов Gemma 3, не описанных в документации, но специально адаптированных для веб-использования, таких как 270M , 4B , 12B , 27B и MedGemma-27B-Text .
Сохраните модель в каталоге вашего проекта:
<dev-project-root>/assets/gemma-3n-E4B-it-int4-Web.litertlm
Укажите путь к модели с помощью параметра modelAssetPath объекта baseOptions :
baseOptions: { modelAssetPath: `/assets/gemma-3n-E4B-it-int4-Web.litertlm`}
Инициализировать задачу
Инициализируйте задачу с основными параметрами конфигурации:
const genai = await FilesetResolver.forGenAiTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm"
);
llmInference = await LlmInference.createFromOptions(genai, {
baseOptions: {
modelAssetPath: '/assets/gemma-3n-E4B-it-int4-Web.litertlm'
},
maxTokens: 1000,
topK: 40,
temperature: 0.8,
randomSeed: 101
});
Запустить задачу
Используйте функцию generateResponse() для запуска вывода результатов.
const response = await llmInference.generateResponse(inputPrompt);
document.getElementById('output').textContent = response;
Для потоковой передачи ответа используйте следующее:
llmInference.generateResponse(
inputPrompt,
(partialResult, done) => {
document.getElementById('output').textContent += partialResult;
});
Мультимодальная подсказка
Для моделей Gemma-3n веб-API LLM Inference поддерживают многомодальные подсказки. При включенной многомодальности пользователи могут включать в свои подсказки упорядоченную комбинацию изображений, аудио и текста. Затем LLM предоставляет текстовый ответ.
Для начала используйте Gemma-3n E4B или Gemma-3n E2B в формате, совместимом с MediaPipe и Web. Более подробную информацию см. в документации Gemma-3n .
Для включения поддержки машинного зрения убедитесь, что maxNumImages имеет положительное значение. Это определяет максимальное количество фрагментов изображения, которые LLM может обработать за один запрос.
Чтобы включить поддержку звука, убедитесь, что supportAudio имеет значение true .
llmInference = await LlmInference.createFromOptions(genai, {
baseOptions: {
modelAssetPath: '/assets/gemma-3n-E4B-it-int4-Web.litertlm'
},
maxTokens: 1000,
topK: 40,
temperature: 0.8,
randomSeed: 101,
maxNumImages: 5,
supportAudio: true,
});
Теперь ответы можно генерировать как и раньше, но с использованием упорядоченного массива строк, изображений и аудиоданных:
const response = await llmInference.generateResponse([
'<start_of_turn>user\n',
'Describe ',
{imageSource: '/assets/test_image.png'},
' and then transcribe ',
{audioSource: '/assets/test_audio.wav'},
'<end_of_turn>\n<start_of_turn>model\n',
]);
Для обработки изображений поддерживаются URL-адреса изображений и большинство распространенных объектов изображений, видео или холстов. Для обработки звука поддерживаются только одноканальные AudioBuffer и URL-адреса моноканальных аудиофайлов. Более подробную информацию можно найти в исходном коде .
Пример приложения
Представленное приложение — это пример базового приложения для генерации текста в веб-среде, использующего API LLM Inference. Вы можете использовать это приложение в качестве отправной точки для своего собственного веб-приложения или ссылаться на него при модификации существующего приложения. Пример кода размещен на GitHub .
Клонируйте репозиторий Git, используя следующую команду:
git clone https://github.com/google-ai-edge/mediapipe-samples
Для получения более подробной информации см. Руководство по настройке веб-версии .
Параметры конфигурации
Для настройки веб-приложения используйте следующие параметры конфигурации:
| Название варианта | Описание | Диапазон значений | Значение по умолчанию |
|---|---|---|---|
modelPath | Путь к месту хранения модели в каталоге проекта. | ПУТЬ | Н/Д |
maxTokens | Максимальное количество токенов (входные токены + выходные токены), которое обрабатывает модель. | Целое число | 512 |
topK | Количество токенов, которые модель рассматривает на каждом шаге генерации. Ограничивает прогнозы k наиболее вероятными токенами. | Целое число | 40 |
temperature | Степень случайности, вносимая в процесс генерации. Более высокая температура приводит к большей креативности в генерируемом тексте, в то время как более низкая температура обеспечивает более предсказуемую генерацию. | Плавать | 0,8 |
randomSeed | Начальное значение генератора случайных чисел, используемое при генерации текста. | Целое число | 0 |
loraRanks | Ранги LoRA, используемые моделями LoRA во время выполнения. Примечание: это совместимо только с моделями GPU. | Целочисленный массив | Н/Д |
Преобразование модели
API LLM Inference совместим со следующими типами моделей, для некоторых из которых требуется преобразование модели. Используйте таблицу, чтобы определить необходимые шаги для вашей модели.
| Модели | Метод преобразования | Совместимые платформы | Тип файла |
|---|---|---|---|
| Джемма-3 1Б | Преобразование не требуется | Android, веб | .задача |
| Джемма 2Б, Джемма 7Б, Джемма-2 2Б | Преобразование не требуется | Android, iOS, веб | .bin |
| Phi-2, StableLM, Falcon | скрипт преобразования MediaPipe | Android, iOS, веб | .bin |
| Все модели LLM на основе PyTorch | Генеративная библиотека LiteRT Torch | Android, iOS | .задача |
Чтобы узнать, как конвертировать другие модели, см. раздел «Конвертация моделей» .
Настройка LoRA
API для вывода LLM поддерживает настройку LoRA (Low-Rank Adaptation) с использованием библиотеки PEFT (Parameter-Efficient Fine-Tuning). Настройка LoRA позволяет адаптировать поведение LLM с помощью экономичного процесса обучения, создавая небольшой набор обучаемых весов на основе новых обучающих данных, а не переобучая всю модель целиком.
API LLM Inference поддерживает добавление весов LoRA к слоям внимания моделей Gemma-2 2B , Gemma 2B и Phi-2 . Загрузите модель в формате safetensors .
Для создания весов LoRA базовая модель должна быть в формате safetensors . После обучения LoRA вы можете преобразовать модели в формат FlatBuffers для работы на MediaPipe.
Подготовьте веса LoRA
Используйте руководство по методам LoRA от PEFT, чтобы обучить доработанную модель LoRA на собственном наборе данных.
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"],
)
После обучения на подготовленном наборе данных и сохранения модели, точно настроенные веса модели LoRA становятся доступны в adapter_model.safetensors . Файл safetensors является контрольной точкой LoRA, используемой во время преобразования модели.
Преобразование модели
Используйте пакет Python MediaPipe для преобразования весов модели в формат Flatbuffer. Параметр ConversionConfig задает базовые параметры модели, а также дополнительные параметры LoRA.
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_FILE,
)
converter.convert_checkpoint(config)
Конвертер создаст два файла, совместимых с MediaPipe: один для базовой модели, а другой для модели LoRA.
вывод модели LoRA
Веб-приложения поддерживают динамическую модель LoRA во время выполнения, то есть пользователи задают ранги LoRA при инициализации. Это означает, что вы можете заменять различные модели LoRA во время выполнения.
const genai = await FilesetResolver.forGenAiTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm"
);
const llmInference = await LlmInference.createFromOptions(genai, {
// options for the base model
...
// LoRA ranks to be used by the LoRA models during runtime
loraRanks: [4, 8, 16]
});
Загрузите модели LoRA во время выполнения, после инициализации базовой модели. Запустите модель LoRA, передав ссылку на модель при генерации ответа LLM.
// Load several LoRA models. The returned LoRA model reference is used to specify
// which LoRA model to be used for inference.
loraModelRank4 = await llmInference.loadLoraModel(loraModelRank4Url);
loraModelRank8 = await llmInference.loadLoraModel(loraModelRank8Url);
// Specify LoRA model to be used during inference
llmInference.generateResponse(
inputPrompt,
loraModelRank4,
(partialResult, done) => {
document.getElementById('output').textContent += partialResult;
});