• 文件 >
  • 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 的完整開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深入教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源