API вывода LLM позволяет запускать большие языковые модели (LLM) полностью на устройстве для приложений iOS, которые можно использовать для выполнения широкого спектра задач, таких как генерация текста, получение информации в форме естественного языка и обобщение документов. Задача обеспечивает встроенную поддержку нескольких больших языковых моделей преобразования текста в текст, поэтому вы можете применять новейшие генеративные модели искусственного интеллекта на устройстве к своим приложениям iOS.
Задача поддерживает следующие варианты 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.
Вы можете увидеть эту задачу в действии с помощью демо-версии MediaPipe Studio . Дополнительные сведения о возможностях, моделях и параметрах конфигурации этой задачи см. в разделе Обзор .
Пример кода
Пример кода задач MediaPipe — это базовая реализация приложения LLM Inference API для iOS. Вы можете использовать это приложение в качестве отправной точки для своего собственного приложения для iOS или обращаться к нему при изменении существующего приложения. Пример кода LLM Inference API размещен на GitHub .
Загрузите код
Следующие инструкции показывают, как создать локальную копию кода примера с помощью инструмента командной строки git .
Чтобы загрузить пример кода:
Клонируйте репозиторий git, используя следующую команду:
git clone https://github.com/google-ai-edge/mediapipe-samples
При желании настройте свой экземпляр git на использование разреженной проверки, чтобы у вас были только файлы для примера приложения LLM Inference API:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/llm_inference/ios/
После создания локальной версии примера кода вы можете установить библиотеку задач MediaPipe, открыть проект с помощью Xcode и запустить приложение. Инструкции см. в Руководстве по установке для iOS .
Настраивать
В этом разделе описаны ключевые шаги по настройке среды разработки и проектов кода для использования LLM Inference API. Общие сведения о настройке среды разработки для использования задач MediaPipe, включая требования к версии платформы, см. в руководстве по настройке для iOS .
Зависимости
LLM Inference API использует библиотеку MediaPipeTasksGenai
, которую необходимо установить с помощью CocoaPods. Библиотека совместима с приложениями Swift и Objective-C и не требует дополнительной настройки для конкретного языка.
Инструкции по установке CocoaPods на macOS см. в руководстве по установке CocoaPods . Инструкции о том, как создать Podfile
с необходимыми модулями для вашего приложения, см. в разделе Использование CocoaPods .
Добавьте модуль MediaPipeTasksGenai
в Podfile
используя следующий код:
target 'MyLlmInferenceApp' do
use_frameworks!
pod 'MediaPipeTasksGenAI'
pod 'MediaPipeTasksGenAIC'
end
Если ваше приложение включает в себя цели модульного тестирования, обратитесь к Руководству по настройке для iOS для получения дополнительной информации о настройке вашего Podfile
.
Модель
Для задачи MediaPipe LLM Inference API требуется обученная модель, совместимая с этой задачей. Дополнительную информацию о доступных обученных моделях для LLM Inference API см. в разделе «Модели» обзора задач.
Скачать модель
Загрузите модель и добавьте ее в каталог вашего проекта с помощью Xcode. Инструкции по добавлению файлов в проект Xcode см. в разделе Управление файлами и папками в проекте Xcode .
Перед инициализацией API вывода LLM загрузите одну из поддерживаемых моделей и сохраните файл в каталоге вашего проекта:
- Gemma-2 2B : Последняя версия моделей семейства Gemma. Часть семейства легких современных открытых моделей, созданных на основе тех же исследований и технологий, которые использовались при создании моделей Gemini .
- Gemma 2B : часть семейства легких современных открытых моделей, созданных на основе тех же исследований и технологий, которые использовались при создании моделей Gemini . Хорошо подходит для различных задач по созданию текста, включая ответы на вопросы, обобщение и рассуждения.
- Phi-2 : модель преобразователя с 2,7 миллиардами параметров, лучше всего подходит для формата вопросов-ответов, чата и кода.
- Falcon-RW-1B : модель причинного декодера с 1 миллиардом параметров, обученная на 350 миллиардах токенов RefinedWeb .
- StableLM-3B : языковая модель только для декодера с 3 миллиардами параметров, предварительно обученная на 1 триллионе токенов различных наборов данных английского языка и кода.
В дополнение к поддерживаемым моделям вы можете использовать Google AI Edge Torch для экспорта моделей PyTorch в модели LiteRT ( tflite
) с мультиподписью. Дополнительную информацию см. в разделе Генеративный преобразователь Torch для моделей PyTorch .
Мы рекомендуем использовать Gemma-2 2B, который доступен на Kaggle Models . Дополнительную информацию о других доступных моделях см. в разделе «Модели обзора задач».
Преобразование модели в формат 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. Чтобы узнать, как конвертировать другие модели, см. раздел «Преобразование модели» .
Создать задачу
Вы можете создать задачу LLM Inference API, вызвав один из ее инициализаторов. Инициализатор LlmInference(options:)
устанавливает значения для параметров конфигурации.
Если вам не нужен API вывода LLM, инициализированный с настраиваемыми параметрами конфигурации, вы можете использовать инициализатор LlmInference(modelPath:)
для создания API вывода LLM с параметрами по умолчанию. Дополнительные сведения о параметрах конфигурации см. в разделе Обзор конфигурации .
Следующий код демонстрирует, как создать и настроить эту задачу.
import MediaPipeTasksGenai
let modelPath = Bundle.main.path(forResource: "model",
ofType: "bin")
let options = LlmInferenceOptions()
options.baseOptions.modelPath = modelPath
options.maxTokens = 1000
options.topk = 40
options.temperature = 0.8
options.randomSeed = 101
let llmInference = try LlmInference(options: options)
Варианты конфигурации
Эта задача имеет следующие параметры конфигурации для приложений iOS:
Название опции | Описание | Диапазон значений | Значение по умолчанию |
---|---|---|---|
modelPath | Путь к хранению модели в каталоге проекта. | ПУТЬ | Н/Д |
maxTokens | Максимальное количество токенов (входные токены + выходные токены), которые обрабатывает модель. | Целое число | 512 |
topk | Количество токенов, которые модель учитывает на каждом этапе генерации. Ограничивает прогнозы первыми k наиболее вероятными токенами. | Целое число | 40 |
temperature | Количество случайности, введенной во время генерации. Более высокая температура приводит к большей креативности в сгенерированном тексте, а более низкая температура обеспечивает более предсказуемую генерацию. | Плавать | 0,8 |
randomSeed | Случайное начальное число, используемое при генерации текста. | Целое число | 0 |
loraPath | Абсолютный путь к модели LoRA локально на устройстве. Примечание. Это совместимо только с моделями графических процессоров. | ПУТЬ | Н/Д |
Подготовьте данные
LLM Inference API работает с текстовыми данными. Задача выполняет предварительную обработку входных данных, включая токенизацию и предварительную обработку тензоров.
Вся предварительная обработка выполняется в generateResponse(inputText:)
. Предварительная дополнительная обработка входного текста не требуется.
let inputPrompt = "Compose an email to remind Brett of lunch plans at noon on Saturday."
Запустить задачу
Чтобы запустить API вывода LLM, используйте generateResponse(inputText:)
. API вывода LLM возвращает возможные категории входного текста.
let result = try LlmInference.generateResponse(inputText: inputPrompt)
Для потоковой передачи ответа используйте generateResponseAsync(inputText:)
.
let resultStream = LlmInference.generateResponseAsync(inputText: inputPrompt)
do {
for try await partialResult in resultStream {
print("\(partialResult)")
}
print("Done")
}
catch {
print("Response error: '\(error)")
}
Обработка и отображение результатов
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 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.
iOS поддерживает статический LoRA во время инициализации. Чтобы загрузить модель LoRA, пользователи указывают путь к модели LoRA, а также базовый LLM.import MediaPipeTasksGenai
let modelPath = Bundle.main.path(forResource: "model",
ofType: "bin")
let loraPath= Bundle.main.path(forResource: "lora_model",
ofType: "bin")
let options = LlmInferenceOptions()
options.modelPath = modelPath
options.maxTokens = 1000
options.topk = 40
options.temperature = 0.8
options.randomSeed = 101
options.loraPath = loraPath
let llmInference = try LlmInference(options: options)
Чтобы запустить вывод LLM с помощью LoRA, используйте те же методыgenerateResponse generateResponse()
generateResponseAsync()
что и в базовой модели.