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

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.

Начать

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

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

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

Функции

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

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

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

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

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

Модели

API LLM 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 известна своими современными навыками рассуждения среди моделей своего класса.

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

Модели 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 параметров и открытые веса. Эта модель хорошо подходит для различных задач по созданию текста, включая ответы на вопросы, обобщение и рассуждение.

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

Модели 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 поддерживается только в Интернете.

Скачать Джемма 7Б

Модель Gemma 7B выпускается в одном варианте:

  • gemma-1.1-7b-it-gpu-int8 : 8-битная модель Gemma 7B с совместимостью с графическим процессором.

После загрузки Gemma 7B с Kaggle Models модель уже имеет формат, подходящий для использования с MediaPipe.

Сокол 1Б

Falcon-1B — это модель причинного декодера с 1 миллиардом параметров, обученная на 350 миллиардах токенов RefinedWeb .

Скачать Сокол 1Б

API-интерфейс LLM Inference требует загрузки и хранения локально следующих файлов:

  • tokenizer.json
  • tokenizer_config.json
  • pytorch_model.bin

После загрузки файлов модели Falcon модель готова к преобразованию в формат MediaPipe с помощью сценария преобразования. Выполните действия, описанные в разделе «Скрипт преобразования для поддерживаемых моделей» .

КонюшняLM 3B

StableLM-3B — это языковая модель с 3 миллиардами параметров, предназначенная только для декодера, предварительно обученная на 1 триллионе токенов различных наборов данных английского языка и кодов для 4 эпох.

Скачать СтабильныйLM 3B

API-интерфейс LLM Inference требует загрузки и хранения локально следующих файлов:

  • tokenizer.json
  • tokenizer_config.json
  • model.safetensors

После загрузки файлов модели StableLM модель готова к преобразованию в формат MediaPipe с помощью сценария преобразования. Выполните действия, описанные в разделе «Скрипт преобразования для поддерживаемых моделей» .

Фи-2

Phi-2 — это модель Трансформера с 2,7 миллиардами параметров. Он обучался с использованием различных синтетических текстов НЛП и отфильтрованных веб-сайтов. Модель лучше всего подходит для подсказок с использованием формата «Вопрос-Ответ», чата и кода.

Скачать Фи-2

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-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 включает в себя следующее:

  1. Загрузите контрольные точки модели PyTorch.
  2. Используйте AI Edge Torch Generative API для создания, преобразования и квантования модели в формат файла, совместимый с MediaPipe ( .tflite ).
  3. Создайте пакет задач ( .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() что и в базовой модели.