Esegui LLM utilizzando LiteRT-LM

LiteRT-LM è una libreria multipiattaforma progettata per eseguire in modo efficiente pipeline di modelli linguistici su un'ampia gamma di dispositivi, dai cellulari ai sistemi incorporati. Fornisce agli sviluppatori gli strumenti per creare e implementare flussi di lavoro sofisticati per modelli linguistici, ora con un'integrazione perfetta della NPU.

Esegui LLM su CPU e GPU

Consulta il repository GitHub LiteRT-LM per istruzioni dettagliate sullo sviluppo multipiattaforma e sull'accelerazione hardware di CPU/GPU.

Eseguire LLM sulla NPU

Le NPU (Neural Processing Unit) offrono blocchi hardware specializzati ottimizzati per i carichi di lavoro di deep learning. Sono sempre più disponibili nei moderni system on a chip (SoC), soprattutto sui dispositivi mobili. Le loro prestazioni elevate le rendono ideali per l'esecuzione dell'inferenza LLM.

Fornitori di NPU

LiteRT-LM supporta l'esecuzione di LLM utilizzando l'accelerazione NPU con i seguenti fornitori. Scegli le istruzioni in base al fornitore che vuoi provare:

Avvio rapido

Per iniziare, segui le istruzioni Prerequisiti per configurare l'ambiente e il repository.

Inoltre, per poter interagire con il tuo dispositivo Android, assicurati di aver installato correttamente Android Debug Bridge e di avere un dispositivo connesso a cui è possibile accedere utilizzando adb.

Per istruzioni più dettagliate, consulta la sezione Guida rapida nel repository LiteRT-LM e scopri di più sulla litert_lm_main demo della riga di comando.

Qualcomm AI Engine Direct

I passaggi per eseguire i LLM sulla NPU Qualcomm sono i seguenti:

Passaggio 1: scarica il .litertlmmodello Il runtime LiteRT-LM è progettato per funzionare con i modelli in formato .litertlm. Puoi trovare e scaricare i modelli compatibili nella tabella seguente.

Modello SoC Quantizzazione Dimensioni del contesto Dimensione modello (MB) Link di download
Gemma3-1B SM8750 4 bit per canale 1280 658 scaricare
Gemma3-1B SM8650 4 bit per canale 1280 658 scaricare
Gemma3-1B SM8550 4 bit per canale 1280 657 scaricare

Dovrai scaricare il modello corrispondente al tuo SoC. Di seguito è riportato un comando di esempio che può aiutarti a ottenere il link di Hugging Face che può scaricare il modello corretto per il SoC del tuo smartphone (tieni presente che dovrai accedere e confermare il modulo per avere l'autorizzazione a scaricare il file). Assicurati che sia presente un dispositivo connesso a cui sia possibile accedere utilizzando 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 che $SOC_MODEL sia elencato nella tabella di supporto. Il link generato non funzionerà per i modelli non supportati. Il supporto per le NPU viene aggiunto regolarmente, quindi controlla di nuovo più avanti per vedere se il tuo dispositivo è supportato.

Passaggio 2: scarica ed estrai le librerie QAIRT Per eseguire il modello utilizzando la NPU Qualcomm, sono necessarie librerie di runtime associate sul dispositivo. È possibile scaricare l'SDK QAIRT da questo link ed estrarre il file. Imposta la variabile QAIRT_ROOT (la utilizzerai nei passaggi successivi) in modo che punti alla cartella decompressa che contiene il numero di versione, ad esempio:

unzip <your_file.zip> -d ~/

QAIRT_ROOT=~/qairt/2.42.0.251225

Passaggio 3: crea il runtime / le librerie LiteRT-LM

Sviluppare in Linux

Per poter creare il binario per Android, è necessario installare NDK r28b o versioni successive da https://developer.android.com/ndk/downloads#stable-downloads. I passaggi specifici sono:

  • Scarica il file zip da https://developer.android.com/ndk/downloads#stable-downloads.
  • Estrai il file zip nella posizione che preferisci (ad esempio /path/to/AndroidNDK/)
  • Imposta ANDROID_NDK_HOME in modo che punti alla directory NDK. Dovrebbe essere qualcosa del genere:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

Suggerimenti: assicurati che ANDROID_NDK_HOME punti alla directory che contiene README.md.

Con la configurazione, prova a creare il binario litert_lm_main:

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

Inoltre, dobbiamo creare la libreria API dispatch affinché il runtime LiteRT-LM interagisca con la NPU:

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

Sviluppare in macOS

Gli strumenti a riga di comando Xcode includono clang. Esegui xcode-select --install se non è mai stato installato.

Per poter creare il binario per Android, è necessario installare NDK r28b o versioni successive da https://developer.android.com/ndk/downloads#stable-downloads. I passaggi specifici sono:

  • Scarica il file .dmg da https://developer.android.com/ndk/downloads#stable-downloads.
  • Apri il file .dmg e sposta il file AndroidNDK* nella posizione che preferisci (ad esempio /path/to/AndroidNDK/).
  • Imposta ANDROID_NDK_HOME in modo che punti alla directory NDK. Dovrebbe essere qualcosa del genere:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

Suggerimenti: assicurati che ANDROID_NDK_HOME punti alla directory che contiene README.md.

Con la configurazione, prova a creare il binario litert_lm_main:

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

Inoltre, dobbiamo creare la libreria API dispatch affinché il runtime LiteRT-LM interagisca con la NPU:

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

Passaggio 4: esegui il modello sul dispositivo Una volta creato correttamente il file binario, possiamo provare a eseguire il modello sul dispositivo. Assicurati di disporre dell'accesso in scrittura a DEVICE_FOLDER:

Per eseguire il binario sul tuo dispositivo Android, dobbiamo inviare alcuni asset/binari. Per prima cosa, imposta il tuo DEVICE_FOLDER, assicurati di avere accesso in scrittura a questo percorso (in genere puoi inserire elementi in /data/local/tmp/):

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

export MODEL_PATH=<path to your downloaded .litertlm >

Inserisci il file .litertlm. Suggerimento: devi eseguire il push di questi asset una sola volta.

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

Esegui il push delle librerie QAIRT. Puoi trovarli nella cartella decompressa nel Passaggio 2 $QAIRT_ROOT/lib/aarch64-android/. Tieni presente che QAIRT_ROOT deve contenere il numero di versione, ad es. 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

Esegui il push dell'API Dispatch e del binario principale compilato nel passaggio 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

Ora puoi eseguire il 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

I passaggi per eseguire i LLM sulla NPU MediaTek sono i seguenti:

Passaggio 1: scarica il .litertlmmodello Il runtime LiteRT-LM è progettato per funzionare con i modelli in formato .litertlm. Puoi trovare e scaricare i modelli compatibili nella tabella seguente.

Modello SoC Quantizzazione Dimensioni del contesto Dimensione modello (MB) Link di download
Gemma3-1B MT6989 4 bit per canale 1280 985 scaricare
Gemma3-1B MT6991 4 bit per canale 1280 986 scaricare

Dovrai scaricare il modello corrispondente al tuo SoC. Di seguito è riportato un comando di esempio che può aiutarti a ottenere il link di Hugging Face che può scaricare il modello corretto per il SoC del tuo smartphone (tieni presente che dovrai accedere e confermare il modulo per avere l'autorizzazione a scaricare il file). Assicurati che sia presente un dispositivo connesso a cui sia possibile accedere utilizzando 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 che $SOC_MODEL sia elencato nella tabella di supporto. Il link generato non funzionerà per i modelli non supportati. Il supporto per le NPU viene aggiunto regolarmente, quindi controlla di nuovo più avanti per vedere se il tuo dispositivo è supportato.

Passaggio 2: crea il runtime / le librerie LiteRT-LM

Sviluppare in Linux

Per poter creare il binario per Android, è necessario installare NDK r28b o versioni successive da https://developer.android.com/ndk/downloads#stable-downloads. I passaggi specifici sono:

  • Scarica il file zip da https://developer.android.com/ndk/downloads#stable-downloads.
  • Estrai il file zip nella posizione che preferisci (ad esempio /path/to/AndroidNDK/)
  • Imposta ANDROID_NDK_HOME in modo che punti alla directory NDK. Dovrebbe essere qualcosa del genere:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

Suggerimenti: assicurati che ANDROID_NDK_HOME punti alla directory che contiene README.md.

Con la configurazione, prova a creare il binario litert_lm_main:

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

Inoltre, dobbiamo creare la libreria API dispatch affinché il runtime LiteRT-LM interagisca con la NPU:

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

Sviluppare in macOS

Gli strumenti a riga di comando Xcode includono clang. Esegui xcode-select --install se non è mai stato installato.

Per poter creare il binario per Android, è necessario installare NDK r28b o versioni successive da https://developer.android.com/ndk/downloads#stable-downloads. I passaggi specifici sono:

  • Scarica il file .dmg da https://developer.android.com/ndk/downloads#stable-downloads.
  • Apri il file .dmg e sposta il file AndroidNDK* nella posizione che preferisci (ad esempio /path/to/AndroidNDK/).
  • Imposta ANDROID_NDK_HOME in modo che punti alla directory NDK. Dovrebbe essere qualcosa del genere:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

Suggerimenti: assicurati che ANDROID_NDK_HOME punti alla directory che contiene README.md.

Con la configurazione, prova a creare il binario litert_lm_main:

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

Inoltre, dobbiamo creare la libreria API dispatch affinché il runtime LiteRT-LM interagisca con la NPU:

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

Passaggio 3: esegui il modello sul dispositivo Una volta creato correttamente il binario, possiamo provare a eseguire il modello sul dispositivo. Assicurati di disporre dell'accesso in scrittura a DEVICE_FOLDER:

Per eseguire il binario sul tuo dispositivo Android, dobbiamo inviare alcuni asset/binari. Per prima cosa, imposta il tuo DEVICE_FOLDER, assicurati di avere accesso in scrittura a questo percorso (in genere puoi inserire elementi in /data/local/tmp/):

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

export MODEL_PATH=<path to your downloaded .litertlm >

Inserisci il file .litertlm. Suggerimento: devi eseguire il push di questi asset una sola volta.

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

Esegui il push dell'API Dispatch e del binario principale compilato nel passaggio 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

Ora puoi eseguire il binario.

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