LLMs mit LiteRT-LM ausführen

LiteRT-LM ist eine plattformübergreifende Bibliothek, die entwickelt wurde, um Pipelines für Sprachmodelle effizient auf einer Vielzahl von Geräten auszuführen, von Smartphones bis hin zu eingebetteten Systemen. Es bietet Entwicklern die Tools zum Erstellen und Bereitstellen komplexer Sprachmodell-Workflows, jetzt mit nahtloser NPU-Integration.

LLMs auf CPU und GPU ausführen

Eine detaillierte Anleitung zur plattformübergreifenden Entwicklung und zur Hardwarebeschleunigung von CPUs/GPUs finden Sie im GitHub-Repository für LiteRT-LM.

LLMs auf der NPU ausführen

Neural Processing Units (NPUs) bieten spezielle Hardwareblöcke, die für Deep-Learning-Arbeitslasten optimiert sind. Sie sind zunehmend in modernen System-on-a-Chip (SoCs) verfügbar, insbesondere auf Mobilgeräten. Aufgrund ihrer hohen Leistung eignen sie sich hervorragend für die Ausführung von LLM-Inferenz.

NPU-Anbieter

LiteRT-LM unterstützt die Ausführung von LLMs mit NPU-Beschleunigung mit den folgenden Anbietern. Wählen Sie die Anleitung entsprechend dem Anbieter aus, den Sie ausprobieren möchten:

Schnellstart

Folgen Sie zuerst der Anleitung unter Voraussetzungen, um die Umgebung und das Repository einzurichten.

Damit Sie mit Ihrem Android-Gerät interagieren können, müssen Sie außerdem die Android Debug Bridge richtig installiert haben und ein verbundenes Gerät haben, auf das über adb zugegriffen werden kann.

Eine detailliertere Anleitung finden Sie im Abschnitt Kurzanleitung im LiteRT-LM-Repository. Weitere Informationen zur litert_lm_main-Befehlszeilendemo finden Sie dort.

Qualcomm AI Engine Direct

So führen Sie die LLMs auf der Qualcomm-NPU aus:

Schritt 1:.litertlm-Modell herunterladen Die LiteRT-LM-Laufzeit ist für die Verwendung mit Modellen im .litertlm-Format konzipiert. In der folgenden Tabelle finden Sie kompatible Modelle, die Sie herunterladen können.

Modell SoC Quantisierung Kontextgröße Modellgröße (MB) Downloadlink
Gemma3-1B SM8750 4 Bit pro Kanal 1280 658 herunterladen
Gemma3-1B SM8650 4 Bit pro Kanal 1280 658 herunterladen
Gemma3-1B SM8550 4 Bit pro Kanal 1280 657 herunterladen

Sie müssen das Modell herunterladen, das Ihrem SoC entspricht. Unten sehen Sie ein Beispiel für einen Befehl, mit dem Sie den Hugging Face-Link abrufen können, über den das richtige Modell für den SoC Ihres Smartphones heruntergeladen werden kann. Sie müssen sich anmelden und das Formular bestätigen, um die Berechtigung zum Herunterladen der Datei zu erhalten. Achten Sie darauf, dass ein verbundenes Gerät vorhanden ist, auf das mit adb zugegriffen werden kann.

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"

Prüfen Sie, ob $SOC_MODEL in der Supporttabelle aufgeführt ist. Der generierte Link funktioniert nicht für nicht unterstützte Modelle. Es wird regelmäßig neue Unterstützung für NPUs hinzugefügt. Schau also später noch einmal nach, ob dein Gerät unterstützt wird.

Schritt 2:QAIRT-Bibliotheken herunterladen und extrahieren Damit das Modell mit der Qualcomm-NPU ausgeführt werden kann, sind zugehörige Laufzeitbibliotheken auf dem Gerät erforderlich. Das QAIRT SDK kann über diesen Link heruntergeladen und die Datei extrahiert werden. Legen Sie die Variable QAIRT_ROOT (wird in späteren Schritten verwendet) so fest, dass sie auf den entzippten Ordner mit der Versionsnummer verweist, z. B.:

unzip <your_file.zip> -d ~/

QAIRT_ROOT=~/qairt/2.42.0.251225

Schritt 3:LiteRT-LM-Laufzeit / Bibliotheken erstellen

Unter Linux entwickeln

Um das Binärprogramm für Android erstellen zu können, muss NDK r28b oder höher von https://developer.android.com/ndk/downloads#stable-downloads installiert werden. So gehen Sie vor:

  • Laden Sie die Datei zip von https://developer.android.com/ndk/downloads#stable-downloads herunter.
  • Extrahieren Sie die Datei zip an den gewünschten Speicherort (z. B. /path/to/AndroidNDK/).
  • Lassen Sie ANDROID_NDK_HOME auf das NDK-Verzeichnis verweisen. Das sollte in etwa so aussehen:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

Tipps: Achten Sie darauf, dass ANDROID_NDK_HOME auf das Verzeichnis verweist, das README.md enthält.

Versuchen Sie, die Binärdatei litert_lm_main zu erstellen:

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

Außerdem müssen wir die Dispatch-API-Bibliothek erstellen, damit die LiteRT-LM-Laufzeit mit der NPU interagieren kann:

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

Entwicklung unter macOS

Die Xcode-Befehlszeilentools enthalten clang. Führen Sie xcode-select --install aus, falls es noch nicht installiert ist.

Um das Binärprogramm für Android erstellen zu können, muss NDK r28b oder höher von https://developer.android.com/ndk/downloads#stable-downloads installiert werden. So gehen Sie vor:

  • Laden Sie die Datei .dmg von https://developer.android.com/ndk/downloads#stable-downloads herunter.
  • Öffnen Sie die Datei .dmg und verschieben Sie die Datei AndroidNDK* an den gewünschten Speicherort (z. B. /path/to/AndroidNDK/).
  • Lassen Sie ANDROID_NDK_HOME auf das NDK-Verzeichnis verweisen. Das sollte in etwa so aussehen:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

Tipps: Achten Sie darauf, dass ANDROID_NDK_HOME auf das Verzeichnis verweist, das README.md enthält.

Versuchen Sie, die Binärdatei litert_lm_main zu erstellen:

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

Außerdem müssen wir die Dispatch-API-Bibliothek erstellen, damit die LiteRT-LM-Laufzeit mit der NPU interagieren kann:

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

Schritt 4:Modell auf dem Gerät ausführen Nachdem die Binärdatei erfolgreich erstellt wurde, können wir versuchen, das Modell auf dem Gerät auszuführen. Prüfen Sie, ob Sie Schreibzugriff auf DEVICE_FOLDER haben:

Damit wir das Binärprogramm auf Ihrem Android-Gerät ausführen können, müssen wir einige Assets/Binärdateien übertragen. Legen Sie zuerst Ihr DEVICE_FOLDER fest und achten Sie darauf, dass Sie Schreibzugriff darauf haben (normalerweise können Sie Elemente unter /data/local/tmp/ ablegen):

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

export MODEL_PATH=<path to your downloaded .litertlm >

Übertragen Sie die Datei „.litertlm“ per Push. Tipp: Sie müssen diese Assets nur einmal übertragen.

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

Stelle die QAIRT-Bibliotheken bereit. Sie finden sie im entzippten Ordner in Schritt 2 $QAIRT_ROOT/lib/aarch64-android/. Die QAIRT_ROOT sollte die Versionsnummer enthalten, z.B. 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

Übertragen Sie die in Schritt 3 kompilierte Dispatch API und die Hauptbinärdatei per Push.

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

Jetzt können Sie die Binärdatei ausführen.

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

So führen Sie die LLMs auf der MediaTek-NPU aus:

Schritt 1:.litertlm-Modell herunterladen Die LiteRT-LM-Laufzeit ist für die Verwendung mit Modellen im .litertlm-Format konzipiert. In der folgenden Tabelle finden Sie kompatible Modelle, die Sie herunterladen können.

Modell SoC Quantisierung Kontextgröße Modellgröße (MB) Downloadlink
Gemma3-1B MT6989 4 Bit pro Kanal 1280 985 herunterladen
Gemma3-1B MT6991 4 Bit pro Kanal 1280 986 herunterladen

Sie müssen das Modell herunterladen, das Ihrem SoC entspricht. Unten sehen Sie ein Beispiel für einen Befehl, mit dem Sie den Hugging Face-Link abrufen können, über den das richtige Modell für den SoC Ihres Smartphones heruntergeladen werden kann. Sie müssen sich anmelden und das Formular bestätigen, um die Berechtigung zum Herunterladen der Datei zu erhalten. Achten Sie darauf, dass ein verbundenes Gerät vorhanden ist, auf das mit adb zugegriffen werden kann.

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"

Prüfen Sie, ob $SOC_MODEL in der Supporttabelle aufgeführt ist. Der generierte Link funktioniert nicht für nicht unterstützte Modelle. Es wird regelmäßig neue Unterstützung für NPUs hinzugefügt. Schau also später noch einmal nach, ob dein Gerät unterstützt wird.

Schritt 2:LiteRT-LM-Laufzeit / Bibliotheken erstellen

Unter Linux entwickeln

Um das Binärprogramm für Android erstellen zu können, muss NDK r28b oder höher von https://developer.android.com/ndk/downloads#stable-downloads installiert werden. So gehen Sie vor:

  • Laden Sie die Datei zip von https://developer.android.com/ndk/downloads#stable-downloads herunter.
  • Extrahieren Sie die Datei zip an den gewünschten Speicherort (z. B. /path/to/AndroidNDK/).
  • Lassen Sie ANDROID_NDK_HOME auf das NDK-Verzeichnis verweisen. Das sollte in etwa so aussehen:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

Tipps: Achten Sie darauf, dass ANDROID_NDK_HOME auf das Verzeichnis verweist, das README.md enthält.

Versuchen Sie, die Binärdatei litert_lm_main zu erstellen:

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

Außerdem müssen wir die Dispatch-API-Bibliothek erstellen, damit die LiteRT-LM-Laufzeit mit der NPU interagieren kann:

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

Entwicklung unter macOS

Die Xcode-Befehlszeilentools enthalten clang. Führen Sie xcode-select --install aus, falls es noch nicht installiert ist.

Um das Binärprogramm für Android erstellen zu können, muss NDK r28b oder höher von https://developer.android.com/ndk/downloads#stable-downloads installiert werden. So gehen Sie vor:

  • Laden Sie die Datei .dmg von https://developer.android.com/ndk/downloads#stable-downloads herunter.
  • Öffnen Sie die Datei .dmg und verschieben Sie die Datei AndroidNDK* an den gewünschten Speicherort (z. B. /path/to/AndroidNDK/).
  • Lassen Sie ANDROID_NDK_HOME auf das NDK-Verzeichnis verweisen. Das sollte in etwa so aussehen:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

Tipps: Achten Sie darauf, dass ANDROID_NDK_HOME auf das Verzeichnis verweist, das README.md enthält.

Versuchen Sie, die Binärdatei litert_lm_main zu erstellen:

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

Außerdem müssen wir die Dispatch-API-Bibliothek erstellen, damit die LiteRT-LM-Laufzeit mit der NPU interagieren kann:

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

Schritt 3:Modell auf dem Gerät ausführen Nachdem die Binärdatei erfolgreich erstellt wurde, können wir versuchen, das Modell auf dem Gerät auszuführen. Prüfen Sie, ob Sie Schreibzugriff auf DEVICE_FOLDER haben:

Damit wir das Binärprogramm auf Ihrem Android-Gerät ausführen können, müssen wir einige Assets/Binärdateien übertragen. Legen Sie zuerst Ihr DEVICE_FOLDER fest und achten Sie darauf, dass Sie Schreibzugriff darauf haben (normalerweise können Sie Elemente unter /data/local/tmp/ ablegen):

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

export MODEL_PATH=<path to your downloaded .litertlm >

Übertragen Sie die Datei „.litertlm“ per Push. Tipp: Sie müssen diese Assets nur einmal übertragen.

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

Übertragen Sie die in Schritt 2 kompilierte Dispatch API und die Hauptbinärdatei per Push.

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

Jetzt können Sie die Binärdatei ausführen.

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