Executar LLMs em NPUs usando o LiteRT-LM

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.

O LiteRT-LM é uma biblioteca C++ projetada para executar com eficiência pipelines de modelos de linguagem em uma ampla variedade de dispositivos, de smartphones a 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.

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

  1. Siga os pré-requisitos para configurar o ambiente e o repositório.
  2. Verifique se o adb está instalado e se um dispositivo está conectado.
  3. Consulte o Início rápido e a litert_lm_main demonstração da linha de comando.

Qualcomm AI Engine Direct

Etapa 1:faça o download do modelo .litertlm

Baixe um .litertlm que corresponda ao seu SoC (exemplos abaixo). Você pode consultar o SoC do seu dispositivo:

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"
Modelo SoC Quantização Tamanho do contexto Tamanho do modelo (MB) 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

Etapa 2:faça o download e extraia as bibliotecas do QAIRT

Faça o download e extraia o SDK do QAIRT e defina QAIRT_ROOT:

unzip <your_file.zip> -d ~/
QAIRT_ROOT=~/qairt/2.34.0.250424

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

Instale o Android NDK r28b+ e crie o build:

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

Etapa 4:execute o modelo no dispositivo

Defina o caminho do dispositivo e envie recursos:

export DEVICE_FOLDER=/data/local/tmp/
adb shell mkdir -p $DEVICE_FOLDER
export MODEL_PATH=<path-to-model.litertlm>
adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm
adb push $QAIRT_ROOT/lib/aarch64-android/* $DEVICE_FOLDER/
adb push bazel-bin/runtime/engine/litert_lm_main $DEVICE_FOLDER/
adb shell chmod +x $DEVICE_FOLDER/litert_lm_main

Execute:

adb shell "cd $DEVICE_FOLDER && \
  QAIRT_ROOT=$DEVICE_FOLDER \
  ./litert_lm_main --model=model.litertlm \
  --prompt='Explain the history of LiteRT in 3 bullet points' \
  --device=qualcomm_npu --rounds=1"

MediaTek NeuroPilot

Visão geral das etapas

O fluxo da MediaTek é semelhante ao da Qualcomm: use um .litertlm criado para seu SoC, inclua bibliotecas de tempo de execução do NeuroPilot, crie litert_lm_main, envie recursos e execute com --device=mediatek_npu.