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
開啟 Android Studio 並選擇“開啟現有 Android Studio 專案”,開啟 examples/demo-apps/android/LlamaDemo。
執行應用 (^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
}