Android Lite 版

您可以在 Android 應用程式中透過 LiteRT 執行 TensorFlow、PyTorch 和 JAX 模型。LiteRT 系統提供預先建構及可自訂的執行環境,可在 Android 上快速有效率地執行模型,包括硬體加速選項。

如需使用 LiteRT 的 Android 應用程式範例,請參閱 LiteRT 範例存放區。

機器學習模型

LiteRT 會使用 TensorFlow、PyTorch 和 JAX 模型,並轉換為更小、可攜式且更有效率的機器學習模型格式。您可以在 Android 上使用 LiteRT 搭配預先建構的模型,也可以自行建構模型並轉換為 LiteRT 格式。

本頁面討論如何使用已建構的機器學習模型,不涵蓋模型的建構、訓練、測試或轉換。如要進一步瞭解如何挑選、修改、建構及轉換 LiteRT 適用的機器學習模型,請前往「模型」頁面。

在 Android 上執行模型

在 Android 應用程式中執行的 LiteRT 模型會接收資料、處理資料,並根據模型的邏輯產生預測結果。LiteRT 模型需要特殊的執行階段環境才能執行,且傳遞至模型的資料必須採用特定資料格式,稱為張量。模型處理資料時 (稱為執行推論),會產生新的張量做為預測結果,並將結果傳遞至 Android 應用程式,以便採取行動,例如向使用者顯示結果或執行其他商業邏輯。

Android 應用程式中 LiteRT 模型的執行流程

圖 1. Android 應用程式中 LiteRT 模型的執行流程。

在功能設計層級,Android 應用程式需要下列元素才能執行 LiteRT 模型:

  • LiteRT 執行階段環境,用於執行模型
  • 模型輸入處理常式,可將資料轉換為張量
  • 模型輸出處理常式,用於接收輸出結果張量,並將其解讀為預測結果

以下各節說明 LiteRT 程式庫和工具如何提供這些功能元素。

使用 LiteRT 建構應用程式

本節說明在 Android 應用程式中導入 LiteRT 的建議做法,也是最常見的做法。您應特別注意「執行階段環境」和「開發程式庫」部分。如果您已開發自訂模型,請務必參閱「進階開發路徑」一節。

執行階段環境選項

您可以使用幾種方式,在 Android 應用程式中啟用執行階段環境來執行模型。建議使用下列選項:

一般來說,您應使用 Google Play 服務提供的執行階段環境,因為這種環境比標準環境更節省空間,而且會動態載入,因此應用程式大小較小。Google Play 服務也會自動使用 LiteRT 執行階段的最新穩定版本,隨著時間推移,您將能享有更多功能和更優異的效能。如果您在未搭載 Google Play 服務的裝置上提供應用程式,或需要密切管理 ML 執行階段環境,則應使用標準 LiteRT 執行階段。這個選項會將額外程式碼併入應用程式,讓您能更有效控管應用程式中的機器學習執行階段,但應用程式的下載大小會增加。

如要在 Android 應用程式中存取這些執行階段環境,請將 LiteRT 開發程式庫新增至應用程式開發環境。如要瞭解如何在應用程式中使用標準執行階段環境,請參閱下一節。

程式庫

您可以使用 Google Play 服務存取 Interpreter API。您可以在 Android 應用程式中使用 LiteRT 核心支援程式庫。如要瞭解如何使用 LiteRT 程式庫和執行階段環境的程式設計詳細資料,請參閱「Android 開發工具」。

取得模型

如要在 Android 應用程式中執行模型,需要使用 LiteRT 格式的模型。您可以使用預先建構的模型,也可以自行建構模型並轉換為 Lite 格式。如要進一步瞭解如何為 Android 應用程式取得模型,請參閱 LiteRT Models 頁面。

處理輸入資料

傳遞至機器學習模型的任何資料都必須是具有特定資料結構的張量,通常稱為張量的「形狀」。如要使用模型處理資料,應用程式程式碼必須將資料從原生格式 (例如圖片、文字或音訊資料) 轉換為模型所需的張量形狀。

執行推論

透過模型處理資料以產生預測結果,稱為執行「推論」。在 Android 應用程式中執行推論時,需要 LiteRT 執行階段環境模型輸入資料

模型在特定裝置上產生推論的速度,取決於處理的資料大小、模型複雜度,以及可用的運算資源,例如記憶體和 CPU,或是稱為加速器的專用處理器。機器學習模型可在圖形處理單元 (GPU) 和張量處理單元 (TPU) 等專用處理器上,使用稱為「委派」的 LiteRT 硬體驅動程式,以更快的速度執行。如要進一步瞭解委派和模型處理的硬體加速功能,請參閱硬體加速總覽

處理輸出結果

模型會以張量形式產生預測結果,您的 Android 應用程式必須採取行動或向使用者顯示結果,藉此處理這些張量。模型輸出結果可能很簡單,例如圖片分類的單一結果對應的數字 (0 = 狗、1 = 貓、2 = 鳥),也可能非常複雜,例如圖片中多個分類物件的多個定界框,預測信賴度評分介於 0 和 1 之間。

進階開發路徑

使用更精細的自訂 LiteRT 模型時,您可能需要採用比上述更進階的開發方法。以下各節說明在 Android 應用程式中執行模型,以及為 LiteRT 開發模型的高階技術。

進階執行階段環境

除了 LiteRT 的標準執行階段和 Google Play 服務執行階段環境外,您還可以在 Android 應用程式中使用其他執行階段環境。如果您使用的機器學習模型包含 LiteRT 標準執行階段環境不支援的機器學習作業,就很有可能需要使用這些環境。

LiteRT Flex 執行階段可讓您納入模型所需的特定運算子。如要進階執行模型,您可以為 Android 建構 LiteRT,納入執行 TensorFlow 機器學習模型所需的運算子和其他功能。詳情請參閱「為 Android 建構 LiteRT」。

C 和 C++ API

LiteRT 也提供 API,可使用 C 和 C++ 執行模型。如果您的應用程式使用 Android NDK,建議使用這個 API。如果您想在多個平台之間共用程式碼,也可以考慮使用這個 API。如要進一步瞭解這項開發選項,請參閱「開發工具」頁面。

以伺服器為基礎的模型執行

一般來說,您應在 Android 裝置上執行應用程式中的模型,以利用較低的延遲時間,並提升使用者資料隱私權。不過,在某些情況下,在雲端伺服器上執行模型 (而非在裝置上執行) 是更好的解決方案。舉例來說,如果您的模型很大,無法輕鬆壓縮至適合使用者 Android 裝置的大小,或無法在這些裝置上以合理的效能執行,如果優先考量模型在各種裝置上的效能一致性,這個方法可能也是您的首選解決方案。

Google Cloud 提供全套服務,可執行 AI 模型。詳情請參閱 Google Cloud 的 AI 和機器學習產品頁面。

自訂模型開發與最佳化

進階開發路徑可能包括開發自訂機器學習模型,以及針對 Android 裝置使用這些模型進行最佳化。如果您打算建構自訂模型,請務必考慮對模型套用量化技術,以降低記憶體和處理成本。如要進一步瞭解如何建構高效能模型,以便搭配 LiteRT 使用,請參閱「模型」一節中的「效能最佳做法」。

支援的 Android 版本

LiteRT 版本 狀態 最低 SDK 級別 最低 NDK 版本 (如使用) 發布日期
v1.2.0 ⚠️ 已淘汰 21 (Android 5 Lollipop) r26a 2025-03-13
v1.3.0 ⚠️ 已淘汰 21 (Android 5 Lollipop) r26a 2025-05-19
v1.4.0 ⚠️ 已淘汰 26 (Android 8 Oreo) r26a 2025-06-25
v1.4.1 ✅ 有效 21 (Android 5 Lollipop) r26a 2025-11-07
v2.0.3 ✅ 有效 26 (Android 8 Oreo) r26a 2025-11-08
v2.1.0 即將推出 23 (Android 6 Marshmallow) r26a 尚未發布

重要事項: 請確保依附元件為最新版本,以支援最新功能和安全性更新。

已編譯模型 API 與 Interpreter API

  • 編譯模型 API:以加速器為優先,透過統一緩衝區互通性和非同步管道,執行 AOT/JIT 編譯。
  • 解譯器 API:可與現有的 TensorFlow Lite 樣式程式碼向後相容。

您可以在執行階段選擇任一 API;大多數新的效能和加速器功能都會納入已編譯模型 API。

如需實作範例,請參閱:

Common 和 CPU

執行階段功能 Interpreter API 已編譯模型 API
剖析
錯誤報告者
I/O 緩衝區互通性 (TensorBuffer/Environment) --
選擇即用型加速器 --
同步處理執行檔
自訂作業
XNNPACK 設定
動態形狀

GPU

執行階段功能 Interpreter API 已編譯模型 API
同步處理執行檔
記憶體快取
CPU 備援
非同步執行 --
零複製緩衝區 (AHWB/GLBuffer/Texture) --
MLD OpenCL 後端
MLD WebGPU 後端 (新功能) --
支援 MLD Metal (新功能) --

NPU

執行階段功能 Interpreter API 已編譯模型 API
同步處理執行檔
非同步執行 (Pixel) --
CPU 備援
GPU 備用 --
零緩衝區副本 (AHWB) --
QC/MTK AOT --
Pixel AOT --
QC/MTK/Pixel JIT --

快速入門 (已編譯模型 API)

使用 Compiled Model API 執行推論時,需要完成下列重要步驟:

  1. 載入相容模型。
  2. 配置輸入和輸出張量緩衝區。
  3. 叫用已編譯的模型。
  4. 將推論結果讀取至輸出緩衝區。

下列程式碼片段顯示以 Kotlin 和 C++ 實作整個程序的基本方式。

C++

// Load model and initialize runtime
LITERT_ASSIGN_OR_RETURN(auto model, Model::CreateFromFile("mymodel.tflite"));
LITERT_ASSIGN_OR_RETURN(auto env, Environment::Create({}));
LITERT_ASSIGN_OR_RETURN(auto compiled_model,
    CompiledModel::Create(env, model, kLiteRtHwAcceleratorCpu));

// Preallocate input/output buffers
LITERT_ASSIGN_OR_RETURN(auto input_buffers, compiled_model.CreateInputBuffers());
LITERT_ASSIGN_OR_RETURN(auto output_buffers, compiled_model.CreateOutputBuffers());

// Fill the first input
float input_values[] = { /* your data */ };
input_buffers[0].Write<float>(absl::MakeConstSpan(input_values, /*size*/));

// Invoke
compiled_model.Run(input_buffers, output_buffers);

// Read the output
std::vector<float> data(output_data_size);
output_buffers[0].Read<float>(absl::MakeSpan(data));

Kotlin

// Load model and initialize runtime
val  model =
    CompiledModel.create(
        context.assets,
        "mymodel.tflite",
        CompiledModel.Options(Accelerator.CPU)
    )

// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()

// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })

// Invoke
model.run(inputBuffers, outputBuffers)

// Read the output
val outputFloatArray = outputBuffers[0].readFloat()

詳情請參閱「開始使用 Kotlin」和「開始使用 C++」指南。

主要功能 (已編譯模型 API)

  • 即時加速器選取和非同步 - 在建立時選取 CPU/GPU/NPU,並在沒有委派管道的情況下執行非同步。
  • 統一的零複製緩衝區:在預先/後續處理和推論之間共用 AHWB/GL/OpenCL/WebGPU/Metal 緩衝區。
  • 生成就緒處理量:經過最佳化,可搭配記憶體快取和 GPU/NPU 回退功能,處理大型模型。

對於現有的 TensorFlow Lite 程式碼集,解譯器 API 仍是相容路徑;如需穩定的委派行為或預期使用傳統解譯器的第三方包裝函式,請使用這個 API。

加速器

  • CPU (預設):經過 XNNPACK 最佳化,支援動態形狀。
  • GPU:目前為 OpenCL 後端;WebGPU 和 Metal 後端可透過 Compiled Model API 使用。
  • NPU:支援 Qualcomm AI Engine Direct 和 MediaTek NeuroPilot 的 AOT/JIT;提供 Pixel AOT;預計支援 Apple/Intel NPU。

選擇 API 的時機

  • 如要以最快速度使用 GPU/NPU、零複製緩衝區或非同步執行,請使用已編譯模型 API
  • 如要盡可能與現有的 TensorFlow Lite 程式碼、工具或委派項目相容,請使用解譯器 API