LiteRT CLI 101: Edge-KI-Workflows optimieren

1. 🏁 Einführung und Übersicht über die Befehlszeile

Willkommen zum praktischen Codelab zur LiteRT-Befehlszeile 101. In dieser Anleitung erfahren Sie Schritt für Schritt, wie Sie eine Umgebung einrichten und optimierte Edge-Intelligence bereitstellen.

🌟 Hintergrund

Für Edge AI müssen komplexe neuronale Modelle direkt auf Smartphones, Wearables und eingebettete Hardware übertragen werden.

  • LiteRT (früher TensorFlow Lite / TFLite): Das On-Device-Framework von Google für die Bereitstellung von leistungsstarkem ML und GenAI auf Edge-Plattformen durch effiziente Konvertierung, Laufzeit und Optimierung.
  • Die LiteRT-Befehlszeile integriert Google AI Edge-Stacks in einen eigenständigen Shell-Befehl (litert), um LiteRT-bezogene Entwicklungs-Workflows zu optimieren. Dazu gehören das Konvertieren, Quantisieren, Kompilieren, Ausführen, Benchmarking und Visualisieren von LiteRT-Modellen (TFLite) auf verschiedenen Hardwareplattformen (CPU / GPU / NPU) für verschiedene Plattformen (Desktop, Mobilgerät oder Cloud).

2. 🔄 Einfache Workflows: Conversion, Quantisierung und Ausführung

In diesem Abschnitt führen wir einen vollständigen Edge AI-Modellierungslebenszyklus mit der LiteRT-Befehlszeile aus: PyTorch-Modell-Wrapper ➔ Tracing-Konvertierung ➔ Modellquantisierung ➔ Desktop-Inferenz ➔ Leistungsbenchmarks.

LiteRT – Befehlszeile – Workflow für Einsteiger

📝 Phase 1: Wrapper-Skript für PyTorch-Modell vorbereiten

Erstellen Sie resnet18.py in Ihrem aktuellen Verzeichnis. Es stellt dynamische Tracing-Hooks bereit, damit der Graph Builder Formen erfassen kann:

import torch
import torchvision

def get_model(batch_size: int = 1) -> torch.nn.Module:
  model = torchvision.models.resnet18(
      weights=torchvision.models.ResNet18_Weights.IMAGENET1K_V1
  )
  model.eval()
  return model

def get_args(batch_size: int = 1) -> tuple[torch.Tensor, ...]:
  return (torch.randn(batch_size, 3, 224, 224),)

🔄 Phase 2: PyTorch-Modell mit LiteRT Torch in LiteRT konvertieren

Rufen Sie den LiteRT-Torch-Konverter auf, um ein Standard-Float32-.tflite-Zielmodell zu erstellen:

# Convert PyTorch source to LiteRT
litert convert resnet18.py --output resnet18

# Verify target was exported
ls -lh resnet18/resnet18.tflite

📉 Phase 3: Gewichte auf INT8 quantisieren

Dynamische Rezeptkarten und Rezeptkarten mit Gewichtsangabe verwenden, um die Größe um das Vierfache zu reduzieren:

# 1. Dynamic Range Quantization (Dynamic activations + static INT8 weights)
litert quantize resnet18/resnet18.tflite \
  --recipe dynamic_wi8_afp32 \
  --output resnet18/resnet18_int8_dynamic.tflite

# 2. Weight-Only Quantization (Float32 activations + static INT8 weights)
litert quantize resnet18/resnet18.tflite \
  --recipe weight_only_wi8_afp32 \
  --output resnet18/resnet18_int8_weight_only.tflite

🚀 Phase 4: Inferenz lokal ausführen

Führen Sie Testvorgänge mit Dummy-Eingabeparametern aus, um Leistungsblöcke zu prüfen:

# Run original Float32 model inference
litert run resnet18/resnet18.tflite --desktop --cpu

# Run optimized Dynamic INT8 model inference
litert run resnet18/resnet18_int8_dynamic.tflite --cpu --iterations 1

📊 Phase 5: Modellleistung vergleichen

Messen Sie hochpräzise Messwerte wie durchschnittliche Latenz, Initialisierungskosten, CPU-Ausführungsdurchsatz und dynamische aktive Speicherbelegungen:

# Benchmark original Float32 model
litert benchmark resnet18/resnet18.tflite --desktop --cpu

# Benchmark optimized Dynamic range INT8 model
litert benchmark resnet18/resnet18_int8_dynamic.tflite --desktop --cpu

3. 🔌 Einrichtung und Überprüfung der lokalen Umgebung

Wir erstellen eine isolierte, saubere Sandbox auf Ihrer Workstation (macOS oder Linux).

🔌 Option A: Ultraschnelle Einrichtung (UV)

Mit uv werden Bibliotheken in Sekundenschnelle isoliert, wodurch Konflikte mit dem Umgebungscache vermieden werden.

# Create active workspace sandbox
uv venv --clear --python=3.13 --seed
source .venv/bin/activate

# Install litert-cli from pypi
uv pip install litert-cli-nightly

🐍 Option B: Standardeinrichtung (pip)

Wenn uv nicht vorhanden ist, verwenden Sie die Standardkonfigurationen für virtuelle Python-Umgebungen:

# Create active workspace sandbox
python3 -m venv .venv
source .venv/bin/activate

# Install litert-cli from pypi
pip install --upgrade pip setuptools wheel
pip install litert-cli-nightly

🛠️ Option C: Bearbeitbare lokale Einrichtung

Wenn Sie direkt im geklonten Quellverzeichnis des Repositorys entwickeln oder testen:

# Create active workspace sandbox
uv venv --clear --python=3.13 --seed
source .venv/bin/activate

# Install from local directory root
uv pip install -e .

🔍 Einrichtung überprüfen

Prüfen Sie, ob der Pfad den Befehl litert korrekt weiterleitet:

litert --help

💡 Zentraler Modellreferenzkatalog (model-ref)

Damit Skripts und die Entwicklung robust bleiben, wird in der LiteRT-CLI ein zentraler Modellkatalog implementiert:

Routingdiagramm für den Modellkatalog

  • Format: Weisen Sie einem heruntergeladenen oder importierten Modell einen eindeutigen Namen (Alias) zu, z. B. mobilenet.
  • Varianten: Verwenden Sie Doppelpunkte, um auf optimierte Varianten zu verweisen, z. B. mobilenet:int8 oder mobilenet:gpu.
  • Einfachheit: Alle CLI-Befehle akzeptieren diesen pfadlosen -Alias direkt und lösen die physische Dateispeicherung automatisch auf.

4. 📲 Gerätebereitstellung und ‑profilierung

Wir können die Optimierung weiter vorantreiben, indem wir hochpräzise lokale Benchmarks ausführen, auf echten USB-Hardwarezielen bereitstellen, Hardware-Delegates implementieren, Ahead-of-Time-Kompilierung durchführen und Cloud-Benchmarks nutzen.

Optionen für die Zielgruppenbereitstellung und -beschleunigung

📊 Lokale Profiling-Messwerte

Laden Sie EfficientNet-B1 herunter und erstellen Sie Leistungsprofilstatistiken auf Ihrem Desktop-Host:

# Download and register model alias in central catalog
litert download litert-community/efficientnet_b1 --file "*.tflite" --output efficientnet
litert import efficientnet/efficientnet_b1.tflite --model-ref efficientnet_b1

# Run high-precision benchmark on desktop CPU
litert benchmark efficientnet_b1 --desktop --cpu

Sehen Sie sich die Überschriften der wichtigsten Leistungsindikatoren im Benchmark-Log an:

  • Model initialization: Zeit zum Booten von strukturellen Netzwerken.
  • Warmup (avg): Zeitaufwand für die Kompilierung.
  • Inference (avg): Die reine mathematische Verarbeitungszeit.
  • Overall footprint: Spitzenwert des RAM, der während der Ausführung verbraucht wurde.

📲 Ziel A: Mobile CPU (USB-Verbindung)

Verbinden Sie ein Android-Gerät, auf dem das USB-Debugging aktiviert ist, und stellen Sie die App bereit:

# 1. Confirm device connection
adb devices

# 2. Push and execute model on mobile CPU
litert run efficientnet_b1 --android --cpu

Die CLI überträgt das Modell automatisch auf das Zielgerät, führt die Inferenzschleife aus und leitet die Ausgaben zurück.

🎮 Ziel B: Mobile GPU

Schwere Arbeitslasten mit OpenCL oder WebGPU dynamisch auf die GPU auslagern:

# Benchmark model performance on mobile GPU
litert benchmark efficientnet_b1 --android --gpu

# Run inference with GPU acceleration and CPU fallback
litert run efficientnet_b1 --android --accelerator gpu,cpu

⚙️ Ziel C: JIT Android NPU

Ausführungsparameter direkt an die NPU auf modernen Chipsets auslagern:

# Run with on-device JIT NPU acceleration
litert run efficientnet_b1 --android --accelerator npu,cpu
  • Warnung: Das Erstellen dynamischer Grafiken in der On-Device-Laufzeitumgebung ist mit erheblichen JIT-Warm-up-Verzögerungen bei der Initialisierung verbunden.

🚀 Ziel D: AOT-kompilierte NPU

Offline vorkompilieren, um JIT-Overheads zur Laufzeit zu umgehen und eine maximale Beschleunigung zu erzielen:

# 1. Offline compile for Qualcomm SM8750 NPU (Linux host)
litert compile efficientnet/efficientnet_b1.tflite --target sm8750

# 2. Execute compiled AOT binary with zero JIT warmup latency
litert run efficientnet_b1_Qualcomm_SM8750.tflite --android --npu

☁️ Cloud-Profiling (Google AI Edge Portal)

Tests auf Remote-Hardwareprofile in den Geräteparks von Google Cloud übertragen

# Log in to your Google Cloud project
gcloud auth login

# Push benchmark metrics to Pixel 7 CPU
litert benchmark efficientnet_b1 --gcp --device "pixel 7" --cpu --gcp-project "your-project-id"

# Push benchmark metrics to Snapdragon GPU targets
litert benchmark efficientnet_b1 --gcp --devices "pixel 7, sm-s931u1" --gpu --gcp-project "your-project-id"

5. 🧠 Erweiterte Themen: LLMs und Spracherkennung

Wir sehen uns erweiterte Modelle an, indem wir Large Language Models (LLMs) und Modelle für die automatische Spracherkennung (Automatic Speech Recognition, ASR) konvertieren und ausführen.

💬 Generative KI (LLMs)

Edge-LLMs sind speicherbegrenzt. Wir beheben dieses Problem, indem wir die Weight-Only INT4/INT8-Quantisierung anwenden. Dabei werden die Gewichte komprimiert, während die Ausführungschannels in Float32 bleiben:

# 1. Automated download & conversion from Hugging Face
litert convert Qwen/Qwen1.5-0.5B-Chat --output models/qwen

# 2. Quantize model weights to INT4
litert convert Qwen/Qwen1.5-0.5B-Chat \
  --quantize-recipe weight_only_wi4_afp32 \
  --output models/qwen_w4

# 3. Generation once
litert lm run models/qwen/model.litertlm --prompt "Introduce San Francisco."

# 4. Interactive chat
litert lm run models/qwen/model.litertlm

🎙️ Sprachverarbeitung (ASR)

ASR-Modelle wie Whisper oder Parakeet haben sowohl ein Encoder- als auch ein Decoder-Modul. Mit Signaturschlüsseln können wir Benchmarks für bestimmte Module erstellen:

# 1. Download prepackaged Whisper-Tiny
litert download litert-community/whisper-tiny --file "whisper_tiny_30s_f32.tflite" --output "models/whisper_tiny"

# 2. Profile audio encoding
litert benchmark models/whisper_tiny/whisper_tiny_30s_f32.tflite --android --gpu --signature-key "encode"

# 3. Profile text token decoding loop
litert benchmark models/whisper_tiny/whisper_tiny_30s_f32.tflite --android --cpu --signature-key "decode"

6. 🤖 Im agentischen Programmieren verwenden

Die LiteRT CLI ist agentenfreundlich und kann direkt in Coding-Agents eingebunden werden.

Hier einige Beispiele: Fügen Sie Ihrem Coding-Agent (z. B. Google Antigravity) den LiteRT CLI-Skill SKILL.md hinzu und probieren Sie Prompts wie unten aus.

7. 🚀 Herzlichen Glückwunsch und nächste Schritte

🎉 Hervorragend! Sie haben das Codelab „LiteRT CLI 101“ abgeschlossen.

Sie haben jetzt die erforderlichen Kenntnisse, um Edge ML-Anwendungen zu entwickeln:

  • PyTorch-Modelle in LiteRT-Modelle konvertieren
  • Modellgewichte auf INT4/INT8 quantisieren.
  • Modelle auf mobilen CPUs, GPUs und NPUs ausführen.
  • Für NPU kompilieren
  • Benchmarks auf Computern, Mobilgeräten und in der Cloud
  • LLM-Modelle konvertieren und ausführen
  • Für agentisches Programmieren verwenden.

🔗 Ressourcen

  • LiteRT-Befehlszeilentool: https://github.com/google-ai-edge/LiteRT-CLI
  • LiteRT: https://ai.google.dev/edge/litert
  • Beispiele: https://github.com/google-ai-edge/LiteRT-CLI/tree/main/examples