使用 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 调试桥,并且已连接可使用 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 下载
Gemma3-1B SM8650 每个渠道 4 位 1280 658 下载
Gemma3-1B SM8550 每个渠道 4 位 1280 657 下载

您必须下载与 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 下载
Gemma3-1B MT6991 每个渠道 4 位 1280 986 下载

您必须下载与 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