Leitfaden für LLM-Inferenzen

Mit der LLM Inference API können Sie Large Language Models (LLMs) vollständig auf dem Gerät ausführen. Sie können damit eine Vielzahl von Aufgaben ausführen, z. B. Text generieren, Informationen in natürlicher Sprache abrufen und Dokumente zusammenfassen. Die Aufgabe bietet integrierte Unterstützung für mehrere Large Language Models für die Text-zu-Text-Transformation, sodass Sie die neuesten On-Device-Modelle für generative KI auf Ihre Apps und Produkte anwenden können.

Testen!

Die Aufgabe unterstützt die folgenden Varianten von Gemma: Gemma-2 2B, Gemma 2B und Gemma 7B. Gemma ist eine Familie leichter, hochmoderner offener Modelle, die auf derselben Forschung und Technologie basieren wie die Gemini-Modelle. Außerdem werden die folgenden externen Modelle unterstützt: Phi-2, Falcon-RW-1B und StableLM-3B.

Zusätzlich zu den unterstützten Modellen können Sie mit AI Edge Torch von Google PyTorch-Modelle in LiteRT-Modelle mit mehreren Signaturen (tflite) exportieren. Diese werden mit Tokenizer-Parametern gebündelt, um Task-Bundles zu erstellen, die mit der LLM Inference API kompatibel sind. Mit AI Edge Torch konvertierte Modelle können nur auf dem CPU-Backend ausgeführt werden und sind daher auf Android und iOS beschränkt.

Jetzt starten

Folgen Sie einer dieser Implementierungsanleitungen für Ihre Zielplattform, um diese Aufgabe zu verwenden. In diesen plattformspezifischen Anleitungen erfahren Sie, wie Sie diese Aufgabe mithilfe von Codebeispielen, die ein verfügbares Modell und die empfohlenen Konfigurationsoptionen verwenden, implementieren:

Taskdetails

In diesem Abschnitt werden die Funktionen, Eingaben, Ausgaben und Konfigurationsoptionen dieser Aufgabe beschrieben.

Funktionen

Die LLM Inference API umfasst die folgenden Hauptfunktionen:

  1. Text-zu-Text-Generierung: Text wird anhand eines Eingabetext-Prompts generiert.
  2. LLM-Auswahl: Sie können mehrere Modelle anwenden, um die App an Ihre spezifischen Anwendungsfälle anzupassen. Sie können das Modell auch neu trainieren und benutzerdefinierte Gewichte darauf anwenden.
  3. LoRA-Unterstützung: Sie können die LLM-Funktionen mit einem LoRA-Modell erweitern und anpassen. Dazu können Sie entweder Ihren gesamten Datensatz verwenden oder vorgefertigte LoRA-Modelle aus der Open-Source-Community verwenden. Diese Funktion ist nicht mit Modellen kompatibel, die mit der AI Edge Torch Generative API konvertiert wurden.
Aufgabeneingaben Aufgabenausgaben
Die LLM Inference API akzeptiert die folgenden Eingaben:
  • Textprompt (z.B. eine Frage, ein E-Mail-Betreff oder ein Dokument, das zusammengefasst werden soll)
Die LLM Inference API gibt die folgenden Ergebnisse aus:
  • Generierter Text basierend auf dem Eingabeprompt (z. B. eine Antwort auf die Frage, ein E-Mail-Entwurf oder eine Zusammenfassung des Dokuments)

Konfigurationsoptionen

Für diese Aufgabe stehen die folgenden Konfigurationsoptionen zur Verfügung:

Option Beschreibung Wertebereich Standardwert
modelPath Der Pfad zum Speicherort des Modells im Projektverzeichnis. PFAD
maxTokens Die maximale Anzahl von Tokens (Eingabe- und Ausgabetokens), die vom Modell verarbeitet werden. Ganzzahl 512
topK Die Anzahl der Tokens, die das Modell bei jedem Schritt der Generierung berücksichtigt. Begrenzt die Vorhersagen auf die „Top-K“-Tokens mit der höchsten Wahrscheinlichkeit. Ganzzahl 40
temperature Der Grad der Zufälligkeit, der bei der Generierung eingeführt wird. Eine höhere Temperatur führt zu mehr Kreativität im generierten Text, während eine niedrigere Temperatur zu einer vorhersehbareren Generierung führt. Gleitkommazahl 0,8
randomSeed Der Zufallsstartwert, der bei der Textgenerierung verwendet wird. Ganzzahl 0
loraPath Der absolute Pfad zum LoRA-Modell lokal auf dem Gerät. Hinweis: Diese Funktion ist nur mit GPU-Modellen kompatibel. PFAD
resultListener Legt den Ergebnis-Listener so fest, dass die Ergebnisse asynchron empfangen werden. Gilt nur, wenn die asynchrone Generierungsmethode verwendet wird.
errorListener Legt einen optionalen Fehler-Listener fest.

Modelle

Die LLM Inference API unterstützt viele Large Language Models für die Text-zu-Text-Übersetzung, einschließlich der integrierten Unterstützung für mehrere Modelle, die für die Ausführung in Browsern und auf Mobilgeräten optimiert sind. Mit diesen schlanken Modellen können Inferenzen vollständig auf dem Gerät ausgeführt werden.

Bevor Sie die LLM Inference API initialisieren, laden Sie ein Modell herunter und speichern Sie die Datei im Projektverzeichnis. Sie können ein vorab konvertiertes Modell verwenden oder ein Modell in ein MediaPipe-kompatibles Format konvertieren.

Die LLM Inference API ist mit zwei Modellkategorien kompatibel, für die teilweise eine Modellkonvertierung erforderlich ist. Anhand der Tabelle können Sie die erforderlichen Schritte für Ihr Modell ermitteln.

Modelle Conversion-Methode Kompatible Plattformen Dateityp
Unterstützte Modelle Gemma 2B, Gemma 7B, Gemma-2 2B, Phi-2, StableLM, Falcon MediaPipe Android, iOS, Web .bin
Andere PyTorch-Modelle Alle PyTorch-LLM-Modelle AI Edge Torch Generative Library Android, iOS .task

Die konvertierten .bin-Dateien für Gemma 2B, Gemma 7B und Gemma-2 2B werden auf Kaggle gehostet. Diese Modelle können direkt mit unserer LLM Inference API bereitgestellt werden. Informationen zum Konvertieren anderer Modelle finden Sie im Abschnitt Modellkonvertierung.

Gemma-2 2B

Gemma-2 2B ist das neueste Modell der Gemma-Familie leichter, hochmoderner offener Modelle, die auf derselben Forschung und Technologie basieren, die auch für die Erstellung der Gemini-Modelle verwendet werden. Das Modell enthält 2 Milliarden Parameter und offene Gewichtungen. Gemma-2 2B ist für seine fortschrittlichen Inferenzfähigkeiten bekannt, die in dieser Modellklasse unerreicht sind.

Gemma-2 2B herunterladen

Die Gemma-2 2B-Modelle sind in den folgenden Varianten verfügbar:

Sie können das Modell auch optimieren und neue Gewichte hinzufügen, bevor Sie es der App hinzufügen. Weitere Informationen zum Optimieren und Anpassen von Gemma finden Sie unter Gemma optimieren. Nachdem Sie Gemma-2.2B von Kaggle Models heruntergeladen haben, ist das Modell bereits im richtigen Format für die Verwendung mit MediaPipe Tasks.

Gemma 2B

Gemma 2B ist Teil einer Familie leichter, hochmoderner offener Modelle, die auf derselben Forschung und Technologie basieren, die auch für die Erstellung der Gemini-Modelle verwendet werden. Das Modell enthält 2 Milliarden Parameter und offene Gewichtungen. Dieses Modell eignet sich gut für eine Vielzahl von Textgenerierungsaufgaben, einschließlich Fragebeantwortung, Zusammenfassung und Argumentation.

Gemma 2B herunterladen

Die Gemma 2B-Modelle sind in den folgenden Varianten verfügbar:

Sie können das Modell auch optimieren und neue Gewichte hinzufügen, bevor Sie es der App hinzufügen. Weitere Informationen zum Optimieren und Anpassen von Gemma finden Sie unter Gemma optimieren. Nachdem Sie Gemma 2B von Kaggle Models heruntergeladen haben, ist das Modell bereits im richtigen Format für die Verwendung mit MediaPipe Tasks.

Gemma 7B

Gemma 7B ist ein größeres Gemma-Modell mit 7 Milliarden Parametern und offenen Gewichten. Das Modell ist leistungsfähiger für eine Vielzahl von Textgenerierungsaufgaben, einschließlich Fragenbeantwortung, Zusammenfassung und Argumentation. Gemma 7B wird nur im Web unterstützt.

Gemma 7B herunterladen

Das Modell Gemma 7B ist in einer Variante verfügbar:

Nachdem Sie Gemma 7B von Kaggle Models heruntergeladen haben, ist das Modell bereits im richtigen Format für die Verwendung mit MediaPipe.

Falcon 1B

Falcon-1B ist ein Nur-Decoder-Modell mit 1 Milliarde Parametern, das auf 350 Milliarden Tokens von RefinedWeb trainiert wurde.

Falcon 1B herunterladen

Für die LLM Inference API müssen die folgenden Dateien heruntergeladen und lokal gespeichert werden:

  • tokenizer.json
  • tokenizer_config.json
  • pytorch_model.bin

Nachdem Sie die Falcon-Modelldateien heruntergeladen haben, kann das Modell mit einem Konvertierungsskript in das MediaPipe-Format konvertiert werden. Folgen Sie der Anleitung im Abschnitt Conversion-Script für unterstützte Modelle.

StableLM 3B

StableLM-3B ist ein Nur-Decoder-Sprachmodell mit 3 Milliarden Parametern, das mit 1 Billion Token aus verschiedenen englischen und Code-Datasets für 4 Epochen vortrainiert wurde.

StableLM 3B herunterladen

Für die LLM Inference API müssen die folgenden Dateien heruntergeladen und lokal gespeichert werden:

  • tokenizer.json
  • tokenizer_config.json
  • model.safetensors

Nachdem Sie die StableLM-Modelldateien heruntergeladen haben, kann das Modell mit einem Konvertierungsskript in das MediaPipe-Format konvertiert werden. Folgen Sie der Anleitung im Abschnitt Conversion-Script für unterstützte Modelle.

Phi-2

Phi-2 ist ein Transformer-Modell mit 2,7 Milliarden Parametern. Sie wurde mit verschiedenen synthetischen NLP-Texten und gefilterten Websites trainiert. Das Modell eignet sich am besten für Prompts im Frage-Antwort-, Chat- und Code-Format.

Phi-2 herunterladen

Für die LLM Inference API müssen die folgenden Dateien heruntergeladen und lokal gespeichert werden:

  • tokenizer.json
  • tokenizer_config.json
  • model-00001-of-00002.safetensors
  • model-00002-of-00002.safetensors

Nach dem Herunterladen der Phi-2-Modelldateien kann das Modell mit einem Konvertierungsskript in das MediaPipe-Format konvertiert werden. Folgen Sie der Anleitung im Abschnitt Conversion-Script für unterstützte Modelle.

Generative PyTorch-Modelle

Mit der AI Edge Torch Generative API können generative PyTorch-Modelle in ein MediaPipe-kompatibles Format konvertiert werden. Mit der API können Sie PyTorch-Modelle in LiteRT-Modelle (TensorFlow Lite) mit mehreren Signaturen konvertieren. Weitere Informationen zum Zuordnen und Exportieren von Modellen finden Sie auf der GitHub-Seite von AI Edge Torch.

Wenn Sie die AI Edge Torch Generative API zum Konvertieren eines PyTorch-Modells verwenden möchten, folgen Sie der Anleitung im Abschnitt Torch Generative Converter für PyTorch-Modelle.

Modellkonvertierung

Mit der MediaPipe LLM Inference API können Sie eine Vielzahl von Large Language Models auf dem Gerät ausführen. Dazu gehören Modelle, die bereits in ein MediaPipe-kompatibles Format konvertiert wurden, sowie andere Modelle, die mit einem Konvertierungsskript oder der AI Edge Torch-Bibliothek konvertiert werden können.

Die LLM Inference API akzeptiert Modelle in den Dateiformaten .bin und .task. Vorkonvertierte Modelle und Modelle, die mit dem Konvertierungsskript konvertiert wurden, sind .bin-Dateien. Modelle, die mit der AI Edge Torch-Bibliothek konvertiert wurden, sind .task-Dateien. Ändern Sie die Dateiformate Ihrer konvertierten Modelle nicht manuell.

Die LLM Inference API enthält drei Modellkonvertierungspfade:

Vorkonvertierte Modelle

Die Modelle „Gemma-2 2B“, „Gemma 2B“ und „Gemma 7B“ sind als vorab konvertierte Modelle im MediaPipe-Format verfügbar. Für diese Modelle sind keine zusätzlichen Konvertierungsschritte durch den Nutzer erforderlich. Sie können direkt mit der LLM Inference API ausgeführt werden.

Sie können das Gemma-2 2B-Modell von Kaggle Models herunterladen:

Sie können Varianten von Gemma 2B aus Kaggle Models herunterladen:

Sie können Gemma 7B aus Kaggle Models herunterladen:

Weitere Informationen zu den Gemma-Modellen finden Sie in der Dokumentation zu Gemma-2B, Gemma 2B und Gemma 7B.

Conversion-Script für unterstützte Modelle

Das MediaPipe-Paket bietet ein Konvertierungsskript, mit dem die folgenden externen Modelle in ein MediaPipe-kompatibles Format konvertiert werden können:

Weitere Informationen zu den unterstützten externen Modellen finden Sie in der Dokumentation zu Falcon 1B, StableLM 3B und Phi-2.

Für die Modellkonvertierung ist das MediaPipe-PyPI-Paket erforderlich. Das Conversion-Script ist nach dem 0.10.11 in allen MediaPipe-Paketen verfügbar.

Installieren und importieren Sie die Abhängigkeiten mit folgendem Befehl:

$ python3 -m pip install mediapipe

Verwenden Sie die genai.converter-Bibliothek, um das Modell zu konvertieren:

import mediapipe as mp
from mediapipe.tasks.python.genai import converter

config = converter.ConversionConfig(
  input_ckpt=INPUT_CKPT,
  ckpt_format=CKPT_FORMAT,
  model_type=MODEL_TYPE,
  backend=BACKEND,
  output_dir=OUTPUT_DIR,
  combine_file_only=False,
  vocab_model_file=VOCAB_MODEL_FILE,
  output_tflite_file=OUTPUT_TFLITE_FILE,
)

converter.convert_checkpoint(config)

Für die Umwandlung des LoRA-Modells müssen in ConversionConfig die Optionen für das Basismodell sowie zusätzliche LoRA-Optionen angegeben werden. Da die API nur LoRA-Inferenzen mit GPU unterstützt, muss das Backend auf 'gpu' gesetzt sein.

import mediapipe as mp
from mediapipe.tasks.python.genai import converter

config = converter.ConversionConfig(
  # Other params related to base model
  ...
  # Must use gpu backend for LoRA conversion
  backend='gpu',
  # LoRA related params
  lora_ckpt=LORA_CKPT,
  lora_rank=LORA_RANK,
  lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
)

converter.convert_checkpoint(config)

Der Konverter gibt zwei TFLite-Flatbuffer-Dateien aus, eine für das Basismodell und eine für das LoRA-Modell.

Parameter Beschreibung Zulässige Werte
input_ckpt Der Pfad zur Datei model.safetensors oder pytorch.bin. Manchmal werden die SafeTensors des Modells in mehrere Dateien aufgeteilt, z.B. model-00001-of-00003.safetensors und model-00001-of-00003.safetensors. Sie können ein Dateimuster wie model*.safetensors angeben. PFAD
ckpt_format Das Modelldateiformat. {"safetensors", "pytorch"}
model_type Die konvertierte LLM. {"PHI_2", "FALCON_RW_1B", "STABLELM_4E1T_3B", "GEMMA_2B"}
backend Der Prozessor (Delegierter), der zum Ausführen des Modells verwendet wird. {"cpu", "gpu"}
output_dir Der Pfad zum Ausgabeverzeichnis, in dem sich die gewichtsspezifischen Dateien befinden. PFAD
output_tflite_file Der Pfad zur Ausgabedatei. Beispiel: „model_cpu.bin“ oder „model_gpu.bin“. Diese Datei ist nur mit der LLM Inference API kompatibel und kann nicht als allgemeine „tflite“-Datei verwendet werden. PFAD
vocab_model_file Der Pfad zum Verzeichnis, in dem die Dateien tokenizer.json und tokenizer_config.json gespeichert sind. Bei Gemma müssen Sie auf die einzelne tokenizer.model-Datei zeigen. PFAD
lora_ckpt Der Pfad zum LoRA-ckpt der SafeTensors-Datei, in der das LoRA-Adaptergewicht gespeichert ist. PFAD
lora_rank Eine Ganzzahl, die den Rang des LoRA-Knotens darstellt. Erforderlich, um die LORA-Gewichte umzuwandeln. Wenn Sie diese Option nicht angeben, geht der Konverter davon aus, dass keine LoRA-Gewichte vorhanden sind. Hinweis: Nur das GPU-Backend unterstützt LoRA. Ganzzahl
lora_output_tflite_file TFLite-Dateiname für die LoRA-Gewichte. PFAD

Torch Generative-Konverter für PyTorch-Modelle

Mit der AI Edge Torch Generative API können generative PyTorch-Modelle in ein MediaPipe-kompatibles Format konvertiert werden. Mit der API können Sie PyTorch-LLMs erstellen, konvertieren und quantisieren, um sie mit der LLM-Inferenz-API zu verwenden. Der Torch Generative Converter kann nur auf der CPU ausgeführt werden und erfordert einen Linux-Computer mit mindestens 64 GB RAM.

So konvertieren Sie ein PyTorch-Modell mit der AI Edge Torch Generative API:

  1. PyTorch-Modellprüfpunkte herunterladen
  2. Verwende die AI Edge Torch Generative API, um das Modell zu erstellen, zu konvertieren und in ein MediaPipe-kompatibles Dateiformat (.tflite) zu quantisieren.
  3. Erstellen Sie ein Task-Bundle (.task) aus der tflite-Datei und dem Modell-Tokenisierer.

Verwenden Sie das Bündelungsscript, um ein Task-Bundle zu erstellen. Beim Bündelungsprozess wird das zugeordnete Modell mit zusätzlichen Metadaten (z.B. Tokenizer-Parameter), die für die End-to-End-Inferenz erforderlich sind.

Für das Binden von Modellen ist das MediaPipe-PyPI-Paket erforderlich. Das Conversion-Script ist nach dem 0.10.14 in allen MediaPipe-Paketen verfügbar.

Installieren und importieren Sie die Abhängigkeiten mit folgendem Befehl:

$ python3 -m pip install mediapipe

Verwenden Sie die genai.bundler-Bibliothek, um das Modell zu bündeln:

import mediapipe as mp
from mediapipe.tasks.python.genai import bundler

config = bundler.BundleConfig(
    tflite_model=TFLITE_MODEL,
    tokenizer_model=TOKENIZER_MODEL,
    start_token=START_TOKEN,
    stop_tokens=STOP_TOKENS,
    output_filename=OUTPUT_FILENAME,
    enable_bytes_to_unicode_mapping=ENABLE_BYTES_TO_UNICODE_MAPPING,
)
bundler.create_bundle(config)
Parameter Beschreibung Zulässige Werte
tflite_model Der Pfad zum exportierten TFLite-Modell von AI Edge. PFAD
tokenizer_model Der Pfad zum SentencePiece-Tokenisierungsmodell. PFAD
start_token Modellspezifisches Starttoken. Das Starttoken muss im bereitgestellten Tokenizer-Modell vorhanden sein. STRING
stop_tokens Modellspezifische Haltestellen-Tokens. Die Endzeichen müssen im bereitgestellten Tokenizer-Modell vorhanden sein. LIST[STRING]
output_filename Der Name der Ausgabedatei für das Aufgabenpaket. PFAD

LoRA-Anpassung

Die Mediapipe LLM-Inferenz-API kann so konfiguriert werden, dass sie Low-Rank Adaptation (LoRA) für Large Language Models unterstützt. Mithilfe von optimierten LoRA-Modellen können Entwickler das Verhalten von LLMs durch einen kostengünstigen Trainingsablauf anpassen.

Die LoRA-Unterstützung der LLM Inference API funktioniert für alle Gemma-Varianten und Phi-2-Modelle für das GPU-Back-End. LoRA-Gewichte gelten nur für Aufmerksamkeitsschichten. Diese erste Implementierung dient als experimentelle API für zukünftige Entwicklungen. In den kommenden Updates sollen weitere Modelle und verschiedene Arten von Ebenen unterstützt werden.

LoRA-Modelle vorbereiten

Folgen Sie der Anleitung auf HuggingFace, um ein optimiertes LoRA-Modell mit den unterstützten Modelltypen Gemma oder Phi-2 auf Ihrem eigenen Dataset zu trainieren. Die Modelle Gemma-2 2B, Gemma 2B und Phi-2 sind auf HuggingFace im SafeTensors-Format verfügbar. Da die LLM Inference API nur LoRA auf Aufmerksamkeitsschichten unterstützt, geben Sie beim Erstellen der LoraConfig nur Aufmerksamkeitsschichten an:

# For Gemma
from peft import LoraConfig
config = LoraConfig(
    r=LORA_RANK,
    target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
)

# For Phi-2
config = LoraConfig(
    r=LORA_RANK,
    target_modules=["q_proj", "v_proj", "k_proj", "dense"],
)

Für Tests gibt es öffentlich zugängliche, optimierte LoRA-Modelle, die zur LLM-Inferenz-API auf HuggingFace passen. Beispiel: monsterapi/gemma-2b-lora-maths-orca-200k für Gemma-2B und lole25/phi-2-sft-ultrachat-lora für Phi-2.

Nachdem Sie das Modell mit dem vorbereiteten Dataset trainiert und gespeichert haben, erhalten Sie eine adapter_model.safetensors-Datei mit den optimierten LoRA-Modellgewichten. Die safetensors-Datei ist der LoRA-Prüfpunkt, der bei der Modellkonvertierung verwendet wird.

Im nächsten Schritt müssen Sie die Modellgewichte mit dem MediaPipe-Python-Paket in einen TensorFlow Lite-Flatbuffer konvertieren. Die ConversionConfig sollte die Optionen für das Basismodell sowie zusätzliche LoRA-Optionen angeben. Da die API nur LoRA-Inferenzen mit GPU unterstützt, muss das Backend auf 'gpu' festgelegt sein.

import mediapipe as mp
from mediapipe.tasks.python.genai import converter

config = converter.ConversionConfig(
  # Other params related to base model
  ...
  # Must use gpu backend for LoRA conversion
  backend='gpu',
  # LoRA related params
  lora_ckpt=LORA_CKPT,
  lora_rank=LORA_RANK,
  lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
)

converter.convert_checkpoint(config)

Der Konverter gibt zwei TFLite-Flatbuffer-Dateien aus, eine für das Basismodell und eine für das LoRA-Modell.

LoRA-Modellinferenz

Die LLM-Inferenz-API für Web, Android und iOS wurde aktualisiert, um die Inferenz von LoRA-Modellen zu unterstützen.

Android unterstützt statisches LoRA während der Initialisierung. Zum Laden eines LoRA-Modells geben Nutzer den Pfad zum LoRA-Modell sowie das Basis-LLM an.

// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
        .setModelPath('<path to base model>')
        .setMaxTokens(1000)
        .setTopK(40)
        .setTemperature(0.8)
        .setRandomSeed(101)
        .setLoraPath('<path to LoRA model>')
        .build()

// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)

Verwenden Sie für die LLM-Inferenz mit LoRA dieselben generateResponse()- oder generateResponseAsync()-Methoden wie für das Basismodell.