Ejecuta LLMs con LiteRT-LM

LiteRT-LM es una biblioteca multiplataforma diseñada para ejecutar de manera eficiente canalizaciones de modelos de lenguaje en una amplia variedad de dispositivos, desde teléfonos celulares hasta sistemas integrados. Proporciona a los desarrolladores las herramientas para crear e implementar flujos de trabajo sofisticados de modelos de lenguaje, ahora con una integración perfecta de la NPU.

Ejecuta LLMs en CPU y GPU

Consulta el repositorio de GitHub de LiteRT-LM para obtener instrucciones detalladas sobre el desarrollo multiplataforma y la aceleración por hardware de CPU/GPU.

Ejecuta LLMs en la NPU

Las unidades de procesamiento neuronal (NPU) ofrecen bloques de hardware especializados y optimizados para cargas de trabajo de aprendizaje profundo. Cada vez están más disponibles en los sistemas modernos en un chip (SoC), especialmente en dispositivos móviles. Su alto rendimiento los hace ideales para ejecutar la inferencia de LLM.

Proveedores de NPU

LiteRT-LM admite la ejecución de LLM con aceleración de NPU con los siguientes proveedores. Elige las instrucciones según el proveedor que quieras probar:

Inicio rápido

Para comenzar, primero sigue las instrucciones de los requisitos previos para configurar el entorno y el repositorio.

Además, para poder interactuar con tu dispositivo Android, asegúrate de haber instalado correctamente Android Debug Bridge y de tener un dispositivo conectado al que se pueda acceder con adb.

Para obtener instrucciones más detalladas, consulta la sección de inicio rápido en el repositorio de LiteRT-LM y obtén más información sobre la litert_lm_main demostración de la línea de comandos.

Qualcomm AI Engine Direct

Los pasos para ejecutar los LLM en la NPU de Qualcomm son los siguientes:

Paso 1: Descarga el modelo .litertlm El tiempo de ejecución de LiteRT-LM está diseñado para funcionar con modelos en formato .litertlm. En la siguiente tabla, puedes encontrar y descargar modelos compatibles.

Modelo SoC Cuantización Tamaño del contexto Tamaño del modelo (MB) Vínculo de descarga
Gemma3-1B SM8750 4 bits por canal 1280 658 descargar
Gemma3-1B SM8650 4 bits por canal 1280 658 descargar
Gemma3-1B SM8550 4 bits por canal 1280 657 descargar

Deberás descargar el modelo que corresponda a tu SoC. A continuación, se muestra un ejemplo de comando que puede ayudarte a obtener el vínculo de Hugging Face con el que puedes descargar el modelo correcto para el SoC de tu teléfono (ten en cuenta que deberás acceder y confirmar el formulario para tener permiso para descargar el archivo). Debes asegurarte de que haya un dispositivo conectado al que se pueda acceder con 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"

Verifica que $SOC_MODEL aparezca en la tabla de compatibilidad. El vínculo generado no funcionará para los modelos no compatibles. Se agrega compatibilidad con NPUs nuevas con regularidad, así que vuelve a consultar más adelante para ver si tu dispositivo es compatible.

Paso 2: Descarga y extrae las bibliotecas de QAIRT Para ejecutar el modelo con la NPU de Qualcomm, se requieren bibliotecas de tiempo de ejecución asociadas en el dispositivo. Se puede descargar el SDK de QAIRT desde este vínculo y extraer el archivo. Configura la variable QAIRT_ROOT (la usarás en pasos posteriores) para que apunte a la carpeta descomprimida que contiene el número de versión, por ejemplo:

unzip <your_file.zip> -d ~/

QAIRT_ROOT=~/qairt/2.42.0.251225

Paso 3: Compila el entorno de ejecución o las bibliotecas de LiteRT-LM

Desarrolla en Linux

Para poder compilar el archivo binario para Android, se debe instalar el NDK r28b o una versión posterior desde https://developer.android.com/ndk/downloads#stable-downloads. Estos son los pasos específicos:

  • Descarga el archivo zip desde https://developer.android.com/ndk/downloads#stable-downloads.
  • Extrae el archivo zip a la ubicación que prefieras (por ejemplo, /path/to/AndroidNDK/).
  • Haz que ANDROID_NDK_HOME apunte al directorio del NDK. Debería verse de la siguiente manera:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

Sugerencias: Asegúrate de que tu ANDROID_NDK_HOME apunte al directorio que contiene README.md.

Con la configuración, intenta compilar el objeto binario litert_lm_main:

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

Además, debemos compilar la biblioteca de la API de envío para que el tiempo de ejecución de LiteRT-LM interactúe con la NPU:

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

Desarrolla en macOS

Las herramientas de línea de comandos de Xcode incluyen clang. Ejecuta xcode-select --install si no lo instalaste antes.

Para poder compilar el archivo binario para Android, se debe instalar el NDK r28b o una versión posterior desde https://developer.android.com/ndk/downloads#stable-downloads. Estos son los pasos específicos:

  • Descarga el archivo .dmg desde https://developer.android.com/ndk/downloads#stable-downloads.
  • Abre el archivo .dmg y mueve el archivo AndroidNDK* a la ubicación que prefieras (por ejemplo, /path/to/AndroidNDK/).
  • Haz que ANDROID_NDK_HOME apunte al directorio del NDK. Debería verse de la siguiente manera:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

Sugerencias: Asegúrate de que tu ANDROID_NDK_HOME apunte al directorio que contiene README.md.

Con la configuración, intenta compilar el objeto binario litert_lm_main:

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

Además, debemos compilar la biblioteca de la API de envío para que el tiempo de ejecución de LiteRT-LM interactúe con la NPU:

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

Paso 4: Ejecuta el modelo en el dispositivo Después de que se compile correctamente el objeto binario, podemos intentar ejecutar el modelo en el dispositivo. Asegúrate de tener acceso de escritura a DEVICE_FOLDER:

Para ejecutar el archivo binario en tu dispositivo Android, debemos transferir algunos recursos o archivos binarios. Primero, configura tu DEVICE_FOLDER y asegúrate de tener acceso de escritura a él (por lo general, puedes colocar elementos en /data/local/tmp/):

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

export MODEL_PATH=<path to your downloaded .litertlm >

Envía el archivo .litertlm. Sugerencia: Solo debes enviar esos recursos una vez.

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

Envía las bibliotecas de QAIRT. Puedes encontrarlos en la carpeta descomprimida en el paso 2 $QAIRT_ROOT/lib/aarch64-android/. Ten en cuenta que QAIRT_ROOT debe contener el número de versión, p.ej., 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

Envía la API de envío y el archivo binario principal compilados en el paso 3.

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

Ahora puedes ejecutar el objeto binario.

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

Los pasos para ejecutar los LLM en la NPU de MediaTek son los siguientes:

Paso 1: Descarga el modelo .litertlm El tiempo de ejecución de LiteRT-LM está diseñado para funcionar con modelos en formato .litertlm. En la siguiente tabla, puedes encontrar y descargar modelos compatibles.

Modelo SoC Cuantización Tamaño del contexto Tamaño del modelo (MB) Vínculo de descarga
Gemma3-1B MT6989 4 bits por canal 1280 985 descargar
Gemma3-1B MT6991 4 bits por canal 1280 986 descargar

Deberás descargar el modelo que corresponda a tu SoC. A continuación, se muestra un ejemplo de comando que puede ayudarte a obtener el vínculo de Hugging Face con el que puedes descargar el modelo correcto para el SoC de tu teléfono (ten en cuenta que deberás acceder y confirmar el formulario para tener permiso para descargar el archivo). Debes asegurarte de que haya un dispositivo conectado al que se pueda acceder con 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"

Verifica que $SOC_MODEL aparezca en la tabla de compatibilidad. El vínculo generado no funcionará para los modelos no compatibles. Se agrega compatibilidad con NPUs nuevas con regularidad, así que vuelve a consultar más adelante para ver si tu dispositivo es compatible.

Paso 2:Compila el entorno de ejecución o las bibliotecas de LiteRT-LM

Desarrolla en Linux

Para poder compilar el archivo binario para Android, se debe instalar el NDK r28b o una versión posterior desde https://developer.android.com/ndk/downloads#stable-downloads. Estos son los pasos específicos:

  • Descarga el archivo zip desde https://developer.android.com/ndk/downloads#stable-downloads.
  • Extrae el archivo zip a la ubicación que prefieras (por ejemplo, /path/to/AndroidNDK/).
  • Haz que ANDROID_NDK_HOME apunte al directorio del NDK. Debería verse de la siguiente manera:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

Sugerencias: Asegúrate de que tu ANDROID_NDK_HOME apunte al directorio que contiene README.md.

Con la configuración, intenta compilar el objeto binario litert_lm_main:

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

Además, debemos compilar la biblioteca de la API de envío para que el tiempo de ejecución de LiteRT-LM interactúe con la NPU:

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

Desarrolla en macOS

Las herramientas de línea de comandos de Xcode incluyen clang. Ejecuta xcode-select --install si no lo instalaste antes.

Para poder compilar el archivo binario para Android, se debe instalar el NDK r28b o una versión posterior desde https://developer.android.com/ndk/downloads#stable-downloads. Estos son los pasos específicos:

  • Descarga el archivo .dmg desde https://developer.android.com/ndk/downloads#stable-downloads.
  • Abre el archivo .dmg y mueve el archivo AndroidNDK* a la ubicación que prefieras (por ejemplo, /path/to/AndroidNDK/).
  • Haz que ANDROID_NDK_HOME apunte al directorio del NDK. Debería verse de la siguiente manera:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

Sugerencias: Asegúrate de que tu ANDROID_NDK_HOME apunte al directorio que contiene README.md.

Con la configuración, intenta compilar el objeto binario litert_lm_main:

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

Además, debemos compilar la biblioteca de la API de envío para que el tiempo de ejecución de LiteRT-LM interactúe con la NPU:

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

Paso 3: Ejecuta el modelo en el dispositivo Después de que se compile correctamente el objeto binario, podemos intentar ejecutar el modelo en el dispositivo. Asegúrate de tener acceso de escritura a DEVICE_FOLDER:

Para ejecutar el archivo binario en tu dispositivo Android, debemos transferir algunos recursos o archivos binarios. Primero, configura tu DEVICE_FOLDER y asegúrate de tener acceso de escritura a él (por lo general, puedes colocar elementos en /data/local/tmp/):

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

export MODEL_PATH=<path to your downloaded .litertlm >

Envía el archivo .litertlm. Sugerencia: Solo debes enviar esos recursos una vez.

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

Envía la API de envío y el archivo binario principal compilado en el paso 2.

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

Ahora puedes ejecutar el objeto binario.

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