Executar LLMs usando o LiteRT-LM

O LiteRT-LM é uma biblioteca multiplataforma projetada para executar com eficiência pipelines de modelos de linguagem em uma ampla variedade de dispositivos, desde smartphones até sistemas incorporados. Ele oferece aos desenvolvedores as ferramentas para criar e implantar fluxos de trabalho sofisticados de modelos de linguagem, agora com integração perfeita da NPU.

Executar LLMs em CPUs e GPUs

Consulte o repositório do GitHub LiteRT-LM para instruções detalhadas sobre desenvolvimento multiplataforma e aceleração de hardware de CPU/GPU.

Executar LLMs na NPU

As Unidades de Processamento Neural (NPUs) oferecem blocos de hardware especializados otimizados para cargas de trabalho de aprendizado profundo. Eles estão cada vez mais disponíveis em sistemas modernos em um chip (SoCs), especialmente em dispositivos móveis. O alto desempenho delas as torna ideais para executar inferência de LLM.

Fornecedores de NPU

O LiteRT-LM é compatível com a execução de LLMs usando aceleração de NPU com os seguintes fornecedores. Escolha as instruções de acordo com o fornecedor que você quer testar:

Início rápido

Para começar, siga as instruções de Pré-requisitos para configurar o ambiente e o repositório.

Além disso, para interagir com seu dispositivo Android, confira se você instalou corretamente o Android Debug Bridge e se tem um dispositivo conectado que pode ser acessado usando adb.

Para mais detalhes, consulte a seção Início rápido no repositório LiteRT-LM e encontre mais informações sobre a litert_lm_main demonstração da linha de comando.

Qualcomm AI Engine Direct

As etapas para executar os LLMs na NPU da Qualcomm são as seguintes:

Etapa 1:faça o download do modelo .litertlm O ambiente de execução LiteRT-LM foi projetado para funcionar com modelos no formato .litertlm. Encontre e faça o download de modelos compatíveis na tabela a seguir.

Modelo SoC Quantização Tamanho do contexto Tamanho do modelo (MB) Link de download
Gemma3-1B SM8750 4 bits por canal 1280 658 download
Gemma3-1B SM8650 4 bits por canal 1280 658 download
Gemma3-1B SM8550 4 bits por canal 1280 657 download

Você precisa baixar o modelo que corresponde ao seu SoC. Confira um exemplo de comando que pode ajudar você a acessar o link do Hugging Face que pode baixar o modelo correto para o SoC do seu smartphone. Faça login e aceite o formulário para ter permissão de baixar o arquivo. Verifique se há um dispositivo conectado que pode ser acessado usando o 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"

Verifique se o $SOC_MODEL está listado na tabela de suporte. O link gerado não vai funcionar para modelos sem suporte. O suporte para novas NPUs é adicionado regularmente. Confira mais tarde para saber se seu dispositivo é compatível.

Etapa 2:faça o download e extraia as bibliotecas do QAIRT Para executar o modelo usando a NPU da Qualcomm, são necessárias bibliotecas de tempo de execução associadas no dispositivo. É possível fazer o download do SDK do QAIRT neste link e extrair o arquivo. Defina a variável QAIRT_ROOT (será usada em etapas posteriores) para apontar para a pasta descompactada que contém o número da versão. Por exemplo:

unzip <your_file.zip> -d ~/

QAIRT_ROOT=~/qairt/2.42.0.251225

Etapa 3:crie o ambiente de execução / bibliotecas do LiteRT-LM

Desenvolver no Linux

Para criar o binário para Android, é necessário instalar o NDK r28b ou mais recente em https://developer.android.com/ndk/downloads#stable-downloads. As etapas específicas são:

  • Faça o download do arquivo zip em https://developer.android.com/ndk/downloads#stable-downloads.
  • Extraia o arquivo zip para o local de sua preferência (por exemplo, /path/to/AndroidNDK/).
  • Faça com que ANDROID_NDK_HOME aponte para o diretório do NDK. Ele vai ser algo assim:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

Dicas: verifique se o ANDROID_NDK_HOME aponta para o diretório que tem README.md.

Com a configuração feita, tente criar o binário litert_lm_main:

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

Além disso, precisamos criar a biblioteca de API de envio para que o tempo de execução do LiteRT-LM interaja com a NPU:

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

Desenvolver no macOS

As ferramentas de linha de comando do Xcode incluem o clang. Execute xcode-select --install se ele não tiver sido instalado antes.

Para criar o binário para Android, é necessário instalar o NDK r28b ou mais recente em https://developer.android.com/ndk/downloads#stable-downloads. As etapas específicas são:

  • Faça o download do arquivo .dmg em https://developer.android.com/ndk/downloads#stable-downloads.
  • Abra o arquivo .dmg e mova o arquivo AndroidNDK* para o local preferido (por exemplo, /path/to/AndroidNDK/).
  • Faça com que ANDROID_NDK_HOME aponte para o diretório do NDK. Ele vai ser algo assim:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

Dicas: verifique se o ANDROID_NDK_HOME aponta para o diretório que tem README.md.

Com a configuração feita, tente criar o binário litert_lm_main:

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

Além disso, precisamos criar a biblioteca de API de envio para que o tempo de execução do LiteRT-LM interaja com a NPU:

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

Etapa 4:execute o modelo no dispositivo Depois que o binário for criado, tente executar o modelo no dispositivo. Verifique se você tem acesso de gravação ao DEVICE_FOLDER:

Para executar o binário no seu dispositivo Android, precisamos enviar alguns recursos / binários. Primeiro, defina seu DEVICE_FOLDER e verifique se você tem acesso de gravação a ele. Normalmente, é possível colocar itens em /data/local/tmp/:

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

export MODEL_PATH=<path to your downloaded .litertlm >

Envie o arquivo .litertlm. Dica: você só precisa enviar esses recursos uma vez.

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

Envie as bibliotecas do QAIRT. Eles estão localizados na pasta descompactada em Etapa 2 $QAIRT_ROOT/lib/aarch64-android/. O QAIRT_ROOT precisa conter o número da versão, por exemplo, 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

Envie a API de envio e o binário principal compilado na etapa 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

Agora, você pode executar o binário.

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

As etapas para executar os LLMs na NPU da MediaTek são as seguintes:

Etapa 1:faça o download do modelo .litertlm O ambiente de execução LiteRT-LM foi projetado para funcionar com modelos no formato .litertlm. Encontre e faça o download de modelos compatíveis na tabela a seguir.

Modelo SoC Quantização Tamanho do contexto Tamanho do modelo (MB) Link de download
Gemma3-1B MT6989 4 bits por canal 1280 985 download
Gemma3-1B MT6991 4 bits por canal 1280 986 download

Você precisa baixar o modelo que corresponde ao seu SoC. Confira um exemplo de comando que pode ajudar você a acessar o link do Hugging Face que pode baixar o modelo correto para o SoC do seu smartphone. Faça login e aceite o formulário para ter permissão de baixar o arquivo. Verifique se há um dispositivo conectado que pode ser acessado usando o 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"

Verifique se o $SOC_MODEL está listado na tabela de suporte. O link gerado não vai funcionar para modelos sem suporte. O suporte para novas NPUs é adicionado regularmente. Confira mais tarde para saber se seu dispositivo é compatível.

Etapa 2:crie o ambiente de execução / bibliotecas do LiteRT-LM

Desenvolver no Linux

Para criar o binário para Android, é necessário instalar o NDK r28b ou mais recente em https://developer.android.com/ndk/downloads#stable-downloads. As etapas específicas são:

  • Faça o download do arquivo zip em https://developer.android.com/ndk/downloads#stable-downloads.
  • Extraia o arquivo zip para o local de sua preferência (por exemplo, /path/to/AndroidNDK/).
  • Faça com que ANDROID_NDK_HOME aponte para o diretório do NDK. Ele vai ser algo assim:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

Dicas: verifique se o ANDROID_NDK_HOME aponta para o diretório que tem README.md.

Com a configuração feita, tente criar o binário litert_lm_main:

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

Além disso, precisamos criar a biblioteca de API de envio para que o tempo de execução do LiteRT-LM interaja com a NPU:

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

Desenvolver no macOS

As ferramentas de linha de comando do Xcode incluem o clang. Execute xcode-select --install se ele não tiver sido instalado antes.

Para criar o binário para Android, é necessário instalar o NDK r28b ou mais recente em https://developer.android.com/ndk/downloads#stable-downloads. As etapas específicas são:

  • Faça o download do arquivo .dmg em https://developer.android.com/ndk/downloads#stable-downloads.
  • Abra o arquivo .dmg e mova o arquivo AndroidNDK* para o local preferido (por exemplo, /path/to/AndroidNDK/).
  • Faça com que ANDROID_NDK_HOME aponte para o diretório do NDK. Ele vai ser algo assim:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

Dicas: verifique se o ANDROID_NDK_HOME aponta para o diretório que tem README.md.

Com a configuração feita, tente criar o binário litert_lm_main:

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

Além disso, precisamos criar a biblioteca de API de envio para que o tempo de execução do LiteRT-LM interaja com a NPU:

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

Etapa 3:execute o modelo no dispositivo Depois que o binário for criado, tente executar o modelo no dispositivo. Verifique se você tem acesso de gravação ao DEVICE_FOLDER:

Para executar o binário no seu dispositivo Android, precisamos enviar alguns recursos / binários. Primeiro, defina seu DEVICE_FOLDER e verifique se você tem acesso de gravação a ele. Normalmente, é possível colocar itens em /data/local/tmp/:

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

export MODEL_PATH=<path to your downloaded .litertlm >

Envie o arquivo .litertlm. Dica: você só precisa enviar esses recursos uma vez.

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

Envie a API de envio e o binário principal compilado na etapa 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

Agora, você pode executar o binário.

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