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, dagli smartphone ai sistemi embedded. Fornisce agli sviluppatori gli strumenti per creare ed eseguire il deployment di sofisticati flussi di lavoro di modelli linguistici, ora con un'integrazione NPU senza interruzioni.

Esegui LLM su CPU e GPU

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

Esegui LLM su 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 sistemi su chip (SoC), in particolare sui dispositivi mobili. La loro natura ad alte prestazioni li rende 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 relative ai prerequisiti per configurare l'ambiente e il repository.

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

Per istruzioni più dettagliate, consulta la sezione Avvio rapido 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 gli LLM su NPU Qualcomm sono i seguenti:

Passaggio 1: scarica il modello .litertlm Il runtime di 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 download
Gemma3-1B SM8650 4 bit per canale 1280 658 download
Gemma3-1B SM8550 4 bit per canale 1280 657 download

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 per scaricare il modello corretto per il SoC del tuo smartphone (tieni presente che dovrai accedere e accettare il modulo per avere l'autorizzazione a scaricare il file). Assicurati che sia presente un dispositivo connesso a cui è 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 in un secondo momento per verificare 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 utilizzeremo 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 di LiteRT-LM

Sviluppa in Linux

Per poter creare il file 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 simile a:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

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

Una volta configurato, prova a creare il file binario litert_lm_main:

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

Inoltre, dobbiamo creare la libreria dell'API di distribuzione affinché il runtime di LiteRT-LM possa interagire con la NPU:

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

Sviluppa in macOS

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

Per poter creare il file 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 simile a:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

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

Una volta configurato, prova a creare il file binario litert_lm_main:

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

Inoltre, dobbiamo creare la libreria dell'API di distribuzione affinché il runtime di LiteRT-LM possa interagire con la NPU:

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

Passaggio 4: esegui il modello sul dispositivo. Dopo aver creato correttamente il file binario, possiamo provare a eseguire il modello sul dispositivo. Assicurati di avere l'accesso in scrittura a DEVICE_FOLDER:

Per eseguire il file binario sul tuo dispositivo Android, dobbiamo eseguire il push di alcuni asset/file binari. Per prima cosa, imposta DEVICE_FOLDER, assicurati di avere l'accesso in scrittura (in genere puoi inserire gli 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 >

Esegui il push del 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 trovarle 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 di distribuzione e del file 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 file 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 gli LLM su NPU MediaTek sono i seguenti:

Passaggio 1: scarica il modello .litertlm Il runtime di 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 download
Gemma3-1B MT6991 4 bit per canale 1280 986 download

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 per scaricare il modello corretto per il SoC del tuo smartphone (tieni presente che dovrai accedere e accettare il modulo per avere l'autorizzazione a scaricare il file). Assicurati che sia presente un dispositivo connesso a cui è 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 in un secondo momento per verificare se il tuo dispositivo è supportato.

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

Sviluppa in Linux

Per poter creare il file 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 simile a:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

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

Una volta configurato, prova a creare il file binario litert_lm_main:

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

Inoltre, dobbiamo creare la libreria dell'API di distribuzione affinché il runtime di LiteRT-LM possa interagire con la NPU:

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

Sviluppa in macOS

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

Per poter creare il file 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 simile a:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

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

Una volta configurato, prova a creare il file binario litert_lm_main:

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

Inoltre, dobbiamo creare la libreria dell'API di distribuzione affinché il runtime di LiteRT-LM possa interagire con la NPU:

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

Passaggio 3: esegui il modello sul dispositivo. Dopo aver creato correttamente il file binario, possiamo provare a eseguire il modello sul dispositivo. Assicurati di avere l'accesso in scrittura a DEVICE_FOLDER:

Per eseguire il file binario sul tuo dispositivo Android, dobbiamo eseguire il push di alcuni asset/file binari. Per prima cosa, imposta DEVICE_FOLDER, assicurati di avere l'accesso in scrittura (in genere puoi inserire gli 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 >

Esegui il push del 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 di distribuzione e del file 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 file binario.

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

Intel OpenVino

I passaggi per eseguire gli LLM su NPU Intel sono i seguenti:

Passaggio 1: scarica il modello .litertlm Il runtime di 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-2B PantherLake ... 4096 ... Link di download DA FARE

Passaggio 2: crea il runtime di LiteRT-LM e la libreria di distribuzione di LiteRT Intel

Sviluppa in Windows

Una volta configurato, prova a creare il file binario litert_lm_main:

bazel --output_base=C:\bzl_lrtlm build --define=DISABLE_HUGGINGFACE_TOKENIZER=1 --config=windows //runtime/engine:litert_lm_main

Inoltre, dobbiamo creare la libreria dell'API di distribuzione affinché il runtime di LiteRT-LM possa interagire con la NPU:

bazel --output_base=C:\bzl_lrtlm build --config=windows  @litert//litert/vendors/intel_openvino/dispatch:LiteRtDispatch

Passaggio 3: esegui il modello sul dispositivo. Dopo aver creato correttamente il file binario, possiamo provare a eseguire il modello sul dispositivo. Inseriamo tutti i file binari, le DLL e il modello in una "execution_dir":

cp bazel-bin/external/litert/vendors/intel_openvino/dispatch/LiteRtDispatch.dll execution_dir
cp bazel-bin/runtime/engine/litert_lm_main.exe execution_dir
cp prebuilt\windows_x86_64\libGemmaModelConstraintProvider.dll execution_dir

# Run OpenVino's setup script to ensure the OpenVino DLLs can be found.
& C:\bzl_lrtlm\external\intel_openvino\openvino\setupvars.ps1

# Test run
cd execution_dir
.\litert_lm_main.exe --backend=npu --model_path="execution_dir\model.litertlm"  --input_prompt="What is the capital of France?" --litert_dispatch_lib_dir=$PWD  --use_hw_masking_for_npu=false