ExecuTorch Llama Android 演示应用程序¶
我们很高兴与大家分享新近改版的 Android 演示应用程序,它包含许多新更新,可提供更直观、更流畅的用户体验,并提供聊天用例!该应用程序的主要目标是展示 ExecuTorch 如何轻松地集成到 Android 演示应用程序中,以及如何使用 ExecuTorch 和 Llama 模型提供的众多功能。
该应用程序是您激发创意和提供基础代码的宝贵资源,您可以根据自己的具体用例对其进行定制和调整。
请立即开始探索我们的演示应用程序!我们期待您的任何反馈,并期待看到您的创新想法。
关键概念¶
通过此演示应用程序,您将学习许多关键概念,例如
如何准备 Llama 模型、构建 ExecuTorch 库以及跨委托进行模型推理
通过 JNI 层公开 ExecuTorch 库
熟悉当前的 ExecuTorch 应用程序面向功能
我们的目标是让您了解 ExecuTorch 提供的支持类型,并能够放心地将它应用于您的用例。
支持的模型¶
总的来说,该应用程序支持的模型如下(因委托而异)
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(高通 AI 加速器) |
|
联发科(联发科 AI 加速器) |
警告 NDK r27 会导致以下问题
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_ZTVNSt6__ndk114basic_ifstreamIcNS_11char_traitsIcEEEE" referenced by "/data/app/~~F5IwquaXUZPdLpSEYA-JGA==/com.example.executorchllamademo-FSyx80gEhsQCsxz7hvS2Ew==/lib/arm64/libexecutorch.so"...
请使用 NDK 版本 26.3.11579264。
如何使用应用程序¶
本节将提供使用应用程序的主要步骤,以及 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
}