Hardwarebeschleunigung mit LiteRT Next

Bei der Hardwarebeschleunigung wird spezielle Computerhardware verwendet, um die Ausführungsgeschwindigkeit und Effizienz eines KI-Modells zu verbessern. Bei LiteRT geht es vor allem darum, Grafikprozessoren (GPUs) oder neuronale Verarbeitungseinheiten (NPU) für die KI-Inferenz sowie allgemeine CPUs mit Vektoranweisungen zu verwenden.

LiteRT unterstützte die Hardwarebeschleunigung durch TFLite-Delegierte, die Teile des LiteRT-Graphs übernehmen, indem sie eigene Vorgänge in den Graphen einfügen. LiteRT Next verbessert diesen Prozess, indem die Hardwarebeschleunigung in zwei Schritten ausgeführt wird:

  1. Kompilierung: Ein Modell für die Ausführung auf einer bestimmten Hardware vorbereiten.
  2. Dispatch:Ausführen ausgewählter Vorgänge auf der entsprechenden Hardware.

In der Kompilierungsphase wird ein LiteRT-Modell mit einer neuen Schnittstelle geändert, die durch Compiler-Plug-ins mehr Flexibilität bietet. Die Modellkompilierung erfolgt vorab (AOT), bevor das Diagramm ausgeführt wird. Dabei wird ein bestimmtes Diagramm für die Ausführung auf dem Gerät angepasst.

Arten von Beschleunigern

LiteRT bietet drei Arten von Beschleunigern: NPU, GPU und CPU.

  • Die NPU-Beschleunigung unterstützt spezielle Hardware, die über eine einzige Schnittstelle vereint ist. Der NPU-Support ist über ein Early-Access-Programm verfügbar.
  • Die GPU-Beschleunigung unterstützt WebGL- und OpenCL-kompatible Geräte.
  • Die CPU-Beschleunigung unterstützt eine Vielzahl von Prozessoren durch die Verwendung der Bibliothek XNNPack. Dies ist die Standardbeschleunigung und ist immer verfügbar.

Diese Accelerators können kombiniert werden, um die bestmögliche Leistung zu erzielen, wenn einige komplexe Vorgänge auf einer bestimmten Hardware nicht verfügbar sind. Wenn mehrere Beschleuniger um eine Operation konkurrieren, verwendet LiteRT die folgende Prioritätsreihenfolge: NPU, GPU, CPU.

GPU-Beschleunigung

Mit der GPU-Beschleunigung von LiteRT Next können Sie GPU-freundliche Eingabe- und Ausgabe-Buffer erstellen, Zero-Copy-Datenübertragungen im GPU-Speicher erzielen und Aufgaben asynchron ausführen, um die Parallelität zu maximieren. LiteRT Next verwendet einen neuen und verbesserten GPU-Delegierten, der von LiteRT nicht angeboten wird.

Wenn Sie Modelle mit LiteRT auf der GPU ausführen möchten, müssen Sie explizit einen Delegate erstellen, Funktionsaufrufe ausführen und den Graphen ändern. Geben Sie bei LiteRT Next einfach den Beschleuniger an:

// Create a compiled model targeting GPU
LITERT_ASSIGN_OR_RETURN(auto compiled_model,
    CompiledModel::Create(env, model, kLiteRtHwAcceleratorGpu));

Weitere Informationen zur GPU-Beschleunigung finden Sie unter GPU-Beschleunigung mit LiteRT-Beschleunigung.

NPU-Beschleunigung

LiteRT Next bietet eine einheitliche Oberfläche, um NPUs zu nutzen, ohne dass Sie sich mit anbieterspezifischen Compilern, Laufzeiten oder Bibliotheksabhängigkeiten auseinandersetzen müssen. Durch die Verwendung von LiteRT Next für die NPU-Beschleunigung werden viele anbieter- und gerätespezifische Komplikationen vermieden, die Leistung für die Echtzeit- und Large-Model-Inferenz gesteigert und die Arbeitsspeicherkopien mit der Nutzung von Zero-Copy-Hardware-Buffern minimiert.

Wenn Sie NPUs mit LiteRT verwenden, müssen Sie ein Modell mit Play for On-Device AI (PODAI) konvertieren und kompilieren und das Modell mit dem Play AI-Paket und dem Funktionsmodul bereitstellen.