使用 LiteRT-LM 執行 LLM

LiteRT-LM 是一種跨平台程式庫,可在各種裝置 (從手機到嵌入式系統) 上有效執行語言模型管道。這項工具可協助開發人員建立及部署複雜的語言模型工作流程,現在還能與 NPU 完美整合。

在 CPU 和 GPU 上執行 LLM

如需跨平台開發和 CPU/GPU 硬體加速的詳細操作說明,請參閱 LiteRT-LM GitHub 存放區

在 NPU 上執行 LLM

神經處理單元 (NPU) 提供專為深度學習工作負載最佳化的專用硬體區塊。這類功能越來越常出現在現代單晶片系統 (SoC) 中,尤其是在行動裝置上。由於效能優異,因此非常適合執行 LLM 推論。

NPU 供應商

LiteRT-LM 支援使用 NPU 加速功能,透過下列供應商執行 LLM。請根據要試用的廠商選擇操作說明:

快速入門

如要開始使用,請先按照必要條件的操作說明設定環境和存放區。

此外,如要與 Android 裝置互動,請確認已正確安裝 Android Debug Bridge,並連結可使用 adb 存取的裝置。

如需更多詳細說明,請查看 LiteRT-LM 存放區的「快速入門」部分,並進一步瞭解 litert_lm_main 指令列範例

Qualcomm AI Engine Direct

如要在 Qualcomm NPU 上執行 LLM,請按照下列步驟操作:

步驟 1:下載 .litertlm 模型 LiteRT-LM 執行階段專為處理 .litertlm 格式的模型而設計。 如要尋找及下載相容的型號,請參閱下表。

型號 SoC 量化 脈絡長度 模型大小 (Mb) 下載連結
Gemma3-1B SM8750 每個通道 4 位元 1280 658 download
Gemma3-1B SM8650 每個通道 4 位元 1280 658 download
Gemma3-1B SM8550 每個通道 4 位元 1280 657 download

您必須下載與 SoC 相對應的模型。 以下是範例指令,可協助您取得 Hugging Face 連結,下載適用於手機 SoC 的正確模型 (請注意,您必須登入並確認表單,才能取得下載檔案的權限)。請確認已連線的裝置可透過 adb 存取。

SOC_MODEL=$(adb shell getprop ro.soc.model | tr '[:upper:]' '[:lower:]')
echo "https://huggingface.co/litert-community/Gemma3-1B-IT/blob/main/Gemma3-1B-IT_q4_ekv1280_${SOC_MODEL}.litertlm"

確認支援表格中列有 $SOC_MODEL。如果使用不支援的機型,系統產生的連結將無法運作。我們正在定期新增 NPU 支援,請稍後再回來查看裝置是否支援。

步驟 2:下載並解壓縮 QAIRT 程式庫 如要使用 Qualcomm NPU 執行模型,裝置上必須有相關聯的執行階段程式庫。您可以從這個連結下載 QAIRT SDK,然後解壓縮檔案。將變數 QAIRT_ROOT (會在後續步驟中使用) 設定為指向包含版本號碼的解壓縮資料夾,例如:

unzip <your_file.zip> -d ~/

QAIRT_ROOT=~/qairt/2.42.0.251225

步驟 3:建構 LiteRT-LM 執行階段 / 程式庫

在 Linux 中開發

如要建構 Android 的二進位檔,請從 https://developer.android.com/ndk/downloads#stable-downloads 安裝 NDK r28b 以上版本。具體步驟如下:

  • 前往 https://developer.android.com/ndk/downloads#stable-downloads 下載 zip 檔案。
  • zip 檔案解壓縮到偏好的位置 (例如 /path/to/AndroidNDK/)
  • ANDROID_NDK_HOME 指向 NDK 目錄。如下所示:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

提示:請確認 ANDROID_NDK_HOME 指向的目錄包含 README.md

設定完成後,請嘗試建構 litert_lm_main 二進位檔:

bazel build --config=android_arm64 //runtime/engine:litert_lm_main

此外,我們應建構調度 API 程式庫,讓 LiteRT-LM 執行階段與 NPU 互動:

bazel build --config=android_arm64 \
    @litert//litert/vendors/qualcomm/dispatch:dispatch_api_so

在 macOS 中開發

Xcode 指令列工具包含 clang。如果先前未安裝,請執行 xcode-select --install

如要建構 Android 的二進位檔,請從 https://developer.android.com/ndk/downloads#stable-downloads 安裝 NDK r28b 以上版本。具體步驟如下:

  • 前往 https://developer.android.com/ndk/downloads#stable-downloads 下載 .dmg 檔案。
  • 開啟 .dmg 檔案,然後將 AndroidNDK* 檔案移至偏好的位置 (例如 /path/to/AndroidNDK/)。
  • ANDROID_NDK_HOME 指向 NDK 目錄。如下所示:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

提示:請確認 ANDROID_NDK_HOME 指向的目錄包含 README.md

設定完成後,請嘗試建構 litert_lm_main 二進位檔:

bazel build --config=android_arm64 //runtime/engine:litert_lm_main

此外,我們應建構調度 API 程式庫,讓 LiteRT-LM 執行階段與 NPU 互動:

bazel build --config=android_arm64 \
    @litert//litert/vendors/qualcomm/dispatch:dispatch_api_so

步驟 4:在裝置上執行模型 成功建構二進位檔後,我們現在可以嘗試在裝置上執行模型。確認您擁有 DEVICE_FOLDER 的寫入存取權:

如要在 Android 裝置上執行二進位檔,我們必須推送幾個資產/二進位檔。首先設定 DEVICE_FOLDER,並確認您擁有寫入權限 (通常您可以將項目放在 /data/local/tmp/ 下方):

export DEVICE_FOLDER=/data/local/tmp/
adb shell mkdir -p $DEVICE_FOLDER

export MODEL_PATH=<path to your downloaded .litertlm >

推送 .litertlm 檔案。提示:您只需要推送這些資產一次。

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

推送 QAIRT 程式庫。您可以在步驟 2 $QAIRT_ROOT/lib/aarch64-android/ 中解壓縮的資料夾中找到這些檔案。請注意,QAIRT_ROOT 應包含版本號碼,例如 2.42.0.251225

adb push $QAIRT_ROOT/lib/aarch64-android/libQnnHtp*Stub.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/aarch64-android/libQnnHtp.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/aarch64-android/libQnnSystem.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/aarch64-android/libQnnHtpPrepare.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/hexagon-*/unsigned/libQnnHtp*Skel.so $DEVICE_FOLDER

推送在步驟 3 中編譯的調度 API 和主要二進位檔。

adb push bazel-bin/external/litert/litert/vendors/qualcomm/*/*.so \
    $DEVICE_FOLDER
adb push prebuilt/android_arm64/*.so $DEVICE_FOLDER
adb push bazel-bin/runtime/engine/litert_lm_main $DEVICE_FOLDER

現在,您可以執行二進位檔。

adb shell LD_LIBRARY_PATH=$DEVICE_FOLDER ADSP_LIBRARY_PATH=$DEVICE_FOLDER \
    $DEVICE_FOLDER/litert_lm_main \
    --backend=npu \
    --model_path=$DEVICE_FOLDER/model.litertlm

MediaTek NeuroPilot

如要在 MediaTek NPU 上執行 LLM,請按照下列步驟操作:

步驟 1:下載 .litertlm 模型 LiteRT-LM 執行階段專為處理 .litertlm 格式的模型而設計。 如要尋找及下載相容的型號,請參閱下表。

型號 SoC 量化 脈絡長度 模型大小 (Mb) 下載連結
Gemma3-1B MT6989 每個通道 4 位元 1280 985 download
Gemma3-1B MT6991 每個通道 4 位元 1280 986 download

您必須下載與 SoC 相對應的模型。 以下是範例指令,可協助您取得 Hugging Face 連結,下載適用於手機 SoC 的正確模型 (請注意,您必須登入並確認表單,才能取得下載檔案的權限)。請確認已連線的裝置可透過 adb 存取。

SOC_MODEL=$(adb shell getprop ro.soc.model | tr '[:upper:]' '[:lower:]')
echo "https://huggingface.co/litert-community/Gemma3-1B-IT/blob/main/Gemma3-1B-IT_q4_ekv1280_${SOC_MODEL}.litertlm"

確認支援表格中列有 $SOC_MODEL。如果使用不支援的機型,系統產生的連結將無法運作。我們正在定期新增 NPU 支援,請稍後再回來查看裝置是否支援。

步驟 2:建構 LiteRT-LM 執行階段 / 程式庫

在 Linux 中開發

如要建構 Android 的二進位檔,請從 https://developer.android.com/ndk/downloads#stable-downloads 安裝 NDK r28b 以上版本。具體步驟如下:

  • 前往 https://developer.android.com/ndk/downloads#stable-downloads 下載 zip 檔案。
  • zip 檔案解壓縮到偏好的位置 (例如 /path/to/AndroidNDK/)
  • ANDROID_NDK_HOME 指向 NDK 目錄。如下所示:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

提示:請確認 ANDROID_NDK_HOME 指向的目錄包含 README.md

設定完成後,請嘗試建構 litert_lm_main 二進位檔:

bazel build --config=android_arm64 //runtime/engine:litert_lm_main

此外,我們應建構調度 API 程式庫,讓 LiteRT-LM 執行階段與 NPU 互動:

bazel build --config=android_arm64 \
    @litert//litert/vendors/mediatek/dispatch:dispatch_api_so

在 macOS 中開發

Xcode 指令列工具包含 clang。如果先前未安裝,請執行 xcode-select --install

如要建構 Android 的二進位檔,請從 https://developer.android.com/ndk/downloads#stable-downloads 安裝 NDK r28b 以上版本。具體步驟如下:

  • 前往 https://developer.android.com/ndk/downloads#stable-downloads 下載 .dmg 檔案。
  • 開啟 .dmg 檔案,然後將 AndroidNDK* 檔案移至偏好的位置 (例如 /path/to/AndroidNDK/)。
  • ANDROID_NDK_HOME 指向 NDK 目錄。如下所示:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

提示:請確認 ANDROID_NDK_HOME 指向的目錄包含 README.md

設定完成後,請嘗試建構 litert_lm_main 二進位檔:

bazel build --config=android_arm64 //runtime/engine:litert_lm_main

此外,我們應建構調度 API 程式庫,讓 LiteRT-LM 執行階段與 NPU 互動:

bazel build --config=android_arm64 \
    @litert//litert/vendors/mediatek/dispatch:dispatch_api_so

步驟 3:在裝置上執行模型 二進位檔建構完成後,我們現在可以嘗試在裝置上執行模型。確認您擁有 DEVICE_FOLDER 的寫入存取權:

如要在 Android 裝置上執行二進位檔,我們必須推送幾個資產/二進位檔。首先設定 DEVICE_FOLDER,並確認您擁有寫入權限 (通常您可以將項目放在 /data/local/tmp/ 下方):

export DEVICE_FOLDER=/data/local/tmp/
adb shell mkdir -p $DEVICE_FOLDER

export MODEL_PATH=<path to your downloaded .litertlm >

推送 .litertlm 檔案。提示:您只需要推送這些資產一次。

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

推送在步驟 2 中編譯的調度 API 和主要二進位檔。

adb push bazel-bin/external/litert/litert/vendors/mediatek/*/*.so \
    $DEVICE_FOLDER
adb push prebuilt/android_arm64/*.so $DEVICE_FOLDER
adb push bazel-bin/runtime/engine/litert_lm_main $DEVICE_FOLDER

現在,您可以執行二進位檔。

adb shell LD_LIBRARY_PATH=$DEVICE_FOLDER \
    $DEVICE_FOLDER/litert_lm_main \
    --backend=npu \
    --model_path=$DEVICE_FOLDER/model.litertlm