ExecuTorch Llama Android 演示应用¶
[更新 - 10/24] 我们已在 XNNPACK 后端 的演示应用中添加了对运行量化的 Llama 3.2 1B/3B 模型 的支持。目前我们支持使用 SpinQuant 和 QAT+LoRA 量化方法进行推理。
我们很高兴地宣布,全新改版的 Android 演示应用现已上线,并包含许多新更新,可通过聊天用例提供更直观、更流畅的用户体验!此应用的主要目标是展示 ExecuTorch 如何轻松集成到 Android 演示应用中,以及如何充分利用 ExecuTorch 和 Llama 模型提供的众多功能。
此应用是一个宝贵的资源,可以激发您的创造力,并提供可根据您的特定用例进行定制和改编的基础代码。
请立即深入探索我们的演示应用吧!我们期待您的任何反馈,并很高兴看到您的创新想法。
核心概念¶
通过此演示应用,您将学习到许多核心概念,例如
如何准备 Llama 模型、构建 ExecuTorch 库以及在不同委托上进行模型推理
通过 JNI 层公开 ExecuTorch 库
熟悉当前 ExecuTorch 面向应用的能力
目标是让您了解 ExecuTorch 提供的支持类型,并能自如地将其用于您的用例。
支持的模型¶
总的来说,此应用支持的模型包括(因委托而异)
Llama 3.2 量化版 1B/3B
BF16 格式的 Llama 3.2 1B/3B
Llama Guard 3 1B
Llama 3.1 8B
Llama 3 8B
Llama 2 7B
LLaVA-1.5 视觉模型(仅限 XNNPACK)
构建 APK¶
首先需要注意的是,当前 ExecuTorch 支持 3 种委托。确定您选择的委托后,请选择相应的 README 链接以获取完整的端到端说明,包括环境设置、模型导出以及构建 ExecuTorch 库和应用以在设备上运行的步骤。
委托 |
资源 |
---|---|
XNNPACK(基于 CPU 的库) |
|
QNN(Qualcomm AI 加速器) |
|
MediaTek(联发科 AI 加速器) |
如何使用应用¶
本节将提供使用应用的主要步骤,以及 ExecuTorch API 的代码片段。
对于加载应用、开发和在设备上运行,我们推荐使用 Android Studio
打开 Android Studio 并选择“打开现有 Android Studio 项目”,打开 examples/demo-apps/android/LlamaDemo。
运行应用 (^R)。这将构建并在手机上启动应用。
选择模型和参数¶
选择模型、分词器和模型类型后,即可点击“加载模型”让应用加载模型并返回主聊天界面。
可选参数
Temperature(温度):默认为 0,您也可以调整模型的温度。进行任何调整后,模型将重新加载。
System Prompt(系统提示词):无需任何格式,您可以输入系统提示词。例如,“你是一位旅行助手”或“用几句话回复我”。
User Prompt(用户提示词):主要面向高级用户,如果您想手动输入提示词,可以通过修改
{{user prompt}}
来实现。您也可以修改特殊 token。修改后返回主聊天界面发送即可。
ExecuTorch 应用 API¶
// Upon returning to the Main Chat Activity
mModule = new LlmModule(
ModelUtils.getModelCategory(mCurrentSettingsFields.getModelType()),
modelPath,
tokenizerPath,
temperature);
int loadResult = mModule.load();
modelCategory
:指示是纯文本模型还是视觉模型modePath
:.pte 文件路径tokenizerPath
:分词器 .bin 文件路径temperature
:模型参数,用于调整模型输出的随机性
用户提示词¶
模型成功加载后,输入任何提示词并点击发送(即生成)按钮发送给模型。
您也可以提供更多的后续问题。
ExecuTorch 应用 API¶
mModule.generate(prompt,sequence_length, MainActivity.this);
prompt
:用户格式化的提示词sequence_length
:对提示词响应生成的 token 数量MainActivity.this
:表示回调函数 (OnResult(), OnStats()) 存在于此类中。
[LLaVA-1.5:仅限 XNNPACK 委托]
对于 LLaVA-1.5 实现,请在“设置”菜单中选择导出的 LLaVA .pte 和分词器文件并加载模型。之后,您可以从相册发送图片或拍摄实时照片,并附带文本提示词发送给模型。
生成的输出¶
为显示后续问题的完成情况,此处是模型给出的完整详细回复。
ExecuTorch 应用 API¶
确保您在 mModule.generate()
中提供的回调类中包含以下函数。在本示例中,该类为 MainActivity.this
。
@Override
public void onResult(String result) {
//...result contains token from response
//.. onResult will continue to be invoked until response is complete
}
@Override
public void onStats(float tps) {
//...tps (tokens per second) stats is provided by framework
}