API LLM Inference позволяет запускать большие языковые модели (LLM) полностью на устройстве, которые можно использовать для выполнения широкого спектра задач, таких как генерация текста, получение информации в форме естественного языка и обобщение документов. Задача обеспечивает встроенную поддержку нескольких больших языковых моделей преобразования текста в текст, поэтому вы можете применять новейшие генеративные модели искусственного интеллекта на устройстве к своим приложениям и продуктам.
Задача поддерживает Gemma 2B и 7B, входящие в семейство легких современных открытых моделей, созданных на основе тех же исследований и технологий, которые использовались при создании моделей 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 наиболее вероятными токенами. При настройке topK вы также должны установить значение для randomSeed . | Целое число | 40 |
temperature | Количество случайности, введенной во время генерации. Более высокая температура приводит к большей креативности в сгенерированном тексте, а более низкая температура обеспечивает более предсказуемую генерацию. При настройке temperature вы также должны установить значение для randomSeed . | Плавать | 0,8 |
randomSeed | Случайное начальное число, используемое при генерации текста. | Целое число | 0 |
loraPath | Абсолютный путь к модели LoRA локально на устройстве. Примечание. Это совместимо только с моделями графических процессоров. | ПУТЬ | Н/Д |
resultListener | Настраивает прослушиватель результатов на асинхронное получение результатов. Применимо только при использовании метода асинхронной генерации. | Н/Д | Н/Д |
errorListener | Устанавливает дополнительный прослушиватель ошибок. | Н/Д | Н/Д |
Модели
API-интерфейс LLM Inference содержит встроенную поддержку разделяемых больших языковых моделей преобразования текста в текст, которые оптимизированы для работы в браузерах и мобильных устройствах. Эти облегченные модели можно загрузить, чтобы выполнять выводы полностью на устройстве.
Прежде чем инициализировать API вывода LLM, загрузите одну из поддерживаемых моделей и сохраните файл в каталоге вашего проекта.
Джемма 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.
Если вы загружаете Gemma 2B с сайта Hugging Face , вам необходимо преобразовать модель в формат, совместимый с MediaPipe. API LLM Inference требует загрузки и преобразования следующих файлов:
-
model-00001-of-00002.safetensors
-
model-00002-of-00002.safetensors
-
tokenizer.json
-
tokenizer_config.json
Джемма 7Б
Gemma 7B — более крупная модель Gemma с параметрами 7B и открытым весом. Модель более эффективна для решения различных задач по созданию текста, включая ответы на вопросы, обобщение и рассуждения. Gemma 7B поддерживается только в Интернете.
Модель Gemma 7B выпускается в одном варианте:
- gemma-1.1-7b-it-gpu-int8 : 8-битная модель Gemma 7B с совместимостью с графическим процессором.
Если вы загружаете Gemma 7B с сайта Hugging Face , вам необходимо преобразовать модель в формат, совместимый с MediaPipe. API-интерфейс LLM Inference требует загрузки и преобразования следующих файлов:
-
model-00001-of-00004.safetensors
-
model-00002-of-00004.safetensors
-
model-00003-of-00004.safetensors
-
model-00004-of-00004.safetensors
-
tokenizer.json
-
tokenizer_config.json
Сокол 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 . Обратите внимание, что иногда формат защитных тензоров модели разбивается на несколько файлов, например 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()
что и в базовой модели.