ExecuTorch Llama Android 演示应用¶
[更新 - 10/24] 我们已添加对在演示应用中运行量化 Llama 3.2 1B/3B 模型(在 XNNPACK 后端上)的支持。我们目前支持使用 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(MediaTek AI 加速器) |
如何使用应用¶
本节将提供使用应用的主要步骤,以及 ExecuTorch API 的代码片段。
对于加载应用、开发和在设备上运行,我们推荐使用 Android Studio
打开 Android Studio 并选择“打开现有 Android Studio 项目”以打开 examples/demo-apps/android/LlamaDemo。
运行应用 (^R)。这将在手机上构建并启动应用。
选择模型和参数¶
一旦您选择了模型、分词器和模型类型,您就可以点击“加载模型”以让应用加载模型并返回到主聊天活动。
可选参数
温度:默认为 0,您也可以调整模型的温度。模型将在任何调整后重新加载。
系统提示:无需任何格式,您可以输入系统提示。例如,“你是一个旅行助手”或“用几句话给我一个回复”。
用户提示:更适合高级用户,如果您想手动输入提示,则可以通过修改
{{user prompt}}
来完成。您也可以修改特殊标记。更改后,返回主聊天活动发送。
ExecuTorch 应用 API¶
// Upon returning to the Main Chat Activity
mModule = new LlamaModule(
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
:响应提示生成的标记数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
}