API LLM Inference позволяет запускать большие языковые модели (LLM) полностью на устройстве, которые можно использовать для выполнения широкого спектра задач, таких как генерация текста, получение информации в форме естественного языка и обобщение документов. Задача обеспечивает встроенную поддержку нескольких больших языковых моделей преобразования текста в текст, поэтому вы можете применять новейшие генеративные модели искусственного интеллекта на устройстве к своим приложениям и продуктам.
Задача поддерживает следующие варианты Gemma : Gemma-2 2B, Gemma 2B и Gemma 7B. Gemma — это семейство легких современных открытых моделей, созданных на основе тех же исследований и технологий, которые использовались при создании моделей Gemini . Он также поддерживает следующие внешние модели: Phi-2 , Falcon-RW-1B и StableLM-3B .
В дополнение к поддерживаемым моделям вы можете использовать Google AI Edge Torch для экспорта моделей PyTorch в модели LiteRT ( tflite
) с несколькими подписями, которые связаны с параметрами токенизатора для создания пакетов задач, совместимых с API вывода LLM. Модели, преобразованные с помощью AI Edge Torch, могут работать только на внутреннем процессоре и поэтому ограничены Android и iOS.
Начать
Начните использовать эту задачу, следуя одному из этих руководств по реализации для вашей целевой платформы. Эти руководства для конкретных платформ проведут вас через базовую реализацию этой задачи с примерами кода, использующими доступную модель и рекомендуемые параметры конфигурации:
Интернет :
Андроид :
iOS
Подробности задачи
В этом разделе описаны возможности, входы, выходы и параметры конфигурации этой задачи.
Функции
API LLM Inference содержит следующие ключевые функции:
- Генерация текста в текст — генерация текста на основе входного текстового приглашения.
- Выбор LLM . Применяйте несколько моделей, чтобы адаптировать приложение для конкретных случаев использования. Вы также можете переобучить модель и применить к ней индивидуальные веса.
- Поддержка 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 Inference поддерживает множество больших языковых моделей преобразования текста в текст, включая встроенную поддержку нескольких моделей, оптимизированных для работы в браузерах и мобильных устройствах. Эти облегченные модели можно использовать для выполнения выводов полностью на устройстве.
Прежде чем инициализировать API вывода LLM, загрузите модель и сохраните файл в каталоге вашего проекта. Вы можете использовать предварительно преобразованную модель или преобразовать модель в формат, совместимый с MediaPipe.
API LLM Inference совместим с двумя категориями типов моделей, некоторые из которых требуют преобразования моделей. Используйте таблицу, чтобы определить метод необходимых шагов для вашей модели.
Модели | Метод преобразования | Совместимые платформы | Тип файла | |
---|---|---|---|---|
Поддерживаемые модели | Джемма 2Б, Джемма 7Б, Джемма-2 2Б, Фи-2, СтабилЛМ, Сокол | МедиаПайп | Android, iOS, веб | .bin |
Другие модели PyTorch | Все модели PyTorch LLM | Генеративная библиотека AI Edge Torch | Андроид, iOS | .задача |
Мы размещаем преобразованные файлы .bin
для Gemma 2B, Gemma 7B и Gemma-2 2B на Kaggle. Эти модели можно развертывать напрямую с помощью нашего API вывода LLM. Чтобы узнать, как конвертировать другие модели, см. раздел «Преобразование модели» .
Джемма-2 2Б
Gemma-2 2B — новейшая модель в семействе легких современных открытых моделей Gemma, созданная на основе тех же исследований и технологий, которые использовались при создании моделей Gemini . Модель содержит 2B параметров и открытые веса. Джемма-2 2B известна своими современными навыками рассуждения среди моделей своего класса.
Модели Gemma-2 2B доступны в следующих вариантах:
- gemma2-2b-it-cpu-int8 : 8-битная модель Gemma-2 2B с совместимостью с ЦП.
- gemma2-2b-it-gpu-int8 : 8-битная модель Gemma-2 2B с совместимостью с графическим процессором.
Вы также можете настроить модель и добавить новые веса перед добавлением ее в приложение. Дополнительную информацию о настройке и настройке Gemma см. в разделе Настройка Gemma . После загрузки Gemma-2 2B с Kaggle Models модель уже имеет формат, подходящий для использования с задачами MediaPipe.
Джемма 2Б
Gemma 2B является частью семейства легких современных открытых моделей, созданных на основе тех же исследований и технологий, которые использовались при создании моделей Gemini . Модель содержит 2B параметров и открытые веса. Эта модель хорошо подходит для различных задач по созданию текста, включая ответы на вопросы, обобщение и рассуждение.
Модели Gemma 2B доступны в следующих вариантах:
- gemma-2b-it-cpu-int4 : 4-битная модель Gemma 2B, совместимая с ЦП.
- gemma-2b-it-cpu-int8 : 8-битная модель Gemma 2B, совместимая с ЦП.
- gemma-2b-it-gpu-int4 : 4-битная модель Gemma 2B с совместимостью с графическим процессором.
- gemma-2b-it-gpu-int8 : 8-битная модель Gemma 2B с совместимостью с графическим процессором.
Вы также можете настроить модель и добавить новые веса перед добавлением ее в приложение. Дополнительную информацию о настройке и настройке Gemma см. в разделе Настройка Gemma . После загрузки Gemma 2B с Kaggle Models модель уже имеет формат, подходящий для использования с задачами MediaPipe.
Джемма 7Б
Gemma 7B — более крупная модель Gemma с параметрами 7B и открытым весом. Модель более эффективна для решения различных задач по созданию текста, включая ответы на вопросы, обобщение и рассуждения. Gemma 7B поддерживается только в Интернете.
Модель Gemma 7B выпускается в одном варианте:
- gemma-1.1-7b-it-gpu-int8 : 8-битная модель Gemma 7B с совместимостью с графическим процессором.
После загрузки Gemma 7B с Kaggle Models модель уже имеет формат, подходящий для использования с MediaPipe.
Сокол 1Б
Falcon-1B — это модель причинного декодера с 1 миллиардом параметров, обученная на 350 миллиардах токенов RefinedWeb .
API-интерфейс LLM Inference требует загрузки и хранения локально следующих файлов:
-
tokenizer.json
-
tokenizer_config.json
-
pytorch_model.bin
После загрузки файлов модели Falcon модель готова к преобразованию в формат MediaPipe с помощью сценария преобразования. Выполните действия, описанные в разделе «Скрипт преобразования для поддерживаемых моделей» .
КонюшняLM 3B
StableLM-3B — это языковая модель с 3 миллиардами параметров, предназначенная только для декодера, предварительно обученная на 1 триллионе токенов различных наборов данных английского языка и кодов для 4 эпох.
API-интерфейс LLM Inference требует загрузки и хранения локально следующих файлов:
-
tokenizer.json
-
tokenizer_config.json
-
model.safetensors
После загрузки файлов модели StableLM модель готова к преобразованию в формат MediaPipe с помощью сценария преобразования. Выполните действия, описанные в разделе «Скрипт преобразования для поддерживаемых моделей» .
Фи-2
Phi-2 — это модель Трансформера с 2,7 миллиардами параметров. Он обучался с использованием различных синтетических текстов НЛП и отфильтрованных веб-сайтов. Модель лучше всего подходит для подсказок с использованием формата «Вопрос-Ответ», чата и кода.
API-интерфейс LLM Inference требует загрузки и хранения локально следующих файлов:
-
tokenizer.json
-
tokenizer_config.json
-
model-00001-of-00002.safetensors
-
model-00002-of-00002.safetensors
После загрузки файлов модели Phi-2 модель готова к преобразованию в формат MediaPipe с помощью сценария преобразования. Выполните действия, описанные в разделе «Скрипт преобразования для поддерживаемых моделей» .
Генеративные модели PyTorch
Генеративные модели PyTorch можно преобразовать в формат, совместимый с MediaPipe, с помощью AI Edge Torch Generative API . Вы можете использовать API для преобразования моделей PyTorch в модели LiteRT (TensorFlow Lite) с несколькими подписями. Более подробную информацию о сопоставлении и экспорте моделей можно найти на странице AI Edge Torch на GitHub .
Если вы собираетесь использовать AI Edge Torch Generative API для преобразования модели PyTorch, выполните действия, описанные в разделе « Генераторный преобразователь Torch для моделей PyTorch» .
Преобразование модели
API вывода MediaPipe LLM позволяет запускать на устройстве широкий спектр больших языковых моделей. Сюда входят модели, предварительно преобразованные в формат, совместимый с MediaPipe, а также другие модели, которые можно преобразовать с помощью сценария преобразования или библиотеки AI Edge Torch.
API вывода LLM принимает модели в форматах файлов .bin
и .task
. Предварительно преобразованные модели и модели, преобразованные с помощью сценария преобразования, будут представлять собой файлы .bin
, а модели, преобразованные с помощью библиотеки AI Edge Torch, — файлы .task
. Не изменяйте вручную форматы файлов преобразованных моделей.
API вывода LLM содержит три пути преобразования модели:
- Предварительно конвертированные модели (Gemma 2B, Gemma 7B, Gemma-2 2B): конвертация не требуется.
- Поддерживаемые модели (Phi-2, StableLM, Falcon): сценарий преобразования MediaPipe.
- Другие модели PyTorch (все модели PyTorch LLM): Генеративный API AI Edge Torch.
Предварительно конвертированные модели
Модели Gemma-2 2B, Gemma 2B и Gemma 7B доступны в виде предварительно конвертированных моделей в формате MediaPipe. Эти модели не требуют от пользователя каких-либо дополнительных шагов преобразования и могут запускаться как есть с помощью API вывода LLM.
Вы можете скачать Gemma-2 2B с Kaggle Models:
- gemma2-2b-it-cpu-int8 : 8-битная модель Gemma-2 2B с совместимостью с ЦП.
- gemma2-2b-it-gpu-int8 : 8-битная модель Gemma-2 2B с совместимостью с графическим процессором.
Вы можете скачать варианты Gemma 2B с Kaggle Models:
- gemma-2b-it-cpu-int4 : 4-битная модель Gemma 2B, совместимая с ЦП.
- gemma-2b-it-cpu-int8 : 8-битная модель Gemma 2B, совместимая с ЦП.
- gemma-2b-it-gpu-int4 : 4-битная модель Gemma 2B с совместимостью с графическим процессором.
- gemma-2b-it-gpu-int8 : 8-битная модель Gemma 2B с совместимостью с графическим процессором.
Вы можете скачать Gemma 7B с Kaggle Models:
- gemma-1.1-7b-it-gpu-int8 : 8-битная модель Gemma 7B с совместимостью с графическим процессором.
Более подробную информацию о моделях Gemma можно найти в документации на Gemma-2 2B , Gemma 2B и Gemma 7B .
Скрипт преобразования для поддерживаемых моделей
Пакет MediaPipe предлагает сценарий преобразования для преобразования следующих внешних моделей в формат, совместимый с MediaPipe:
Дополнительную информацию о поддерживаемых внешних моделях см. в документации по Falcon 1B , StableLM 3B и Phi-2 .
Для процесса преобразования модели требуется пакет 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. | ПУТЬ |
Генераторный преобразователь Torch для моделей PyTorch
Генеративные модели PyTorch можно преобразовать в формат, совместимый с MediaPipe, с помощью AI Edge Torch Generative API . Вы можете использовать API для создания, преобразования и квантования LLM PyTorch для использования с API вывода LLM. Генеративный преобразователь Torch преобразует только для процессора и требует компьютера с Linux и оперативной памятью не менее 64 ГБ.
Преобразование модели PyTorch с помощью AI Edge Torch Generative API включает в себя следующее:
- Загрузите контрольные точки модели PyTorch.
- Используйте AI Edge Torch Generative API для создания, преобразования и квантования модели в формат файла, совместимый с MediaPipe (
.tflite
). - Создайте пакет задач (
.task
) из файла tflite и токенизатора модели.
Чтобы создать пакет задач, используйте сценарий объединения для создания пакета задач . Процесс объединения упаковывает сопоставленную модель с дополнительными метаданными (например, параметрами токенизатора), необходимыми для выполнения сквозного вывода.
Для процесса объединения моделей требуется пакет 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 | Имя выходного файла пакета задач. | ПУТЬ |
Кастомизация ЛоРА
API вывода Mediapipe LLM можно настроить для поддержки низкоранговой адаптации (LoRA) для больших языковых моделей. Используя точно настроенные модели LoRA, разработчики могут настраивать поведение LLM с помощью экономически эффективного процесса обучения.Поддержка LoRA API-интерфейса LLM Inference работает для всех вариантов Gemma и моделей Phi-2 для серверной части графического процессора, при этом веса LoRA применимы только к уровням внимания. Эта первоначальная реализация служит экспериментальным API для будущих разработок, и в будущих обновлениях планируется поддерживать больше моделей и различных типов слоев.
Подготовьте модели LoRA
Следуйте инструкциям на HuggingFace, чтобы обучить точно настроенную модель LoRA на вашем собственном наборе данных с поддерживаемыми типами моделей, Gemma или Phi-2. Модели Gemma-2 2B , Gemma 2B и Phi-2 доступны на HuggingFace в формате защитных тензоров. Поскольку API LLM Inference поддерживает 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 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.
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 generateResponse()
generateResponseAsync()
что и в базовой модели.