⚠️ 重要提示:LLM 推理 API 更新
LLM 推理 API 的 Android 和 iOS 实现现已废弃。Web 实现未废弃
请将移动项目迁移到 LiteRT-LM ,以确保获得持续支持并保持性能。
借助 LLM 推理 API,您可以在设备上完全运行大语言模型 (LLM),并使用这些模型执行各种任务,例如生成文本、以自然语言形式检索信息以及总结文档。此任务内置支持多种文生文大语言模型,因此您可以将最新的设备端生成式 AI 模型应用于应用和产品。
此任务内置支持各种 LLM。LiteRT 社区页面上托管的模型采用 MediaPipe 友好格式,无需任何其他转换或编译步骤。
您可以使用 LiteRT Torch 将 PyTorch 模型导出为多签名 LiteRT (tflite) 模型,这些模型与分词器参数捆绑在一起以创建任务软件包。使用 LiteRT Torch 转换的模型与 LLM 推理 API 兼容,并且可以在 CPU 后端上运行,因此适合 Android 和 iOS 应用。
开始使用
您可以按照针对目标平台的以下实现指南之一开始使用此任务。这些特定于平台的指南将引导您完成此任务的基本实现,并提供使用可用模型和推荐配置选项的代码示例:
任务详情
本部分介绍此任务的功能、输入、输出和配置选项。
功能
LLM 推理 API 包含以下主要功能:
- 文生文 - 根据输入文本提示生成文本。
- LLM 选择 - 应用多个模型,以便根据您的 特定用例定制应用。您还可以重新训练模型并向其应用自定义权重。
- LoRA 支持 - 通过训练整个数据集或从开源社区获取预构建的 LoRA 模型(与使用 LiteRT Torch Generative API 转换的模型不兼容),使用 LoRA 模型扩展和自定义大语言模型功能。
| 任务输入 | 任务输出 |
|---|---|
LLM 推理 API 接受以下输入:
|
LLM 推理 API 输出以下结果:
|
配置选项
此任务具有以下配置选项:
| 选项名称 | 说明 | 值范围 | 默认值 |
|---|---|---|---|
modelPath |
模型在项目目录中的存储路径。 | 路径 | 不适用 |
maxTokens |
模型处理的词元(输入词元 + 输出词元)数量上限。 | 整数 | 512 |
topK |
模型在生成过程的每个步骤中考虑的词元数。 将预测限制为概率最高的 k 个词元。 | 整数 | 40 |
temperature |
生成过程中引入的随机性。温度越高,生成的文本就越具创造性;温度越低,生成的文本就越可预测。 | 浮点数 | 0.8 |
randomSeed |
文本生成期间使用的随机种子。 | 整数 | 0 |
loraPath |
设备上本地 LoRA 模型的绝对路径。注意:这仅与 GPU 模型兼容。 | 路径 | 不适用 |
resultListener |
设置结果监听器以异步接收结果。 仅在使用异步生成方法时适用。 | 不适用 | 不适用 |
errorListener |
设置可选的错误监听器。 | 不适用 | 不适用 |
模型
LLM 推理 API 支持许多文生文大语言模型,包括对一些经过优化可在浏览器和移动设备上运行的模型的内置支持。这些轻量级模型可用于在设备上完全运行推理。
在初始化 LLM 推理 API 之前,请下载模型并将文件存储在项目目录中。您可以使用 LiteRT 社区 HuggingFace 仓库中的预转换模型,也可以使用 AI Edge Torch Generative Converter 将模型转换为 MediaPipe 兼容格式。
如果您还没有要与 LLM 推理 API 搭配使用的 LLM,请先使用以下模型之一。
Gemma-3n
Gemma-3n E2B 和 E4B 是 Gemma 系列的最新模型,Gemma 系列是一系列轻量级、 先进的开放模型,其开发采用了与 创建 Gemini 模型相同的研究成果和技术。Gemma 3n 模型专为在资源有限的设备上高效执行而设计。它们能够接受多模态输入,处理文本、图片和音频输入,并生成文本输出。
Gemma 3n 模型使用选择性参数激活技术来降低资源要求。借助此技术,模型可以以 2B 和 4B 参数的有效大小运行,这低于它们包含的参数总数
HuggingFace 提供的 Gemma-3n E2B 和 E4B 模型采用 .litertlm 格式,可供 Android 和 Web 版 LLM 推理 API 直接使用。
Gemma-3 1B
Gemma-3 1B 是 Gemma 系列中最轻量级的模型,Gemma 系列是一系列先进的轻量级开放模型 ,其开发采用了与 Gemini 模型相同的研究成果和技术。该模型包含 1B 参数和开放权重。
HuggingFace 提供的 Gemma-3 1B 模型采用
.task/.litertlm
格式,可供 Android 和 Web
应用版 LLM 推理 API 直接使用。
使用 LLM 推理 API 运行 Gemma-3 1B 时,请相应地配置以下选项:
preferredBackend:使用此选项可在CPU或GPU后端之间进行选择。此选项仅适用于 Android。supportedLoraRanks:LLM 推理 API 无法配置为支持使用 Gemma-3 1B 模型的低秩适应 (LoRA)。请勿使用supportedLoraRanks或loraRanks选项。maxTokens:maxTokens的值必须与模型中内置的上下文大小匹配。这也可以称为键值 (KV) 缓存或上下文长度。numResponses:必须始终为 1。此选项仅适用于 Web。
在 Web 应用上运行 Gemma-3 1B 时,初始化可能会导致当前线程中出现长时间的阻塞。如果可能,请始终从工作器线程运行模型。
Gemma-2 2B
Gemma-2 2B 是 Gemma-2 的 2B 变体,适用于所有平台。
该模型包含 2B 参数和开放权重。Gemma-2 2B 以其同类模型中先进的推理技能而闻名。
PyTorch 模型转换
PyTorch 生成式模型可以使用 LiteRT Torch Generative API转换为 MediaPipe 兼容格式。 您可以使用该 API 将 PyTorch 模型转换为多签名 LiteRT (TensorFlow Lite) 模型。如需详细了解如何映射和导出模型, 请访问 LiteRT Torch GitHub 页面。
使用 LiteRT Torch Generative API 转换 PyTorch 模型涉及以下步骤:
- 下载 PyTorch 模型检查点。
- 使用 LiteRT Torch Generative API 编写、转换模型并将其量化为 MediaPipe 兼容的文件格式 (
.tflite)。 - 根据 tflite 文件和模型分词器创建任务软件包 (
.task/.litertlm)。
Torch Generative 转换器仅针对 CPU 进行转换,并且需要至少具有 64 GB RAM 的 Linux 机器。
如需创建任务软件包,请使用捆绑 脚本 创建任务软件包。捆绑过程会将映射的模型与运行端到端推理所需的其他元数据(例如分词器参数)打包在一起。
模型捆绑过程需要 MediaPipe PyPI 软件包。转换脚本在 0.10.14 之后的所有 MediaPipe 软件包中均可用。
使用以下命令安装和导入依赖项:
$ 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 |
AI Edge 导出的 TFLite 模型的路径。 | 路径 |
tokenizer_model |
SentencePiece 分词器模型的路径。 | 路径 |
start_token |
特定于模型的开始词元。开始词元必须存在于 提供的分词器模型中。 | STRING |
stop_tokens |
特定于模型的停止词元。停止词元必须存在于 提供的分词器模型中。 | LIST[STRING] |
output_filename |
输出任务软件包文件的名称。 | 路径 |
LoRA 自定义
Mediapipe LLM 推理 API 可以配置为支持大语言模型的低秩适应 (LoRA)。借助微调的 LoRA 模型,开发者可以通过经济高效的训练过程自定义 LLM 的行为。LLM 推理 API 的 LoRA 支持适用于 GPU 后端的所有 Gemma 变体和 Phi-2 模型,LoRA 权重仅适用于注意力层。此初始实现是一个实验性 API,用于未来的开发,并计划在即将发布的更新中支持更多模型和各种类型的层。
准备 LoRA 模型
按照 HuggingFace 上的
说明
,使用受支持的模型类型(
Gemma 或 Phi-2)在您自己的数据集上训练微调的 LoRA 模型。Gemma-2 2B、Gemma
2B 和
Phi-2 模型均以 safetensors 格式在
HuggingFace 上提供。由于 LLM 推理 API 仅支持注意力层上的 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 模型,这些模型适合 LLM 推理 API。例如, monsterapi/gemma-2b-lora-maths-orca-200k 和 Phi-2 的 lole25/phi-2-sft-ultrachat-lora 。
在准备好的数据集上进行训练并保存模型后,您将获得一个 adapter_model.safetensors 文件,其中包含微调的 LoRA 模型权重。
safetensors 文件是模型转换中使用的 LoRA 检查点。
下一步,您需要使用 MediaPipe Python 软件包将模型权重转换为 TensorFlow Lite Flatbuffer。ConversionConfig 应指定基础模型选项以及其他 LoRA 选项。请注意,
由于该 API 仅支持使用 GPU 进行 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 flatbuffer 文件,一个用于基础模型,另一个用于 LoRA 模型。
LoRA 模型推理
Web、Android 和 iOS LLM 推理 API 已更新,以支持 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)
如需使用 LoRA 运行 LLM 推理,请使用与基础模型相同的 generateResponse() 或 generateResponseAsync() 方法。