API LLM Inference позволяет запускать большие языковые модели (LLM) полностью на устройстве для приложений Android, которые можно использовать для выполнения широкого спектра задач, таких как генерация текста, получение информации в форме естественного языка и обобщение документов. Задача обеспечивает встроенную поддержку нескольких больших языковых моделей преобразования текста в текст, поэтому вы можете применять новейшие генеративные модели искусственного интеллекта на устройстве к своим приложениям Android.
Чтобы быстро добавить API-интерфейс LLM Inference в свое приложение для Android, следуйте инструкциям в кратком руководстве . Базовый пример приложения Android, использующего LLM Inference API, см. в примере приложения . Для более глубокого понимания того, как работает API LLM Inference, обратитесь к разделам «Параметры конфигурации» , «Преобразование модели » и «Настройка LoRA» .
Вы можете увидеть эту задачу в действии с помощью демо-версии MediaPipe Studio . Дополнительные сведения о возможностях, моделях и параметрах конфигурации этой задачи см. в разделе Обзор .
Быстрый старт
Выполните следующие шаги, чтобы добавить API вывода LLM в свое приложение Android. API-интерфейс LLM Inference оптимизирован для высокопроизводительных устройств Android, таких как Pixel 8 и Samsung S23 или более поздних версий, и не обеспечивает надежной поддержки эмуляторов устройств.
Добавить зависимости
API вывода LLM использует библиотеку com.google.mediapipe:tasks-genai
. Добавьте эту зависимость в файл build.gradle
вашего приложения Android:
dependencies {
implementation 'com.google.mediapipe:tasks-genai:0.10.22'
}
Для устройств с Android 12 (API 31) или более поздней версии добавьте зависимость от собственной библиотеки OpenCL. Дополнительную информацию см. в документации по тегу uses-native-library
.
Добавьте следующие теги uses-native-library
в файл AndroidManifest.xml
:
<uses-native-library android:name="libOpenCL.so" android:required="false"/>
<uses-native-library android:name="libOpenCL-car.so" android:required="false"/>
<uses-native-library android:name="libOpenCL-pixel.so" android:required="false"/>
Скачать модель
Загрузите Gemma-3 1B в 4-битном квантованном формате с сайта Hugging Face . Дополнительную информацию о доступных моделях см. в документации по моделям .
Отправьте содержимое папки output_path на устройство Android.
$ adb shell rm -r /data/local/tmp/llm/ # Remove any previously loaded models
$ adb shell mkdir -p /data/local/tmp/llm/
$ adb push output_path /data/local/tmp/llm/model_version .task
Инициализировать задачу
Инициализируйте задачу с базовыми параметрами конфигурации:
// Set the configuration options for the LLM Inference task
val taskOptions = LlmInferenceOptions.builder()
.setModelPath('/data/local/tmp/llm/model_version .task')
.setMaxTopK(64)
.build()
// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, taskOptions)
Запустить задачу
Используйте методgenerateResponse generateResponse()
для генерации текстового ответа. Это создает один сгенерированный ответ.
val result = llmInference.generateResponse(inputPrompt)
logger.atInfo().log("result: $result")
Для потоковой передачи ответа используйте методgenerateResponseAsync generateResponseAsync()
.
val options = LlmInference.LlmInferenceOptions.builder()
...
.setResultListener { partialResult, done ->
logger.atInfo().log("partial result: $partialResult")
}
.build()
llmInference.generateResponseAsync(inputPrompt)
Образец заявления
Пример приложения представляет собой пример базового приложения для генерации текста для Android с использованием API вывода LLM. Вы можете использовать это приложение в качестве отправной точки для своего собственного приложения для Android или обращаться к нему при изменении существующего приложения. Код примера размещен на GitHub .
Клонируйте репозиторий git, используя следующую команду:
git clone https://github.com/google-ai-edge/mediapipe-samples
После создания локальной версии кода примера вы можете импортировать проект в Android Studio и запустить приложение. Дополнительную информацию см. в Руководстве по установке для Android .
Варианты конфигурации
Используйте следующие параметры конфигурации для настройки приложения Android:
Название опции | Описание | Диапазон значений | Значение по умолчанию |
---|---|---|---|
modelPath | Путь к хранению модели в каталоге проекта. | ПУТЬ | Н/Д |
maxTokens | Максимальное количество токенов (входные токены + выходные токены), которые обрабатывает модель. | Целое число | 512 |
topK | Количество токенов, которые модель учитывает на каждом этапе генерации. Ограничивает прогнозы первыми k наиболее вероятными токенами. | Целое число | 40 |
temperature | Количество случайности, введенной во время генерации. Более высокая температура приводит к большей креативности в сгенерированном тексте, а более низкая температура обеспечивает более предсказуемую генерацию. | Плавать | 0,8 |
randomSeed | Случайное начальное число, используемое при генерации текста. | Целое число | 0 |
loraPath | Абсолютный путь к модели LoRA локально на устройстве. Примечание. Это совместимо только с моделями графических процессоров. | ПУТЬ | Н/Д |
resultListener | Настраивает прослушиватель результатов на асинхронное получение результатов. Применимо только при использовании метода асинхронной генерации. | Н/Д | Н/Д |
errorListener | Устанавливает дополнительный прослушиватель ошибок. | Н/Д | Н/Д |
Преобразование модели
API вывода LLM совместим со следующими типами моделей, некоторые из которых требуют преобразования моделей. Используйте таблицу, чтобы определить метод необходимых шагов для вашей модели.
Модели | Метод преобразования | Совместимые платформы | Тип файла |
---|---|---|---|
Джемма-3 1Б | Никакого преобразования не требуется | Андроид, веб | .задача |
Джемма 2Б, Джемма 7Б, Джемма-2 2Б | Никакого преобразования не требуется | Android, iOS, веб | .bin |
Фи-2, СтойлЛМ, Сокол | Скрипт преобразования MediaPipe | Android, iOS, веб | .bin |
Все модели PyTorch LLM | Генеративная библиотека AI Edge Torch | Андроид, iOS | .задача |
Чтобы узнать, как конвертировать другие модели, см. раздел «Преобразование модели» .
Кастомизация ЛоРА
API вывода LLM поддерживает настройку LoRA (адаптация низкого ранга) с использованием библиотеки PEFT (точная настройка с эффективным использованием параметров). Настройка LoRA настраивает поведение LLM посредством экономически эффективного процесса обучения, создавая небольшой набор обучаемых весов на основе новых обучающих данных, а не переобучая всю модель.
API вывода LLM поддерживает добавление весов LoRA к слоям внимания моделей Gemma-2 2B , Gemma 2B и Phi-2 . Загрузите модель в формате safetensors
.
Базовая модель должна быть в формате safetensors
, чтобы можно было создавать веса LoRA. После обучения LoRA вы можете преобразовать модели в формат FlatBuffers для запуска в MediaPipe.
Подготовьте гири LoRA
Используйте руководство по методам LoRA от PEFT, чтобы обучить точно настроенную модель LoRA на собственном наборе данных.
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"],
)
После обучения на подготовленном наборе данных и сохранения модели точно настроенные веса модели LoRA доступны в adapter_model.safetensors
. Файл safetensors
— это контрольная точка LoRA, используемая во время преобразования модели.
Преобразование модели
Используйте пакет Python MediaPipe для преобразования весов модели в формат Flatbuffer. ConversionConfig
определяет параметры базовой модели, а также дополнительные параметры LoRA.
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_FILE ,
)
converter.convert_checkpoint(config)
Конвертер создаст два файла Flatbuffer: один для базовой модели, а другой для модели LoRA.
Вывод модели LoRA
Android поддерживает статический LoRA во время инициализации. Чтобы загрузить модель LoRA, укажите путь к модели LoRA, а также базовый LLM.
// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
.setModelPath(BASE_MODEL_PATH )
.setMaxTokens(1000)
.setTopK(40)
.setTemperature(0.8)
.setRandomSeed(101)
.setLoraPath(LORA_MODEL_PATH )
.build()
// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)
Чтобы запустить вывод LLM с помощью LoRA, используйте те же методыgenerateResponse generateResponse()
generateResponseAsync()
что и в базовой модели.