ExecuTorch Llama Android 演示应用程序¶
我们很高兴地宣布,新改进的 Android 演示应用程序已上线,并包含许多新更新,以通过聊天用例提供更直观、更流畅的用户体验!此应用程序的主要目标是展示 ExecuTorch 如何轻松地集成到 Android 演示应用程序中,以及如何使用 ExecuTorch 和 Llama 模型必须提供的许多功能。
此应用程序是激发您的创造力的宝贵资源,并提供您可以针对特定用例自定义和调整的基础代码。
请立即深入了解并开始探索我们的演示应用程序!我们期待任何反馈,并很高兴看到您的创新想法。
关键概念¶
从此演示应用程序中,您将学习许多关键概念,例如:
如何准备 Llama 模型、构建 ExecuTorch 库以及跨委托进行模型推理
通过 JNI 层公开 ExecuTorch 库
熟悉当前 ExecuTorch 面向应用程序的功能
目标是让您了解 ExecuTorch 提供的支持类型,并放心地将其用于您的使用案例。
支持型号¶
总的来说,此应用程序支持的模型是 (因委托而异):
羊驼 3.2 1B/3B
羊驼护卫 3 1B
羊驼 3.1 8B
羊驼 3 8B
羊驼 2 7B
LLaVA-1.5 视觉模型(仅限 XNNPACK)
构建 APK¶
首先,需要注意的是,目前 ExecuTorch 为 3 个代表提供支持。确定所选委托人后,选择 README 链接以获取完整的端到端说明,了解从环境设置到导出模型以构建要在设备上运行的 ExecuTorch 库和应用程序:
委托 |
资源 |
---|---|
XNNPACK(基于 CPU 的库) |
|
QNN(高通 AI 加速器) |
|
MediaTek (联发科技 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,您也可以调整模型的温度。模型将在任何调整时重新加载。
系统提示符:无需任何格式设置,即可在系统提示符中输入。例如,“you are a travel assistant” 或 “give me a response in a few sentences”。
用户提示:对于高级用户,如果您想手动输入提示,则可以通过修改 来实现。您还可以修改特殊令牌。更改后,返回到要发送的主 Chat 活动。
{{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
:Tokenizer .bin 文件的路径temperature
: model 参数来调整模型输出的随机性
用户提示¶
成功加载模型后,输入任何提示并单击 send (即 generate) 按钮将其发送到模型。
您也可以为其提供更多后续问题。
ExecuTorch 应用程序 API¶
mModule.generate(prompt,sequence_length, MainActivity.this);
prompt
:用户格式提示sequence_length
:响应提示而生成的令牌数MainActivity.this
:指示此类中存在回调函数 (OnResult()、OnStats())。
[LLaVA-1.5:仅适用于 XNNPACK 委托]
对于 LLaVA-1.5 实现,请在 Settings 菜单中选择导出的 LLaVA .pte 和 tokenizer 文件并加载模型。在此之后,您可以从图库中发送图像或拍摄实时照片以及向模型发送文本提示。
生成的输出¶
为了显示后续问题的完成情况,以下是模型的完整详细回答。
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
}