GPU-Bevollmächtigte für LiteRT (original) (raw)

Grafikprozessoren (Graphics Processing Units, GPUs) zum Ausführen Ihrer Modelle für maschinelles Lernen (ML) verwenden kann die Leistung Ihres Modells und die Nutzererfahrung erheblich verbessern. Ihrer ML-fähigen Anwendungen. LiteRT ermöglicht die Verwendung von GPUs und andere spezielle Prozessoren über den Hardwaretreiber namensBevollmächtigten. Verwendung von GPUs mit LiteRT ML aktivieren -Anwendungen können folgende Vorteile bieten:

Dieses Dokument bietet einen Überblick über die GPU-Unterstützung in LiteRT und einige den Einsatz von GPU-Prozessoren. Genauere Informationen über GPU-Unterstützung auf bestimmten Plattformen implementieren, finden Sie in den folgenden Leitfäden:

Unterstützung für GPU-ML-Vorgänge

Es gibt einige Einschränkungen im Hinblick darauf, welche TensorFlow-ML-Vorgänge oder Operationen möglich sind. durch den LiteRT-GPU-Delegaten beschleunigt wird. Der Bevollmächtigte unterstützt die folgende Operationen mit 16-Bit- und 32-Bit-Gleitkommazahl:

Standardmäßig werden alle Vorgänge nur ab Version 1 unterstützt. Quantisierung aktivieren Support die entsprechenden Versionen aktiviert, z. B. ADD v2.

Fehlerbehebung beim GPU-Support

Wenn einige Vorgänge nicht vom GPU-Delegaten unterstützt werden, führt das Framework nur einen Teil des Graphen auf der GPU und den verbleibenden Teil auf der CPU ausführen. Fällig zu den hohen Kosten für die CPU/GPU-Synchronisierung führt, führt oft zu einer geringeren Leistung als wenn das gesamte Netzwerk auf dem CPU allein. In diesem Fall generiert die Anwendung eine Warnung wie die folgende:

WARNING: op code #42 cannot be handled by this delegate.

Für Fehler dieses Typs gibt es keinen Callback, da es sich nicht um einen tatsächlichen Laufzeitfehler. Wenn Sie die Ausführung Ihres Modells mit dem GPU-Delegaten testen, sollten Sie auf diese Warnungen achten. Eine hohe Anzahl solcher Warnungen kann geben an, dass Ihr Modell nicht für die GPU-Beschleunigung geeignet ist, und eine Refaktorierung des Modells erfordern.

Beispielmodelle

Die folgenden Beispielmodelle sind so konzipiert, dass sie die Vorteile der GPU-Beschleunigung mit LiteRT und werden als Referenz und für Testzwecke bereitgestellt:

Für GPUs optimieren

Mit den folgenden Methoden können Sie eine bessere Leistung beim Ausführen von Modellen erzielen auf GPU-Hardware mit dem LiteRT GPU-Delegaten:

Erweiterte GPU-Unterstützung

Sie können zusätzliche, fortgeschrittene Techniken bei der GPU-Verarbeitung verwenden, um noch eine bessere Leistung für Ihre Modelle zu erzielen, einschließlich Quantisierung und Serialisierung. In den folgenden Abschnitten werden diese Techniken ausführlicher beschrieben.

Quantisierte Modelle verwenden

In diesem Abschnitt wird erläutert, wie der GPU-Delegate 8-Bit-quantisierte Modelle beschleunigt. einschließlich der folgenden:

Verwenden Sie zur Leistungsoptimierung Modelle, die sowohl Gleitkomma-Eingaben Ausgabetensoren.

So funktioniert's

Da das GPU-Back-End nur Gleitkommaausführung unterstützt, führen wir die quantisierte Ausführung indem Sie ihm eine Gleitkommaansicht des ursprünglichen Modells geben. Bei umfasst dies folgende Schritte:

Informationen zum Aktivieren dieses Features mit dem GPU-Delegaten finden Sie in der Folgendes:

Initialisierungszeit durch Serialisierung reduzieren

Mit dem GPU Delegate-Feature können Sie Daten aus vorkompiliertem Kernel-Code laden und Modelldaten aus früheren Ausführungen serialisiert und auf dem Laufwerk gespeichert. Dadurch wird verhindert, und die Startzeit um bis zu 90 % reduzieren. Diese Verbesserung ist durch Austausch von Speicherplatz zur Zeitersparnis erreicht. Sie können diese Funktion aktivieren mit einigen Konfigurationsoptionen, wie in den folgenden Codebeispielen gezeigt:

C++

TfLiteGpuDelegateOptionsV2 options = TfLiteGpuDelegateOptionsV2Default();
options.experimental_flags |= TFLITE_GPU_EXPERIMENTAL_FLAGS_ENABLE_SERIALIZATION;
options.serialization_dir = kTmpDir;
options.model_token = kModelToken;

auto* delegate = TfLiteGpuDelegateV2Create(options);
if (interpreter->ModifyGraphWithDelegate(delegate) != kTfLiteOk) return false;
  

Java

GpuDelegate delegate = new GpuDelegate(
  new GpuDelegate.Options().setSerializationParams(
    /* serializationDir= */ serializationDir,
    /* modelToken= */ modelToken));

Interpreter.Options options = (new Interpreter.Options()).addDelegate(delegate);
  

Stellen Sie bei Verwendung der Serialisierungsfunktion sicher, dass Ihr Code diesen Implementierungsregeln: