Uruchamianie LLM za pomocą LiteRT-LM

LiteRT-LM to wieloplatformowa biblioteka zaprojektowana do wydajnego uruchamiania potoków modeli językowych na wielu różnych urządzeniach, od telefonów komórkowych po systemy wbudowane. Zapewnia deweloperom narzędzia do tworzenia i wdrażania zaawansowanych przepływów pracy z modelami językowymi, teraz z bezproblemową integracją z NPU.

Uruchamianie LLM na procesorze i GPU

Szczegółowe instrukcje dotyczące tworzenia aplikacji na różne platformy i akceleracji sprzętowej na procesorach CPU/GPU znajdziesz w repozytorium GitHub LiteRT-LM.

Uruchamianie modeli LLM na NPU

Jednostki Neural Processing Unit (NPU) to specjalistyczne bloki sprzętowe zoptymalizowane pod kątem zadań związanych z uczeniem głębokim. Są one coraz częściej dostępne w nowoczesnych systemach na chipie (SoC), zwłaszcza na urządzeniach mobilnych. Dzięki wysokiej wydajności doskonale nadają się do przeprowadzania wnioskowania LLM.

Dostawcy NPU

LiteRT-LM obsługuje uruchamianie LLM z użyciem akceleracji NPU w przypadku tych dostawców: Wybierz instrukcje w zależności od tego, którego dostawcę chcesz wypróbować:

Szybki start

Na początek wykonaj instrukcje w sekcji Wymagania wstępne, aby skonfigurować środowisko i repozytorium.

Aby móc korzystać z urządzenia z Androidem, musisz też prawidłowo zainstalować Android Debug Bridge i mieć podłączone urządzenie, do którego można uzyskać dostęp za pomocą adb.

Szczegółowe instrukcje znajdziesz w sekcji Szybki start w repozytorium LiteRT-LM. Więcej informacji o litert_lm_main demonstracji wiersza poleceń znajdziesz w tym repozytorium.

Qualcomm AI Engine Direct

Aby uruchomić duże modele językowe na procesorze NPU firmy Qualcomm, wykonaj te czynności:

Krok 1. Pobierz .litertlmmodel. Środowisko wykonawcze LiteRT-LM jest przeznaczone do pracy z modelami w .litertlmformacie. W tabeli poniżej znajdziesz i pobierzesz zgodne modele.

Model SOC Kwantyzacja Rozmiar kontekstu Rozmiar modelu (MB) Link do pobrania
Gemma3-1B SM8750 4-bitowy na kanał 1280 658 download
Gemma3-1B SM8650 4-bitowy na kanał 1280 658 download
Gemma3-1B SM8550 4-bitowy na kanał 1280 657 download

Musisz pobrać model odpowiedni dla Twojego układu SoC. Poniżej znajdziesz przykładowe polecenie, które pomoże Ci uzyskać link do Hugging Face, z którego możesz pobrać odpowiedni model dla układu SoC w Twoim telefonie (pamiętaj, że aby mieć uprawnienia do pobrania pliku, musisz się zalogować i potwierdzić formularz). Upewnij się, że jest połączone urządzenie, do którego można uzyskać dostęp za pomocą 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"

Sprawdź, czy $SOC_MODEL znajduje się w tabeli obsługiwanych urządzeń. Wygenerowany link nie będzie działać w przypadku nieobsługiwanych modeli. Regularnie dodajemy obsługę nowych NPU, więc sprawdź ponownie później, czy Twoje urządzenie jest obsługiwane.

Krok 2. Pobierz i wyodrębnij biblioteki QAIRT Aby uruchomić model za pomocą procesora NPU firmy Qualcomm, na urządzeniu muszą być dostępne powiązane biblioteki środowiska wykonawczego. Pakiet SDK QAIRT można pobrać z tego linku i wyodrębnić plik. Ustaw zmienną QAIRT_ROOT (użyjemy jej w późniejszych krokach), aby wskazywała rozpakowany folder zawierający numer wersji, np.:

unzip <your_file.zip> -d ~/

QAIRT_ROOT=~/qairt/2.42.0.251225

Krok 3. Skompiluj środowisko wykonawcze / biblioteki LiteRT-LM

Programowanie w systemie Linux

Aby móc skompilować plik binarny na Androida, musisz zainstalować NDK w wersji r28b lub nowszej ze strony https://developer.android.com/ndk/downloads#stable-downloads. Aby to zrobić:

  • Pobierz plik zip ze strony https://developer.android.com/ndk/downloads#stable-downloads.
  • Wyodrębnij plik zip do wybranej lokalizacji (np. /path/to/AndroidNDK/).
  • Ustaw ANDROID_NDK_HOME tak, aby wskazywał katalog NDK. Powinien on wyglądać mniej więcej tak:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

Wskazówki: upewnij się, że ANDROID_NDK_HOME wskazuje katalog, w którym znajduje się README.md.

Po skonfigurowaniu spróbuj skompilować plik binarny litert_lm_main:

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

Dodatkowo powinniśmy utworzyć bibliotekę interfejsu API wysyłania, aby środowisko wykonawcze LiteRT-LM mogło wchodzić w interakcje z NPU:

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

Tworzenie aplikacji w systemie macOS

Narzędzia wiersza poleceń Xcode zawierają kompilator clang. Uruchom xcode-select --install, jeśli nie jest jeszcze zainstalowany.

Aby móc skompilować plik binarny na Androida, musisz zainstalować NDK w wersji r28b lub nowszej ze strony https://developer.android.com/ndk/downloads#stable-downloads. Aby to zrobić:

  • Pobierz plik .dmg ze strony https://developer.android.com/ndk/downloads#stable-downloads.
  • Otwórz plik .dmg i przenieś plik AndroidNDK* do wybranej lokalizacji (np. /path/to/AndroidNDK/).
  • Ustaw ANDROID_NDK_HOME tak, aby wskazywał katalog NDK. Powinien on wyglądać mniej więcej tak:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

Wskazówki: upewnij się, że ANDROID_NDK_HOME wskazuje katalog, w którym znajduje się README.md.

Po skonfigurowaniu spróbuj skompilować plik binarny litert_lm_main:

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

Dodatkowo powinniśmy utworzyć bibliotekę interfejsu API wysyłania, aby środowisko wykonawcze LiteRT-LM mogło wchodzić w interakcje z NPU:

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

Krok 4. Uruchom model na urządzeniu Po pomyślnym skompilowaniu pliku binarnego możemy spróbować uruchomić model na urządzeniu. Sprawdź, czy masz uprawnienia do zapisu w katalogu DEVICE_FOLDER:

Aby uruchomić plik binarny na urządzeniu z Androidem, musimy przesłać kilka zasobów lub plików binarnych. Najpierw ustaw DEVICE_FOLDER i upewnij się, że masz do niego uprawnienia do zapisu (zwykle możesz umieszczać elementy w /data/local/tmp/):

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

export MODEL_PATH=<path to your downloaded .litertlm >

Prześlij plik .litertlm. Wskazówka: wystarczy przesłać te komponenty tylko raz.

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

Prześlij biblioteki QAIRT. Znajdziesz je w rozpakowanym folderze w kroku 2 $QAIRT_ROOT/lib/aarch64-android/. Pamiętaj, że QAIRT_ROOT powinno zawierać numer wersji, np. 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

Prześlij interfejs API wysyłania i główny plik binarny skompilowany w kroku 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

Teraz możesz uruchomić plik binarny.

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

Aby uruchomić duże modele językowe na procesorze NPU firmy MediaTek:

Krok 1. Pobierz .litertlmmodel. Środowisko wykonawcze LiteRT-LM jest przeznaczone do pracy z modelami w .litertlmformacie. W tabeli poniżej znajdziesz i pobierzesz zgodne modele.

Model SOC Kwantyzacja Rozmiar kontekstu Rozmiar modelu (MB) Link do pobrania
Gemma3-1B MT6989 4-bitowy na kanał 1280 985 download
Gemma3-1B MT6991 4-bitowy na kanał 1280 986 download

Musisz pobrać model odpowiedni dla Twojego układu SoC. Poniżej znajdziesz przykładowe polecenie, które pomoże Ci uzyskać link do Hugging Face, z którego możesz pobrać odpowiedni model dla układu SoC w Twoim telefonie (pamiętaj, że aby mieć uprawnienia do pobrania pliku, musisz się zalogować i potwierdzić formularz). Upewnij się, że jest połączone urządzenie, do którego można uzyskać dostęp za pomocą 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"

Sprawdź, czy $SOC_MODEL znajduje się w tabeli obsługiwanych urządzeń. Wygenerowany link nie będzie działać w przypadku nieobsługiwanych modeli. Regularnie dodajemy obsługę nowych NPU, więc sprawdź ponownie później, czy Twoje urządzenie jest obsługiwane.

Krok 2. Skompiluj środowisko wykonawcze lub biblioteki LiteRT-LM

Programowanie w systemie Linux

Aby móc skompilować plik binarny na Androida, musisz zainstalować NDK w wersji r28b lub nowszej ze strony https://developer.android.com/ndk/downloads#stable-downloads. Aby to zrobić:

  • Pobierz plik zip ze strony https://developer.android.com/ndk/downloads#stable-downloads.
  • Wyodrębnij plik zip do wybranej lokalizacji (np. /path/to/AndroidNDK/).
  • Ustaw ANDROID_NDK_HOME tak, aby wskazywał katalog NDK. Powinien on wyglądać mniej więcej tak:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

Wskazówki: upewnij się, że ANDROID_NDK_HOME wskazuje katalog, w którym znajduje się README.md.

Po skonfigurowaniu spróbuj skompilować plik binarny litert_lm_main:

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

Dodatkowo powinniśmy utworzyć bibliotekę interfejsu API wysyłania, aby środowisko wykonawcze LiteRT-LM mogło wchodzić w interakcje z NPU:

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

Tworzenie aplikacji w systemie macOS

Narzędzia wiersza poleceń Xcode zawierają kompilator clang. Uruchom xcode-select --install, jeśli nie jest jeszcze zainstalowany.

Aby móc skompilować plik binarny na Androida, musisz zainstalować NDK w wersji r28b lub nowszej ze strony https://developer.android.com/ndk/downloads#stable-downloads. Aby to zrobić:

  • Pobierz plik .dmg ze strony https://developer.android.com/ndk/downloads#stable-downloads.
  • Otwórz plik .dmg i przenieś plik AndroidNDK* do wybranej lokalizacji (np. /path/to/AndroidNDK/).
  • Ustaw ANDROID_NDK_HOME tak, aby wskazywał katalog NDK. Powinien on wyglądać mniej więcej tak:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

Wskazówki: upewnij się, że ANDROID_NDK_HOME wskazuje katalog, w którym znajduje się README.md.

Po skonfigurowaniu spróbuj skompilować plik binarny litert_lm_main:

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

Dodatkowo powinniśmy utworzyć bibliotekę interfejsu API wysyłania, aby środowisko wykonawcze LiteRT-LM mogło wchodzić w interakcje z NPU:

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

Krok 3. Uruchom model na urządzeniu Po pomyślnym skompilowaniu pliku binarnego możemy spróbować uruchomić model na urządzeniu. Sprawdź, czy masz uprawnienia do zapisu w katalogu DEVICE_FOLDER:

Aby uruchomić plik binarny na urządzeniu z Androidem, musimy przesłać kilka zasobów lub plików binarnych. Najpierw ustaw DEVICE_FOLDER i upewnij się, że masz do niego uprawnienia do zapisu (zwykle możesz umieszczać elementy w /data/local/tmp/):

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

export MODEL_PATH=<path to your downloaded .litertlm >

Prześlij plik .litertlm. Wskazówka: wystarczy przesłać te komponenty tylko raz.

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

Prześlij interfejs API wysyłania i główny plik binarny skompilowany w kroku 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

Teraz możesz uruchomić plik binarny.

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