ExecuTorch Llama Android 範例應用程式¶
[更新 - 10/24] 我們已新增在 Android 範例應用程式中,使用 XNNPACK 後端,執行量化 Llama 3.2 1B/3B 模型的功能。目前我們支援使用 SpinQuant 和 QAT+LoRA 量化方法進行推論。
我們很高興分享,經過全新改版的 Android 範例應用程式已上線,包含許多新更新,透過聊天的使用案例,提供更直觀、更流暢的使用者體驗!此應用程式的主要目標是展示 ExecuTorch 如何輕鬆整合到 Android 範例應用程式中,以及如何運用 ExecuTorch 和 Llama 模型提供的許多功能。
此應用程式可作為寶貴的資源,激發您的創造力,並提供基礎程式碼,讓您可以針對您的特定使用案例進行客製化和調整。
請立即深入探索我們的範例應用程式!我們期待您的任何回饋,並很高興看到您創新的想法。
重要概念¶
從此範例應用程式中,您將學到許多重要概念,例如
如何準備 Llama 模型、建置 ExecuTorch 函式庫,以及跨 Delegates 的模型推論
透過 JNI 層公開 ExecuTorch 函式庫
熟悉目前 ExecuTorch 應用程式面向的功能
目標是讓您了解 ExecuTorch 提供的支援類型,並能安心地將其用於您的使用案例。
支援的模型¶
整體而言,此應用程式支援的模型包括(因 Delegate 而異)
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 個 Delegates 的支援。一旦您確定了您選擇的 Delegate,請選擇 README 連結,以取得完整的端到端說明,包括環境設定、匯出模型、建置 ExecuTorch 函式庫和應用程式,以及在裝置上執行。
Delegate |
資源 |
---|---|
XNNPACK (基於 CPU 的函式庫) |
|
QNN (Qualcomm AI 加速器) |
|
MediaTek (MediaTek AI 加速器) |
如何使用應用程式¶
本節將提供使用應用程式的主要步驟,以及 ExecuTorch API 的程式碼片段。
對於載入應用程式、開發和在裝置上執行,我們建議使用 Android Studio
開啟 Android Studio 並選擇「開啟現有的 Android Studio 專案」,以開啟 examples/demo-apps/android/LlamaDemo。
執行應用程式 (^R)。這會建置並在手機上啟動應用程式。
選擇模型和參數¶
一旦您選擇了模型、Tokenizer 和模型類型,您就可以點擊「載入模型」,讓應用程式載入模型並返回主聊天活動。
可選參數
溫度:預設為 0,您也可以調整模型的溫度。模型會在任何調整後重新載入。
系統提示:無需任何格式,您可以輸入系統提示。例如,「你是一位旅行助手」或「用幾句話給我一個回覆」。
使用者提示:更適合進階使用者,如果您想手動輸入提示,您可以透過修改
{{user prompt}}
來達成。您也可以修改特殊 Token。變更後,返回主聊天活動以發送。
ExecuTorch 應用程式 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
:模型參數,用於調整模型輸出的隨機性
使用者提示¶
成功載入模型後,輸入任何提示,然後點擊發送 (即產生) 按鈕以將其發送到模型。
您也可以提供更多後續問題。
ExecuTorch 應用程式 API¶
mModule.generate(prompt,sequence_length, MainActivity.this);
prompt
:使用者格式化的提示sequence_length
:為了回應提示而產生的 Token 數量MainActivity.this
:表示回呼函式 (OnResult(), OnStats()) 存在於此類別中。
[LLaVA-1.5:僅適用於 XNNPACK delegate]
對於 LLaVA-1.5 實作,請在「設定」選單中選擇匯出的 LLaVA .pte 和 Tokenizer 檔案,並載入模型。完成後,您可以從您的圖庫發送圖片,或拍攝即時圖片以及文字提示到模型。
產生的輸出¶
為了展示後續問題的完成情況,以下是模型產生的完整詳細回應。
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
}