• 文档 >
  • ExecuTorch Llama Android 演示应用
快捷方式

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

  1. 打开 Android Studio 并选择“打开现有 Android Studio 项目”,打开 examples/demo-apps/android/LlamaDemo。

  2. 运行应用 (^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
  }

报告问题

如果在按照本教程操作时遇到任何 bug 或问题,请在 Github 上提交 bug/问题。

文档

查阅 PyTorch 的完整开发者文档

查看文档

教程

获取面向初学者和高级开发者的深入教程

查看教程

资源

查找开发资源并获得问题解答

查看资源