API LLM Inference позволяет запускать большие языковые модели (LLM) полностью на устройстве, которые можно использовать для выполнения широкого спектра задач, таких как генерация текста, получение информации в форме естественного языка и обобщение документов. Задача обеспечивает встроенную поддержку нескольких больших языковых моделей преобразования текста в текст, поэтому вы можете применять новейшие генеративные модели искусственного интеллекта на устройстве к своим приложениям и продуктам.
Задача поддерживает следующие варианты Gemma : Gemma-2 2B, Gemma 2B и Gemma 7B. Gemma — это семейство легких современных открытых моделей, созданных на основе тех же исследований и технологий, которые использовались при создании моделей Gemini . Он также поддерживает следующие внешние модели: Phi-2 , Falcon-RW-1B и StableLM-3B .
Помимо моделей, поддерживаемых изначально, пользователи могут сопоставлять другие модели с помощью предложений Google AI Edge (включая сопоставление моделей PyTorch ). Это позволяет пользователям экспортировать сопоставленную модель в модели TensorFlow Lite с несколькими подписями, которые объединяются с параметрами токенизатора для создания пакета задач.
Начать
Начните использовать эту задачу, следуя одному из этих руководств по реализации для вашей целевой платформы. Эти руководства для конкретных платформ покажут вам базовую реализацию этой задачи с примерами кода, использующими доступную модель и рекомендуемые параметры конфигурации:
Интернет :
Андроид :
iOS
Подробности задачи
В этом разделе описаны возможности, входы, выходы и параметры конфигурации этой задачи.
Функции
API LLM Inference содержит следующие ключевые функции:
- Генерация текста в текст — генерация текста на основе входного текстового приглашения.
- Выбор LLM . Применяйте несколько моделей, чтобы адаптировать приложение для конкретных случаев использования. Вы также можете переобучить модель и применить к ней собственные веса.
- Поддержка LoRA . Расширьте и настройте возможности LLM с помощью модели LoRA либо путем обучения на всем наборе данных, либо путем использования готовых готовых моделей LoRA из сообщества с открытым исходным кодом (только собственные модели).
Входные данные задачи | Результаты задачи |
---|---|
API вывода LLM принимает следующие входные данные:
| API вывода LLM выводит следующие результаты:
|
Варианты конфигурации
Эта задача имеет следующие параметры конфигурации:
Название опции | Описание | Диапазон значений | Значение по умолчанию |
---|---|---|---|
modelPath | Путь к хранению модели в каталоге проекта. | ПУТЬ | Н/Д |
maxTokens | Максимальное количество токенов (входные токены + выходные токены), которые обрабатывает модель. | Целое число | 512 |
topK | Количество токенов, которые модель учитывает на каждом этапе генерации. Ограничивает прогнозы топ-k наиболее вероятными токенами. | Целое число | 40 |
temperature | Количество случайности, введенной во время генерации. Более высокая температура приводит к большей креативности сгенерированного текста, а более низкая температура обеспечивает более предсказуемую генерацию. | Плавать | 0,8 |
randomSeed | Случайное начальное число, используемое при генерации текста. | Целое число | 0 |
loraPath | Абсолютный путь к модели LoRA локально на устройстве. Примечание. Это совместимо только с моделями графических процессоров. | ПУТЬ | Н/Д |
resultListener | Настраивает прослушиватель результатов на асинхронное получение результатов. Применимо только при использовании метода асинхронной генерации. | Н/Д | Н/Д |
errorListener | Устанавливает дополнительный прослушиватель ошибок. | Н/Д | Н/Д |
Модели
API-интерфейс LLM Inference содержит встроенную поддержку разделяемых больших языковых моделей преобразования текста в текст, которые оптимизированы для работы в браузерах и мобильных устройствах. Эти облегченные модели можно загрузить, чтобы выполнять выводы полностью на устройстве.
Прежде чем инициализировать 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 с 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 с Kaggle Models модель уже имеет формат, подходящий для использования с задачами MediaPipe.
Джемма 7Б
Gemma 7B — более крупная модель Gemma с параметрами 7B и открытым весом. Модель более эффективна для решения различных задач по созданию текста, включая ответы на вопросы, обобщение и рассуждения. Gemma 7B поддерживается только в Интернете.
Модель Gemma 7B выпускается в одном варианте:
- gemma-1.1-7b-it-gpu-int8 : 8-битная модель Gemma 7B с совместимостью с графическим процессором.
После загрузки Gemma с Kaggle Models модель уже имеет формат, подходящий для использования с MediaPipe.
Сокол 1Б
Falcon-1B — это модель причинного декодера с 1 миллиардом параметров, обученная на 350 миллиардах токенов RefinedWeb .
API-интерфейс LLM Inference требует загрузки и хранения локально следующих файлов:
-
tokenizer.json
-
tokenizer_config.json
-
pytorch_model.bin
После загрузки файлов модели Falcon модель готова к преобразованию в формат MediaPipe. Выполните действия, описанные в разделе Преобразование модели в формат MediaPipe .
КонюшняLM 3B
StableLM-3B — это языковая модель с 3 миллиардами параметров, предназначенная только для декодера, предварительно обученная на 1 триллионе токенов различных наборов данных английского языка и кодов для 4 эпох.
API-интерфейс LLM Inference требует загрузки и хранения локально следующих файлов:
-
tokenizer.json
-
tokenizer_config.json
-
model.safetensors
После загрузки файлов модели StableLM модель готова к преобразованию в формат MediaPipe. Выполните действия, описанные в разделе Преобразование модели в формат 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. Выполните действия, описанные в разделе Преобразование модели в формат MediaPipe .
Экспортированные модели AI Edge
AI Edge — это предложение Google, которое позволяет конвертировать модели, сопоставленные пользователем, в модели TensorFlow Lite с несколькими подписями. Более подробную информацию о сопоставлении и экспорте моделей можно найти на странице AI Edge Torch на GitHub .
После экспорта модели в формат TFLite модель готова к преобразованию в формат MediaPipe. Дополнительные сведения см. в разделе Преобразование модели в формат MediaPipe .
Преобразование модели в формат 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 | Имя выходного файла пакета задач. | ПУТЬ |
Кастомизация ЛоРА
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 в течение всего времени существования задачи.
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()
что и в базовой модели.