ExecuTorch Llama Android 演示应用程序¶
[更新 - 2025-05-15] 我们已添加对运行 Qwen3 0.6B 和 4B 模型 的支持。请参阅本教程进行导出。加载和运行 Qwen3 与 Llama 的方式相同,如本说明文档所示。
我们很高兴地宣布,全新改版的 Android 演示应用程序已上线,并包含许多新更新,旨在通过聊天用例提供更直观、更流畅的用户体验!该应用程序的主要目标是展示 ExecuTorch 如何轻松集成到 Android 演示应用程序中,以及如何利用 ExecuTorch 和 Llama 模型提供的众多功能。
该应用程序可作为宝贵的资源,激发您的创造力,并提供可供您根据特定用例进行定制和改编的基础代码。
请立即开始探索我们的演示应用程序!我们期待您的任何反馈,并对您富有创意的想法感到兴奋。
核心概念¶
通过此演示应用程序,您将学习许多核心概念,例如:
如何准备 Llama 模型、构建 ExecuTorch 库以及跨不同代理进行模型推理
通过 JNI 层暴露 ExecuTorch 库
熟悉当前 ExecuTorch 面向应用程序的功能
目标是让您了解 ExecuTorch 提供的支持类型,并能够自信地将其用于您的用例。
支持的模型¶
总体而言,该应用程序支持的模型(因代理而异)包括:
Llama 3.2 量化 1B/3B
Llama 3.2 1B/3B (BF16 格式)
Llama Guard 3 1B
Llama 3.1 8B
Llama 3 8B
Llama 2 7B
LLaVA-1.5 视觉模型(仅限 XNNPACK)
Qwen 3 0.6B、1.7B 和 4B
构建 APK¶
首先,需要注意的是,目前 ExecuTorch 支持 3 种代理。一旦确定了您选择的代理,请点击 README 链接,获取从环境设置到导出模型以构建可在设备上运行的 ExecuTorch 库和应用程序的完整端到端说明。
代理 |
资源 |
---|---|
XNNPACK (基于 CPU 的库) |
|
QNN (高通 AI 加速器) |
|
联发科 (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 LlmModule(
ModelUtils.getModelCategory(mCurrentSettingsFields.getModelType()),
modelPath,
tokenizerPath,
temperature);
int loadResult = mModule.load();
modelCategory
:指示是仅文本模型还是视觉模型modePath
:指向 .pte 文件的路径tokenizerPath
:指向分词器文件的路径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(String stats) {
//... will be a json. See extension/llm/stats.h for the field definitions
}
集成测试¶
您可以运行集成测试进行健全性检查。该测试加载位于 `/data/local/tmp/llama` 下的模型 pte 文件和 tokenizer.bin 文件。
模型准备¶
转到 ExecuTorch 根目录,
curl -C - -Ls "https://hugging-face.cn/karpathy/tinyllamas/resolve/main/stories110M.pt" --output stories110M.pt
curl -C - -Ls "https://raw.githubusercontent.com/karpathy/llama2.c/master/tokenizer.model" --output tokenizer.model
# Create params.json file
touch params.json
echo '{"dim": 768, "multiple_of": 32, "n_heads": 12, "n_layers": 12, "norm_eps": 1e-05, "vocab_size": 32000}' > params.json
python -m extension.llm.export.export_llm base.checkpoint=stories110M.pt base.params=params.json model.dtype_override="fp16" export.output_name=stories110m_h.pte model.use_kv_cache=True
python -m pytorch_tokenizers.tools.llama2c.convert -t tokenizer.model -o tokenizer.bin
推送模型¶
adb mkdir -p /data/local/tmp/llama
adb push stories110m_h.pte /data/local/tmp/llama
adb push tokenizer.bin /data/local/tmp/llama
报告问题¶
如果您在遵循本教程时遇到任何错误或问题,请在此处的 Github 上提交 bug/issue,或在此处的 Discord 加入我们。