• 文件 >
  • 在 Android 上使用 ExecuTorch
快捷方式

在 Android 上使用 ExecuTorch

為了在 Android 上使用,ExecuTorch 提供了 Java/Kotlin API 繫結和 Android 平臺整合,並以 AAR 檔案形式提供。

注意:本頁介紹透過 AAR 庫進行 Android 應用整合。ExecuTorch 的 C++ API 也可以用於 Android native 開發,相關文件可在有關交叉編譯的本頁面上找到。

安裝

所有 ExecuTorch Android 庫都打包到一個 Android 庫 (AAR) 中,即 executorch.aar,用於通用(影像/音訊處理)和 LLM (LLaMA) 用例。在每個版本釋出時,預構建的 AAR 檔案會被上傳到 Maven 和 S3。使用者也可以從原始碼構建 AAR。

庫內容

AAR 檔案包含供使用者整合到其 Java/Kotlin 應用程式碼中的 Java 庫,以及相應的 JNI 庫(.so 檔案),該檔案在 Java 程式碼初始化時載入。

  • Java 庫

  • JNI 包含相應 Java 程式碼的 JNI 繫結以及 ExecuTorch native 庫,包括

    • 核心 ExecuTorch 執行時庫

    • XNNPACK 後端

    • 可移植 kernels

    • 最佳化 kernels

    • 量化 kernels

    • LLaMa 特定的自定義 ops 庫。

  • 提供兩種 ABI 變體:arm64-v8a 和 x86_64。

該 AAR 庫可用於具有 arm64-v8a 或 x86_64 架構的通用 Android 裝置。它適用於各種外形因素,包括手機、平板電腦、電視盒等,因為它不包含任何 UI 元件。

從 Maven Central 使用 AAR

ExecuTorch 可在 Maven Central 上獲得。

只需將目標 org.pytorch:executorch-android:0.6.0-rc1 新增到您的 Android 應用依賴項 (build.gradle) 中,然後構建您的應用。

例如

# app/build.gradle.kts
dependencies {
    implementation("org.pytorch:executorch-android:0.6.0-rc1")
}

注意:如果您想使用 v0.5.0 版本,請使用依賴項 org.pytorch:executorch-android:0.5.1

單擊下面的截圖觀看關於如何在 Android Studio 中新增軟體包並執行簡單 ExecuTorch 模型的演示影片在 Android 上整合並執行 ExecuTorch

直接使用 AAR 檔案

您也可以直接在應用中指定 AAR 檔案。我們在每次釋出時或作為快照將預構建的 AAR 上傳到 S3。

main 分支的快照

日期

AAR

SHASUMS

2025-02-27

executorch.aar

executorch.aar.sha256sums

使用 AAR 檔案

將 AAR 檔案新增到您的應用中

  1. 下載 AAR。

  2. 將其作為檔案路徑新增到您的 gradle 構建規則中。

AAR 檔案本身不包含依賴資訊,不像 Maven 倉庫中的檔案捆綁了 pom.xml。Java 包需要 fbjnisoloader,目前要求使用者顯式宣告依賴項。因此,gradle 規則中還需要另外兩個 dependencies

implementation("com.facebook.soloader:soloader:0.10.5")
implementation("com.facebook.fbjni:fbjni:0.5.1")

示例用法

在您的應用工作目錄中,例如 executorch/examples/demo-apps/android/LlamaDemo,

mkdir -p app/libs
curl https://ossci-android.s3.amazonaws.com/executorch/release/v0.6.0-rc1/executorch.aar -o app/libs/executorch.aar

並在 gradle 中包含它

# app/build.gradle.kts
dependencies {
    implementation(files("libs/executorch.aar"))
    implementation("com.facebook.soloader:soloader:0.10.5")
    implementation("com.facebook.fbjni:fbjni:0.5.1")
}

現在您可以使用 ExecuTorch Android 庫編譯您的應用了。

從原始碼構建

scripts/build_android_library.sh 是一個幫助指令碼,用於構建 Java 庫(生成 .jar)、native 庫(生成 .so)和打包好的 AAR 檔案。

您需要 Android SDKNDK 才能使用它。

ExecuTorch CI 中當前使用的 NDK 版本:r27b。

您需要將 ANDROID_HOME 設定為 Android SDK 目錄,將 ANDROID_NDK 設定為正確的 NDK 根目錄(包含 NOTICE 檔案)。

export ANDROID_HOME=/path/to/sdk
export ANDROID_NDK=/path/to/ndk
sh scripts/build_android_library.sh

目前,該指令碼總是構建 XNNPACK 後端。

可選環境變數

可選地,在執行 build_android_library.sh 之前設定這些環境變數。

ANDROID_ABIS

如果您只需要為一個 ABI 構建 native 庫,請將環境變數 ANDROID_ABIS 設定為 arm64-v8ax86_64

export ANDROID_ABIS=arm64-v8a
# or
# export ANDROID_ABIS=x86_64
sh scripts/build_android_library.sh

EXECUTORCH_CMAKE_BUILD_TYPE

根據您的需求,將環境變數 EXECUTORCH_CMAKE_BUILD_TYPE 設定為 ReleaseDebug

使用 MediaTek 後端

要使用MediaTek 後端,在安裝並設定好 SDK 後,請將 NEURON_BUFFER_ALLOCATOR_LIBNEURON_USDK_ADAPTER_LIB 設定為對應的路徑。

使用 Qualcomm AI Engine 後端

要使用Qualcomm AI Engine 後端,在安裝並設定好 SDK 後,請將 QNN_SDK_ROOT 設定為對應的路徑。

使用 Vulkan 後端

要使用Vulkan 後端,請將 EXECUTORCH_BUILD_VULKAN 設定為 ON

Android 後端

可用於 Android 的後端如下

後端

型別

文件

XNNPACK

CPU

文件

MediaTek NeuroPilot

NPU

文件

Qualcomm AI Engine

NPU

文件

Vulkan

GPU

文件

執行時整合

這裡是一個 Java 程式碼示例,演示瞭如何將 ExecuTorch 整合到 Android 應用中

import org.pytorch.executorch.EValue;
import org.pytorch.executorch.Module;
import org.pytorch.executorch.Tensor;

public class MainActivity extends Activity {
    private Module module;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Load the ExecuTorch module
        Module module = Module.load("/data/local/tmp/add.pte");
        Tensor tensor1 = Tensor.fromBlob(new float[] {1.0f}, new long[] {1});
        Tensor tensor2 = Tensor.fromBlob(new float[] {20.0f}, new long[] {1});

        EValue eValue1 = EValue.from(tensor1);
        EValue eValue2 = EValue.from(tensor2);
        float result = module.forward(eValue1, eValue2)[0].toTensor().getDataAsFloatArray()[0];
    }
}

將對應的 .pte 檔案推送到手機

adb push extension/module/test/resources/add.pte /data/local/tmp/

此示例載入一個 ExecuTorch 模組,準備輸入資料,執行推理,並處理輸出資料。

請參考 DeepLabV3AndroidDemoLlamaDemo 獲取使用 ExecuTorch AAR 軟體包的程式碼示例。

Java API 參考

請參閱Java API 參考

文件

訪問 PyTorch 全面開發者文件

檢視文件

教程

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

檢視教程

資源

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

檢視資源