目录

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

  • Llama 3.2 1B/3B 在 BF16 中

  • Llama Guard 3 1B

  • Llama 3.1 8B

  • Llama 3 8B

  • Llama 2 7B

  • LLaVA-1.5 视觉模型(仅 XNNPACK)

构建APK

首先需要注意的是,目前 ExecuTorch 提供了 3 种委托(delegates)的支持。一旦您确定了自己选择的委托,选择 README 链接以获取完整的端到端指导,用于环境设置、模型导出,以构建 ExecuTorch 库和应用程序并在设备上运行:

委托

资源

XNNPACK(基于CPU的库)

链接

QNN (Qualcomm AI 加速器)

链接

MediaTek (MediaTek AI 加速器)

链接

如何使用该应用

本节将介绍使用该应用的主要步骤,并提供一个 ExecuTorch API 的代码片段。

对于加载应用、开发和在设备上运行,我们推荐使用 Android Studio:

  1. 打开 Android Studio 并选择 “Open an existing Android Studio project” 以打开 examples/demo-apps/android/LlamaDemo。

  2. 运行应用 (^R)。这会在手机上构建并启动应用。

打开应用

以下是该应用的 UI 功能。

选择设置控件以开始选择模型、其参数以及任何提示。

选择模型和参数

一旦你选择了模型、分词器和模型类型,就可以点击“加载模型”按钮,让应用加载模型并返回到主聊天界面。

可选参数:

  • 温度:默认为 0,您也可以调整模型的温度值。任何调整后,模型将重新加载。

  • 系统提示:无需任何格式,您可以输入系统提示。例如,“你是一个旅行助手”或“用几句话给我回复”。

  • 用户提示:更多面向高级用户,如果您想手动输入提示,则可以通过修改 {{user prompt}} 来实现。您也可以修改特殊标记。更改后,请返回主聊天活动界面发送。

执行Torch App 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: 模型参数,用于调整模型输出的随机性

用户提示

模型成功加载后,输入任意提示并点击发送(即生成)按钮将其发送给模型。

你也可以提供更多的后续问题。

执行Torch App API

mModule.generate(prompt,sequence_length, MainActivity.this);
  • prompt: 用户格式化提示

  • sequence_length: 响应提示时生成的标记数

  • MainActivity.this: 表示此类中存在回调函数(OnResult(),OnStats())。

[LLaVA-1.5: 仅限XNNPACK委托]

对于 LLaVA-1.5 的实现,请在设置菜单中选择导出的 LLaVA .pte 和 tokenizer 文件并加载模型。完成此操作后,您可以从相册中发送一张图片或实时拍摄一张图片,并与文本提示一起发送给模型。

输出生成

为展示对后续问题的解答,以下是模型的完整详细回答。

执行Torch App 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
  }

报告问题

如果您在按照本教程操作时遇到任何错误或问题,请在此处提交错误/问题至 Github

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

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

查看教程

资源

查找开发资源并解答您的问题

查看资源