API вывода LLM позволяет полностью запускать большие языковые модели (LLM) в браузере для веб-приложений, которые можно использовать для выполнения широкого спектра задач, таких как генерация текста, получение информации в форме естественного языка и обобщение документов. Задача обеспечивает встроенную поддержку нескольких больших языковых моделей преобразования текста в текст, поэтому вы можете применять новейшие генеративные модели искусственного интеллекта на устройстве к своим веб-приложениям.
Вы можете увидеть эту задачу в действии с помощью демо-версии MediaPipe Studio . Дополнительные сведения о возможностях, моделях и параметрах конфигурации этой задачи см. в разделе Обзор .
Пример кода
Пример приложения для LLM Inference API предоставляет вам базовую реализацию этой задачи на JavaScript. Вы можете использовать этот пример приложения, чтобы начать создавать собственное приложение для генерации текста.
Вы можете получить доступ к примеру приложения LLM Inference API на GitHub .
Настраивать
В этом разделе описаны ключевые шаги по настройке среды разработки и проектов кода специально для использования LLM Inference API. Общие сведения о настройке среды разработки для использования задач MediaPipe, включая требования к версии платформы, см. в руководстве по настройке для Web .
Совместимость с браузером
Для API вывода LLM требуется веб-браузер, совместимый с WebGPU. Полный список совместимых браузеров см. в разделе «Совместимость браузеров с графическим процессором» .
JavaScript-пакеты
Код API LLM Inference доступен через пакет @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>
Модель
Для API вывода MediaPipe LLM требуется обученная модель, совместимая с этой задачей. Для веб-приложений модель должна быть совместима с графическим процессором.
Дополнительную информацию о доступных обученных моделях для LLM Inference API см. в разделе «Модели» обзора задач.
Скачать модель
Перед инициализацией API вывода LLM загрузите одну из поддерживаемых моделей и сохраните файл в каталоге вашего проекта:
- Gemma-2 2B : Последняя версия моделей семейства Gemma. Часть семейства легких современных открытых моделей, созданных на основе тех же исследований и технологий, которые использовались при создании моделей Gemini .
- Gemma 2B : часть семейства легких современных открытых моделей, созданных на основе тех же исследований и технологий, которые использовались при создании моделей Gemini . Хорошо подходит для различных задач по созданию текста, включая ответы на вопросы, обобщение и рассуждения.
- Phi-2 : модель преобразователя с 2,7 миллиардами параметров, лучше всего подходит для формата вопросов-ответов, чата и кода.
- Falcon-RW-1B : модель причинного декодера с 1 миллиардом параметров, обученная на 350 миллиардах токенов RefinedWeb .
- StableLM-3B : языковая модель только для декодера с 3 миллиардами параметров, предварительно обученная на 1 триллионе токенов различных наборов данных английского языка и кода.
Мы рекомендуем использовать Gemma-2 2B, который доступен на Kaggle Models . Дополнительную информацию о других доступных моделях см. в разделе «Модели обзора задач».
Преобразование модели в формат MediaPipe
Преобразование собственной модели
Если вы используете внешний LLM (Phi-2, Falcon или StableLM) или версию Gemma, отличную от Kaggle, используйте наши сценарии преобразования, чтобы отформатировать модель, чтобы она была совместима с MediaPipe.
Для процесса преобразования модели требуется пакет MediaPipe PyPI. Сценарий преобразования доступен во всех пакетах MediaPipe после 0.10.11
.
Установите и импортируйте зависимости следующим образом:
$ python3 -m pip install mediapipe
Используйте библиотеку genai.converter
для преобразования модели:
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
input_ckpt=INPUT_CKPT,
ckpt_format=CKPT_FORMAT,
model_type=MODEL_TYPE,
backend=BACKEND,
output_dir=OUTPUT_DIR,
combine_file_only=False,
vocab_model_file=VOCAB_MODEL_FILE,
output_tflite_file=OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
Чтобы преобразовать модель LoRA, 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: один для базовой модели, а другой для модели LoRA.
Параметр | Описание | Принятые значения |
---|---|---|
input_ckpt | Путь к файлу model.safetensors или pytorch.bin . Обратите внимание, что иногда формат модели Safetensors разбивается на несколько файлов, например model-00001-of-00003.safetensors , model-00001-of-00003.safetensors . Вы можете указать шаблон файла, например model*.safetensors . | ПУТЬ |
ckpt_format | Формат файла модели. | {"safetensors", "pytorch"} |
model_type | LLM конвертируется. | {"PHI_2", "FALCON_RW_1B", "STABLELM_4E1T_3B", "GEMMA_2B"} |
backend | Процессор (делегат), используемый для запуска модели. | {"процессор", "графический процессор"} |
output_dir | Путь к выходному каталогу, в котором хранятся файлы весов каждого слоя. | ПУТЬ |
output_tflite_file | Путь к выходному файлу. Например, «model_cpu.bin» или «model_gpu.bin». Этот файл совместим только с API вывода LLM и не может использоваться в качестве обычного файла tflite. | ПУТЬ |
vocab_model_file | Путь к каталогу, в котором хранятся файлы tokenizer.json и tokenizer_config.json . Для Gemma укажите один файл tokenizer.model . | ПУТЬ |
lora_ckpt | Путь к файлу LoRA ckpt ofsafetensors, в котором хранится вес адаптера LoRA. | ПУТЬ |
lora_rank | Целое число, представляющее ранг LoRA ckpt. Требуется для преобразования весов Лоры. Если он не указан, преобразователь предполагает, что веса LoRA отсутствуют. Примечание. Только серверная часть графического процессора поддерживает LoRA. | Целое число |
lora_output_tflite_file | Выходное имя файла tflite для весов LoRA. | ПУТЬ |
Преобразование модели AI Edge
Если вы используете LLM, сопоставленный с моделью TFLite через AI Edge, используйте наш скрипт связывания, чтобы создать Task Bundle . Процесс объединения упаковывает сопоставленную модель с дополнительными метаданными (например, параметрами токенизатора), необходимыми для выполнения сквозного вывода.
Для процесса объединения моделей требуется пакет 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 | Имя выходного файла пакета задач. | ПУТЬ |
Добавить модель в каталог проекта
Сохраните модель в каталоге вашего проекта:
<dev-project-root>/assets/gemma-2b-it-gpu-int4.bin
Укажите путь к модели с помощью параметра modelAssetPath
объекта baseOptions
:
baseOptions: { modelAssetPath: `/assets/gemma-2b-it-gpu-int4.bin`}
Создать задачу
Используйте одну из функций createFrom...()
API LLM Inference API, чтобы подготовить задачу к выполнению логических выводов. Вы можете использовать функцию createFromModelPath()
с относительным или абсолютным путем к файлу обученной модели. В примере кода используется функция createFromOptions()
. Дополнительные сведения о доступных параметрах конфигурации см. в разделе Параметры конфигурации .
Следующий код демонстрирует, как построить и настроить эту задачу:
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-2b-it-gpu-int4.bin'
},
maxTokens: 1000,
topK: 40,
temperature: 0.8,
randomSeed: 101
});
Варианты конфигурации
Эта задача имеет следующие параметры конфигурации для веб-приложений и приложений JavaScript:
Название опции | Описание | Диапазон значений | Значение по умолчанию |
---|---|---|---|
modelPath | Путь к хранению модели в каталоге проекта. | ПУТЬ | Н/Д |
maxTokens | Максимальное количество токенов (входные токены + выходные токены), которые обрабатывает модель. | Целое число | 512 |
topK | Количество токенов, которые модель учитывает на каждом этапе генерации. Ограничивает прогнозы первыми k наиболее вероятными токенами. | Целое число | 40 |
temperature | Количество случайности, введенной во время генерации. Более высокая температура приводит к большей креативности сгенерированного текста, а более низкая температура обеспечивает более предсказуемую генерацию. | Плавать | 0,8 |
randomSeed | Случайное начальное число, используемое при генерации текста. | Целое число | 0 |
loraRanks | Ранги LoRA будут использоваться моделями LoRA во время выполнения. Примечание. Это совместимо только с моделями графических процессоров. | Целочисленный массив | Н/Д |
Подготовьте данные
LLM Inference API принимает текстовые ( string
) данные. Задача выполняет предварительную обработку входных данных, включая токенизацию и предварительную обработку тензоров.
Вся предварительная обработка выполняется в generateResponse()
. Нет необходимости в дополнительной предварительной обработке входного текста.
const inputPrompt = "Compose an email to remind Brett of lunch plans at noon on Saturday.";
Запустить задачу
API вывода LLM использует generateResponse()
для запуска выводов. Для классификации текста это означает возврат возможных категорий входного текста.
Следующий код демонстрирует, как выполнить обработку с помощью модели задачи.
const response = await llmInference.generateResponse(inputPrompt);
document.getElementById('output').textContent = response;
Для потоковой передачи ответа используйте следующее:
llmInference.generateResponse(
inputPrompt,
(partialResult, done) => {
document.getElementById('output').textContent += partialResult;
});
Обработка и отображение результатов
API вывода LLM возвращает строку, которая включает в себя сгенерированный текст ответа.
Here's a draft you can use:
Subject: Lunch on Saturday Reminder
Hi Brett,
Just a quick reminder about our lunch plans this Saturday at noon.
Let me know if that still works for you.
Looking forward to it!
Best,
[Your Name]
Настройка модели LoRA
API вывода Mediapipe LLM можно настроить для поддержки низкоранговой адаптации (LoRA) для больших языковых моделей. Используя точно настроенные модели LoRA, разработчики могут настраивать поведение LLM с помощью экономически эффективного процесса обучения.
Поддержка LoRA API вывода LLM работает для моделей Gemma-2B и Phi-2 для серверной части графического процессора, при этом веса LoRA применимы только к уровням внимания. Эта первоначальная реализация служит экспериментальным API для будущих разработок, и в будущих обновлениях планируется поддерживать больше моделей и различных типов слоев.
Подготовьте модели LoRA
Следуйте инструкциям на HuggingFace, чтобы обучить точно настроенную модель LoRA на вашем собственном наборе данных с поддерживаемыми типами моделей: Gemma-2B или Phi-2. Модели Gemma-2B и Phi-2 доступны на HuggingFace в формате защитных тензоров. Поскольку API LLM Inference поддерживает LoRA только на уровнях внимания, при создании LoraConfig
указывайте только уровни внимания следующим образом:
# For Gemma-2B
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 Inference. Например, 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 с помощью пакета Python MediaPipe. 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: один для базовой модели, а другой для модели LoRA.
Вывод модели LoRA
API вывода LLM для Интернета, Android и iOS обновлен для поддержки вывода модели LoRA. Интернет поддерживает динамический LoRA, который может переключать различные модели LoRA во время выполнения. Android и iOS поддерживают статический 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, передав ссылку на модель 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;
});
,API вывода LLM позволяет полностью запускать большие языковые модели (LLM) в браузере для веб-приложений, которые можно использовать для выполнения широкого спектра задач, таких как генерация текста, получение информации в форме естественного языка и обобщение документов. Задача обеспечивает встроенную поддержку нескольких больших языковых моделей преобразования текста в текст, поэтому вы можете применять новейшие генеративные модели искусственного интеллекта на устройстве к своим веб-приложениям.
Вы можете увидеть эту задачу в действии с помощью демо-версии MediaPipe Studio . Дополнительные сведения о возможностях, моделях и параметрах конфигурации этой задачи см. в разделе Обзор .
Пример кода
Пример приложения для LLM Inference API предоставляет вам базовую реализацию этой задачи на JavaScript. Вы можете использовать этот пример приложения, чтобы начать создавать собственное приложение для генерации текста.
Вы можете получить доступ к примеру приложения LLM Inference API на GitHub .
Настраивать
В этом разделе описаны ключевые шаги по настройке среды разработки и проектов кода специально для использования LLM Inference API. Общие сведения о настройке среды разработки для использования задач MediaPipe, включая требования к версии платформы, см. в руководстве по настройке для Web .
Совместимость с браузером
Для API вывода LLM требуется веб-браузер, совместимый с WebGPU. Полный список совместимых браузеров см. в разделе «Совместимость браузеров с графическим процессором» .
JavaScript-пакеты
Код API LLM Inference доступен через пакет @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>
Модель
Для API вывода MediaPipe LLM требуется обученная модель, совместимая с этой задачей. Для веб-приложений модель должна быть совместима с графическим процессором.
Дополнительную информацию о доступных обученных моделях для LLM Inference API см. в разделе «Модели» обзора задач.
Скачать модель
Перед инициализацией API вывода LLM загрузите одну из поддерживаемых моделей и сохраните файл в каталоге вашего проекта:
- Gemma-2 2B : Последняя версия моделей семейства Gemma. Часть семейства легких современных открытых моделей, созданных на основе тех же исследований и технологий, которые использовались при создании моделей Gemini .
- Gemma 2B : часть семейства легких современных открытых моделей, созданных на основе тех же исследований и технологий, которые использовались при создании моделей Gemini . Хорошо подходит для различных задач по созданию текста, включая ответы на вопросы, обобщение и рассуждения.
- Phi-2 : модель преобразователя с 2,7 миллиардами параметров, лучше всего подходит для формата вопросов-ответов, чата и кода.
- Falcon-RW-1B : модель причинного декодера с 1 миллиардом параметров, обученная на 350 миллиардах токенов RefinedWeb .
- StableLM-3B : языковая модель только для декодера с 3 миллиардами параметров, предварительно обученная на 1 триллионе токенов различных наборов данных английского языка и кода.
Мы рекомендуем использовать Gemma-2 2B, который доступен на Kaggle Models . Дополнительную информацию о других доступных моделях см. в разделе «Модели» обзора задач.
Преобразование модели в формат MediaPipe
Преобразование собственной модели
Если вы используете внешний LLM (Phi-2, Falcon или StableLM) или версию Gemma, отличную от Kaggle, используйте наши сценарии преобразования, чтобы отформатировать модель, чтобы она была совместима с MediaPipe.
Для процесса преобразования модели требуется пакет MediaPipe PyPI. Сценарий преобразования доступен во всех пакетах MediaPipe после 0.10.11
.
Установите и импортируйте зависимости следующим образом:
$ python3 -m pip install mediapipe
Используйте библиотеку genai.converter
для преобразования модели:
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
input_ckpt=INPUT_CKPT,
ckpt_format=CKPT_FORMAT,
model_type=MODEL_TYPE,
backend=BACKEND,
output_dir=OUTPUT_DIR,
combine_file_only=False,
vocab_model_file=VOCAB_MODEL_FILE,
output_tflite_file=OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
Чтобы преобразовать модель LoRA, 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: один для базовой модели, а другой для модели LoRA.
Параметр | Описание | Принятые значения |
---|---|---|
input_ckpt | Путь к файлу model.safetensors или pytorch.bin . Обратите внимание, что иногда формат модели Safetensors разбивается на несколько файлов, например model-00001-of-00003.safetensors , model-00001-of-00003.safetensors . Вы можете указать шаблон файла, например model*.safetensors . | ПУТЬ |
ckpt_format | Формат файла модели. | {"safetensors", "pytorch"} |
model_type | LLM конвертируется. | {"PHI_2", "FALCON_RW_1B", "STABLELM_4E1T_3B", "GEMMA_2B"} |
backend | Процессор (делегат), используемый для запуска модели. | {"процессор", "графический процессор"} |
output_dir | Путь к выходному каталогу, в котором хранятся файлы весов каждого слоя. | ПУТЬ |
output_tflite_file | Путь к выходному файлу. Например, «model_cpu.bin» или «model_gpu.bin». Этот файл совместим только с API вывода LLM и не может использоваться в качестве обычного файла tflite. | ПУТЬ |
vocab_model_file | Путь к каталогу, в котором хранятся файлы tokenizer.json и tokenizer_config.json . Для Gemma укажите один файл tokenizer.model . | ПУТЬ |
lora_ckpt | Путь к файлу LoRA ckpt ofsafetensors, в котором хранится вес адаптера LoRA. | ПУТЬ |
lora_rank | Целое число, представляющее ранг LoRA ckpt. Требуется для преобразования весов Лоры. Если этот параметр не указан, преобразователь предполагает, что веса LoRA отсутствуют. Примечание. Только серверная часть графического процессора поддерживает LoRA. | Целое число |
lora_output_tflite_file | Выходное имя файла tflite для весов LoRA. | ПУТЬ |
Преобразование модели AI Edge
Если вы используете LLM, сопоставленный с моделью TFLite через AI Edge, используйте наш сценарий связывания для создания пакета задач . Процесс объединения упаковывает сопоставленную модель с дополнительными метаданными (например, параметрами токенизатора), необходимыми для выполнения сквозного вывода.
Для процесса объединения модели требуется пакет 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 | Имя выходного файла пакета задач. | ПУТЬ |
Добавить модель в каталог проекта
Сохраните модель в каталоге вашего проекта:
<dev-project-root>/assets/gemma-2b-it-gpu-int4.bin
Укажите путь к модели с помощью параметра modelAssetPath
объекта baseOptions
:
baseOptions: { modelAssetPath: `/assets/gemma-2b-it-gpu-int4.bin`}
Создать задачу
Используйте одну из функций createFrom...()
API LLM Inference API, чтобы подготовить задачу к выполнению логических выводов. Вы можете использовать функцию createFromModelPath()
с относительным или абсолютным путем к файлу обученной модели. В примере кода используется функция createFromOptions()
. Дополнительные сведения о доступных параметрах конфигурации см. в разделе Параметры конфигурации .
Следующий код демонстрирует, как построить и настроить эту задачу:
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-2b-it-gpu-int4.bin'
},
maxTokens: 1000,
topK: 40,
temperature: 0.8,
randomSeed: 101
});
Варианты конфигурации
Эта задача имеет следующие параметры конфигурации для веб-приложений и приложений JavaScript:
Название опции | Описание | Диапазон значений | Значение по умолчанию |
---|---|---|---|
modelPath | Путь к хранению модели в каталоге проекта. | ПУТЬ | Н/Д |
maxTokens | Максимальное количество токенов (входные токены + выходные токены), которые обрабатывает модель. | Целое число | 512 |
topK | Количество токенов, которые модель учитывает на каждом этапе генерации. Ограничивает прогнозы первыми k наиболее вероятными токенами. | Целое число | 40 |
temperature | Количество случайности, введенной во время генерации. Более высокая температура приводит к большей креативности в сгенерированном тексте, а более низкая температура обеспечивает более предсказуемую генерацию. | Плавать | 0,8 |
randomSeed | Случайное начальное число, используемое при генерации текста. | Целое число | 0 |
loraRanks | Ранги LoRA будут использоваться моделями LoRA во время выполнения. Примечание. Это совместимо только с моделями графических процессоров. | Целочисленный массив | Н/Д |
Подготовьте данные
LLM Inference API принимает текстовые ( string
) данные. Задача выполняет предварительную обработку входных данных, включая токенизацию и предварительную обработку тензоров.
Вся предварительная обработка выполняется в generateResponse()
. Нет необходимости в дополнительной предварительной обработке входного текста.
const inputPrompt = "Compose an email to remind Brett of lunch plans at noon on Saturday.";
Запустить задачу
API вывода LLM использует generateResponse()
для запуска выводов. Для классификации текста это означает возврат возможных категорий входного текста.
Следующий код демонстрирует, как выполнить обработку с помощью модели задачи.
const response = await llmInference.generateResponse(inputPrompt);
document.getElementById('output').textContent = response;
Для потоковой передачи ответа используйте следующее:
llmInference.generateResponse(
inputPrompt,
(partialResult, done) => {
document.getElementById('output').textContent += partialResult;
});
Обработка и отображение результатов
API вывода LLM возвращает строку, которая включает сгенерированный текст ответа.
Here's a draft you can use:
Subject: Lunch on Saturday Reminder
Hi Brett,
Just a quick reminder about our lunch plans this Saturday at noon.
Let me know if that still works for you.
Looking forward to it!
Best,
[Your Name]
Настройка модели LoRA
API вывода Mediapipe LLM можно настроить для поддержки низкоранговой адаптации (LoRA) для больших языковых моделей. Используя точно настроенные модели LoRA, разработчики могут настраивать поведение LLM с помощью экономически эффективного процесса обучения.
Поддержка LoRA API вывода LLM работает для моделей Gemma-2B и Phi-2 для серверной части графического процессора, при этом веса LoRA применимы только к уровням внимания. Эта первоначальная реализация служит экспериментальным API для будущих разработок, и в будущих обновлениях планируется поддерживать больше моделей и различных типов слоев.
Подготовьте модели LoRA
Следуйте инструкциям на HuggingFace, чтобы обучить точно настроенную модель LoRA на вашем собственном наборе данных с поддерживаемыми типами моделей: Gemma-2B или Phi-2. Модели Gemma-2B и Phi-2 доступны на HuggingFace в формате защитных тензоров. Поскольку API LLM Inference поддерживает LoRA только на слоях внимания, при создании LoraConfig
указывайте только слои внимания следующим образом:
# For Gemma-2B
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 Inference. Например, 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 с помощью пакета Python MediaPipe. 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: один для базовой модели, а другой для модели LoRA.
Вывод модели LoRA
API вывода LLM для Интернета, Android и iOS обновлен для поддержки вывода модели LoRA. Интернет поддерживает динамический LoRA, который может переключать различные модели LoRA во время выполнения. Android и iOS поддерживают статический 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, передав ссылку на модель 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;
});
,API вывода LLM позволяет полностью запускать большие языковые модели (LLM) в браузере для веб-приложений, которые можно использовать для выполнения широкого спектра задач, таких как генерация текста, получение информации в форме естественного языка и обобщение документов. Задача обеспечивает встроенную поддержку нескольких больших языковых моделей преобразования текста в текст, поэтому вы можете применять новейшие генеративные модели искусственного интеллекта на устройстве к своим веб-приложениям.
Вы можете увидеть эту задачу в действии с помощью демо-версии MediaPipe Studio . Дополнительные сведения о возможностях, моделях и параметрах конфигурации этой задачи см. в разделе Обзор .
Пример кода
Пример приложения для LLM Inference API предоставляет вам базовую реализацию этой задачи на JavaScript. Вы можете использовать этот пример приложения, чтобы начать создавать собственное приложение для генерации текста.
Вы можете получить доступ к примеру приложения LLM Inference API на GitHub .
Настраивать
В этом разделе описаны ключевые шаги по настройке среды разработки и проектов кода специально для использования LLM Inference API. Общие сведения о настройке среды разработки для использования задач MediaPipe, включая требования к версии платформы, см. в руководстве по настройке для Web .
Совместимость с браузером
Для API вывода LLM требуется веб-браузер, совместимый с WebGPU. Полный список совместимых браузеров см. в разделе «Совместимость браузеров с графическим процессором» .
JavaScript-пакеты
Код API LLM Inference доступен через пакет @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>
Модель
Для API вывода MediaPipe LLM требуется обученная модель, совместимая с этой задачей. Для веб-приложений модель должна быть совместима с графическим процессором.
Дополнительную информацию о доступных обученных моделях для LLM Inference API см. в разделе «Модели» обзора задач.
Скачать модель
Перед инициализацией API вывода LLM загрузите одну из поддерживаемых моделей и сохраните файл в каталоге вашего проекта:
- Gemma-2 2B : Последняя версия моделей семейства Gemma. Часть семейства легких современных открытых моделей, созданных на основе тех же исследований и технологий, которые использовались при создании моделей Gemini .
- Gemma 2B : часть семейства легких современных открытых моделей, созданных на основе тех же исследований и технологий, которые использовались при создании моделей Gemini . Хорошо подходит для различных задач по созданию текста, включая ответы на вопросы, обобщение и рассуждения.
- Phi-2 : модель преобразователя с 2,7 миллиардами параметров, лучше всего подходит для формата вопросов-ответов, чата и кода.
- Falcon-RW-1B : модель причинного декодера с 1 миллиардом параметров, обученная на 350 миллиардах токенов RefinedWeb .
- StableLM-3B : языковая модель только для декодера с 3 миллиардами параметров, предварительно обученная на 1 триллионе токенов различных наборов данных английского языка и кода.
Мы рекомендуем использовать Gemma-2 2B, который доступен на Kaggle Models . Дополнительную информацию о других доступных моделях см. в разделе «Модели обзора задач».
Преобразование модели в формат MediaPipe
Преобразование собственной модели
Если вы используете внешний LLM (Phi-2, Falcon или StableLM) или версию Gemma, отличную от Kaggle, используйте наши сценарии преобразования, чтобы отформатировать модель, чтобы она была совместима с MediaPipe.
Для процесса преобразования модели требуется пакет MediaPipe PyPI. Сценарий преобразования доступен во всех пакетах MediaPipe после 0.10.11
.
Установите и импортируйте зависимости следующим образом:
$ python3 -m pip install mediapipe
Используйте библиотеку genai.converter
для преобразования модели:
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
input_ckpt=INPUT_CKPT,
ckpt_format=CKPT_FORMAT,
model_type=MODEL_TYPE,
backend=BACKEND,
output_dir=OUTPUT_DIR,
combine_file_only=False,
vocab_model_file=VOCAB_MODEL_FILE,
output_tflite_file=OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
Чтобы преобразовать модель LoRA, 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: один для базовой модели, а другой для модели LoRA.
Параметр | Описание | Принятые значения |
---|---|---|
input_ckpt | Путь к файлу model.safetensors или pytorch.bin . Обратите внимание, что иногда формат защитных тензоров модели разбивается на несколько файлов, например model-00001-of-00003.safetensors , model-00001-of-00003.safetensors . Вы можете указать шаблон файла, например model*.safetensors . | ПУТЬ |
ckpt_format | Формат файла модели. | {"safetensors", "pytorch"} |
model_type | LLM конвертируется. | {"PHI_2", "FALCON_RW_1B", "STABLELM_4E1T_3B", "GEMMA_2B"} |
backend | Процессор (делегат), используемый для запуска модели. | {"процессор", "графический процессор"} |
output_dir | Путь к выходному каталогу, в котором хранятся файлы весов каждого слоя. | ПУТЬ |
output_tflite_file | Путь к выходному файлу. Например, «model_cpu.bin» или «model_gpu.bin». Этот файл совместим только с API вывода LLM и не может использоваться в качестве обычного файла tflite. | ПУТЬ |
vocab_model_file | Путь к каталогу, в котором хранятся файлы tokenizer.json и tokenizer_config.json . Для Gemma укажите один файл tokenizer.model . | ПУТЬ |
lora_ckpt | Путь к файлу LoRA ckpt ofsafetensors, в котором хранится вес адаптера LoRA. | ПУТЬ |
lora_rank | Целое число, представляющее ранг LoRA ckpt. Требуется для преобразования весов Лоры. Если он не указан, преобразователь предполагает, что веса LoRA отсутствуют. Примечание. Только серверная часть графического процессора поддерживает LoRA. | Целое число |
lora_output_tflite_file | Выходное имя файла tflite для весов LoRA. | ПУТЬ |
Преобразование модели AI Edge
Если вы используете LLM, сопоставленный с моделью TFLite через AI Edge, используйте наш сценарий связывания для создания пакета задач . Процесс объединения упаковывает сопоставленную модель с дополнительными метаданными (например, параметрами токенизатора), необходимыми для выполнения сквозного вывода.
Для процесса объединения моделей требуется пакет 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 | Имя выходного файла пакета задач. | ПУТЬ |
Добавить модель в каталог проекта
Сохраните модель в каталоге вашего проекта:
<dev-project-root>/assets/gemma-2b-it-gpu-int4.bin
Укажите путь к модели с помощью параметра modelAssetPath
объекта baseOptions
:
baseOptions: { modelAssetPath: `/assets/gemma-2b-it-gpu-int4.bin`}
Создать задачу
Используйте одну из функций createFrom...()
API LLM Inference API, чтобы подготовить задачу к выполнению логических выводов. Вы можете использовать функцию createFromModelPath()
с относительным или абсолютным путем к файлу обученной модели. В примере кода используется функция createFromOptions()
. Дополнительные сведения о доступных параметрах конфигурации см. в разделе Параметры конфигурации .
Следующий код демонстрирует, как построить и настроить эту задачу:
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-2b-it-gpu-int4.bin'
},
maxTokens: 1000,
topK: 40,
temperature: 0.8,
randomSeed: 101
});
Варианты конфигурации
Эта задача имеет следующие параметры конфигурации для веб-приложений и приложений JavaScript:
Название опции | Описание | Диапазон значений | Значение по умолчанию |
---|---|---|---|
modelPath | Путь к хранению модели в каталоге проекта. | ПУТЬ | Н/Д |
maxTokens | Максимальное количество токенов (входные токены + выходные токены), которые обрабатывает модель. | Целое число | 512 |
topK | Количество токенов, которые модель учитывает на каждом этапе генерации. Ограничивает прогнозы первыми k наиболее вероятными токенами. | Целое число | 40 |
temperature | Количество случайности, введенной во время генерации. Более высокая температура приводит к большей креативности в сгенерированном тексте, а более низкая температура обеспечивает более предсказуемую генерацию. | Плавать | 0,8 |
randomSeed | Случайное начальное число, используемое при генерации текста. | Целое число | 0 |
loraRanks | Ранги LoRA будут использоваться моделями LoRA во время выполнения. Примечание. Это совместимо только с моделями графических процессоров. | Целочисленный массив | Н/Д |
Подготовьте данные
LLM Inference API принимает текстовые ( string
) данные. Задача выполняет предварительную обработку входных данных, включая токенизацию и предварительную обработку тензоров.
Вся предварительная обработка выполняется в generateResponse()
. Нет необходимости в дополнительной предварительной обработке входного текста.
const inputPrompt = "Compose an email to remind Brett of lunch plans at noon on Saturday.";
Запустите задачу
API вывода LLM использует функцию generateResponse()
для запуска выводов. Для классификации текста это означает возвращение возможных категорий для ввода текста.
Следующий код демонстрирует, как выполнить обработку с помощью модели задачи.
const response = await llmInference.generateResponse(inputPrompt);
document.getElementById('output').textContent = response;
Чтобы транслировать ответ, используйте следующее:
llmInference.generateResponse(
inputPrompt,
(partialResult, done) => {
document.getElementById('output').textContent += partialResult;
});
Результаты обработки и отображения
API вывода LLM возвращает строку, которая включает сгенерированный текст ответа.
Here's a draft you can use:
Subject: Lunch on Saturday Reminder
Hi Brett,
Just a quick reminder about our lunch plans this Saturday at noon.
Let me know if that still works for you.
Looking forward to it!
Best,
[Your Name]
Настройка модели Лоры
API вывода MediaPipe LLM может быть настроен для поддержки адаптации с низким уровнем ранга (LORA) для моделей крупных языков. Используя тонкие модели LORA, разработчики могут настроить поведение LLM в рамках экономически эффективного обучения.
Поддержка LORA API вывода LLM работает для моделей GEMMA-2B и PHI-2 для бэкэнда GPU, с весами LORA, применимыми только к слоям внимания. Эта первоначальная реализация служит экспериментальным API для будущих разработок с планами поддержки большего количества моделей и различных типов слоев в предстоящих обновлениях.
Подготовьте модели Lora
Следуйте инструкциям по HuggingFace, чтобы обучить тонкую настроенную модель LORA на своем собственном наборе данных с поддерживаемыми типами моделей, GEMMA-2B или PHI-2. Модели GEMMA-2B и PHI-2 доступны на HuggingFace в формате Safetensors. Поскольку API вывода LLM поддерживает только LORA на слоях внимания, указывают только слои внимания при создании LoraConfig
под следующим образом:
# For Gemma-2B
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, используя пакет Python MediaPipe. 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 вывода с выводом Web, Android и iOS LLM обновляется для поддержки вывода модели LORA. Web поддерживает Dynamic Lora, которая может переключать различные модели LORA во время выполнения. Android и iOS поддерживают Static Lora, которая использует те же веса Lora в течение срока службы задачи.
Веб поддерживает Dynamic 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, передавая ссылку на модель 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;
});
,API вывода LLM позволяет вам запускать большие языковые модели (LLMS) в браузере для веб -приложений, которые вы можете использовать для выполнения широкого спектра задач, таких как создание текста, получение информации в форме естественного языка и суммирование документов. Задача обеспечивает встроенную поддержку для нескольких моделей с большими текстами в тексте, поэтому вы можете применить новейшие генеративные модели искусственного интеллекта в ваших веб-приложениях.
Вы можете увидеть эту задачу в действии с демонстрацией MediaPipe Studio . Для получения дополнительной информации о возможностях, моделях и параметрах конфигурации этой задачи см. Обзор .
Пример кода
Пример приложения для API вывода LLM предоставляет базовую реализацию этой задачи в JavaScript для вашей ссылки. Вы можете использовать это приложение, чтобы начать создавать собственное приложение для генерации текста.
Вы можете получить доступ к приложению API API вывода LLM на GitHub .
Настраивать
В этом разделе описывается ключевые шаги для настройки вашей среды разработки и кодовых проектов специально для использования API LLM. Для общей информации о настройке среды разработки для использования задач MediaPipe, включая требования к версии платформы, см. Руководство по настройке для Web .
Совместимость браузера
API вывода LLM требует веб -браузера с совместимостью WebGPU. Для полного списка совместимых браузеров см. Совместимость с графическими процессорами .
JavaScript Packages
Код 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>
Модель
API вывода MediaPipe LLM требует обученной модели, которая совместима с этой задачей. Для веб-приложений модель должна быть связана с графическим процессором.
Для получения дополнительной информации о доступных обученных моделях для API вывода LLM см. В разделе модели обзора задач.
Скачать модель
Перед инициализацией API вывода LLM загрузите одну из поддерживаемых моделей и сохраните файл в вашем каталоге проекта:
- GEMMA-2 2B : последняя версия семейства моделей Gemma. Часть семейства легких, современных открытых моделей, построенных из тех же исследований и технологий, используемых для создания моделей Близнецов .
- Gemma 2B : часть семейства легких, современных открытых моделей, построенных из тех же исследований и технологий, используемых для создания моделей Gemini . Хорошо подходит для различных задач генерации текста, включая ответный ответ, суммирование и рассуждения.
- PHI-2 : 2,7 млрд. Модель трансформатора параметров, лучше всего подходящей для формата вопросов, чата и кода.
- Falcon-RW-1B : 1 миллиард параметров причина причинного декодера, обученная 350B токенам RefinedWeb .
- StableLm-3B : 3 миллиарда параметров декодера, предварительно обученная 1-трем токенам разнообразных наборов английского и кода.
Мы рекомендуем использовать GEMMA-2 2B, который доступен на моделях Kaggle . Для получения дополнительной информации о других доступных моделях см. В разделе « Обзор задач».
Конвертировать модель в формат MediaPipe
Нативная модель преобразования
Если вы используете внешнюю LLM (PHI-2, Falcon или StableLm) или некаггенную версию Gemma, используйте наши сценарии конверсии, чтобы форматировать модель для совместимости с MediaPipe.
Процесс преобразования модели требует пакета MediaPipe PYPI. Сценарий конверсии доступен во всех пакетах MediaPipe после 0.10.11
.
Установить и импортировать зависимости со следующим:
$ python3 -m pip install mediapipe
Используйте библиотеку genai.converter
, чтобы преобразовать модель:
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
input_ckpt=INPUT_CKPT,
ckpt_format=CKPT_FORMAT,
model_type=MODEL_TYPE,
backend=BACKEND,
output_dir=OUTPUT_DIR,
combine_file_only=False,
vocab_model_file=VOCAB_MODEL_FILE,
output_tflite_file=OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
Чтобы преобразовать модель LORA, 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.
Параметр | Описание | Принятые ценности |
---|---|---|
input_ckpt | Путь к model.safetensors или файл pytorch.bin . Обратите внимание, что иногда формат Safetensors модели переключается на несколько файлов, например model-00001-of-00003.safetensors , model-00001-of-00003.safetensors . Вы можете указать шаблон файла, например, model*.safetensors . | ПУТЬ |
ckpt_format | Формат файла модели. | {"Safetensors", "pytorch"} |
model_type | LLM преобразован. | {"Phi_2", "falcon_rw_1b", "stablelm_4e1t_3b", "gemma_2b"} |
backend | Процессор (делегат), используемый для запуска модели. | {"CPU", "GPU"} |
output_dir | Путь к выходному каталогу, который размещает файлы веса для каждого слоя. | ПУТЬ |
output_tflite_file | Путь к выходному файлу. Например, "model_cpu.bin" или "model_gpu.bin". Этот файл совместим только с API вывода LLM и не может использоваться в качестве общего файла `tflite. | ПУТЬ |
vocab_model_file | Путь к каталогу, в котором хранится файлы tokenizer.json и tokenizer_config.json . Для Gemma укажите на один tokenizer.model -файл. | ПУТЬ |
lora_ckpt | Путь к файлу Lora CKPT of Safetensors, в котором хранится вес адаптера LORA. | ПУТЬ |
lora_rank | Целое число, представляющее звание Лоры CKPT. Требуется для преобразования весов LORA. Если не предоставлено, то преобразователь предполагает, что нет весов LORA. Примечание: только бэкэнд GPU поддерживает Lora. | Целое число |
lora_output_tflite_file | Выходное имя файла TFLITE для весов LORA. | ПУТЬ |
Преобразование модели AI Edge
Если вы используете LLM, отображаемый с моделью TFLITE через ED Edge, используйте наш скрипт в комплекте для создания комплекта задач . Процесс комплекса содержит отображенную модель с дополнительными метаданными (например, параметрами токенизатора), необходимых для выполнения сквозного вывода.
Процесс объединения модели требует пакета 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 Exported AI Edge. | ПУТЬ |
tokenizer_model | Путь к модели токенизатора предложения. | ПУТЬ |
start_token | Модели конкретный токен начала. Токен начала должен присутствовать в предоставленной модели токенизатора. | НИТЬ |
stop_tokens | Модели конкретные токены остановки. Токены остановки должны присутствовать в модели предоставленной токенизаторы. | Список [String] |
output_filename | Имя исходного файла пакета задач. | ПУТЬ |
Добавить модель в каталог проекта
Храните модель в вашем каталоге проекта:
<dev-project-root>/assets/gemma-2b-it-gpu-int4.bin
Укажите путь модели с помощью параметра объекта baseOptions
modelAssetPath
:
baseOptions: { modelAssetPath: `/assets/gemma-2b-it-gpu-int4.bin`}
Создать задачу
Используйте одну из функций API createFrom...()
чтобы подготовить задачу для выполнения выводов. Вы можете использовать функцию createFromModelPath()
с относительным или абсолютным путем к обученному модели. Пример кода использует функцию createFromOptions()
. Для получения дополнительной информации о доступных параметрах конфигурации см. Параметры конфигурации .
Следующий код демонстрирует, как создать и настроить эту задачу:
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-2b-it-gpu-int4.bin'
},
maxTokens: 1000,
topK: 40,
temperature: 0.8,
randomSeed: 101
});
Варианты конфигурации
Эта задача имеет следующие параметры конфигурации для приложений Web и JavaScript:
Имя опции | Описание | Диапазон значений | Значение по умолчанию |
---|---|---|---|
modelPath | Путь к тому, где модель хранится в каталоге проекта. | ПУТЬ | Н/Д |
maxTokens | Максимальное количество токенов (входные токены + выходные токены) Модель обрабатывает. | Целое число | 512 |
topK | Количество токенов, которые модель рассматривает на каждом этапе генерации. Ограничивает прогнозы до лучших K самых широких токенов. | Целое число | 40 |
temperature | Количество случайности, введенное во время генерации. Более высокая температура приводит к большему творчеству в сгенерированном тексте, в то время как более низкая температура приводит к более предсказуемой генерации. | Плавать | 0,8 |
randomSeed | Случайное семя, используемое во время генерации текста. | Целое число | 0 |
loraRanks | LORA занимает использование моделями LORA во время выполнения. Примечание: это совместимо только с моделями GPU. | Целочисленный массив | Н/Д |
Подготовьте данные
API вывода LLM принимает данные Text ( string
). Задача обрабатывает предварительную обработку ввода данных, включая токенизацию и предварительную обработку тензора.
Вся предварительная обработка обрабатывается в функции generateResponse()
. Нет необходимости в дополнительной предварительной обработке входного текста.
const inputPrompt = "Compose an email to remind Brett of lunch plans at noon on Saturday.";
Запустите задачу
API вывода LLM использует функцию generateResponse()
для запуска выводов. Для классификации текста это означает возвращение возможных категорий для ввода текста.
Следующий код демонстрирует, как выполнить обработку с помощью модели задачи.
const response = await llmInference.generateResponse(inputPrompt);
document.getElementById('output').textContent = response;
Чтобы транслировать ответ, используйте следующее:
llmInference.generateResponse(
inputPrompt,
(partialResult, done) => {
document.getElementById('output').textContent += partialResult;
});
Результаты обработки и отображения
API вывода LLM возвращает строку, которая включает сгенерированный текст ответа.
Here's a draft you can use:
Subject: Lunch on Saturday Reminder
Hi Brett,
Just a quick reminder about our lunch plans this Saturday at noon.
Let me know if that still works for you.
Looking forward to it!
Best,
[Your Name]
Настройка модели Лоры
API вывода MediaPipe LLM может быть настроен для поддержки адаптации с низким уровнем ранга (LORA) для моделей крупных языков. Используя тонкие модели LORA, разработчики могут настроить поведение LLM в рамках экономически эффективного обучения.
Поддержка LORA API вывода LLM работает для моделей GEMMA-2B и PHI-2 для бэкэнда GPU, с весами LORA, применимыми только к слоям внимания. Эта первоначальная реализация служит экспериментальным API для будущих разработок с планами поддержки большего количества моделей и различных типов слоев в предстоящих обновлениях.
Подготовьте модели Lora
Следуйте инструкциям по HuggingFace, чтобы обучить тонкую настроенную модель LORA на своем собственном наборе данных с поддерживаемыми типами моделей, GEMMA-2B или PHI-2. Модели GEMMA-2B и PHI-2 доступны на HuggingFace в формате Safetensors. Поскольку API вывода LLM поддерживает только LORA на слоях внимания, указывают только слои внимания при создании LoraConfig
под следующим образом:
# For Gemma-2B
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, используя пакет Python MediaPipe. 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 вывода с выводом Web, Android и iOS LLM обновляется для поддержки вывода модели LORA. Web поддерживает Dynamic Lora, которая может переключать различные модели LORA во время выполнения. Android и iOS поддерживают Static Lora, которая использует те же веса Lora в течение срока службы задачи.
Веб поддерживает Dynamic 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, передавая ссылку на модель 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;
});