Warum wir Edge AI brauchen

Der ressourcenschonende Einsatz von künstlicher Intelligenz ist eine der zentralsten Herausforderungen der nächsten Jahre.

Der Schutz unserer Umwelt ist eines der dringlichsten Themen, um die wir uns als Gesellschaft kümmern müssen. Gerade IT-Unternehmen sollten deswegen dieses Thema nicht ausklammern, sondern aktiv Lösungen suchen. Die Gewährleistung des ökologischen Wohlergehens ist eine der sieben Leitlinien unserer Ethic Policy, welcher wir uns als Leftshift One verschrieben haben.

Dass dieser Punkt eine immense Wichtigkeit besitzt, ist unbestreitbar. Gerade im AI-Umfeld gibt es Trends und Entwicklungen, die einen hinsichtlich der ökologischen Bilanz nachdenklich stimmen und die es zu lösen gilt.

„bis 2025 könnten KI-Prozesse zehn Prozent des weltweiten Energieverbrauchs von Rechenzentren beanspruchen“

– Gary Dickerson, Applied Materials

Gerade wenn KI in der breiten Masse von Unternehmen eingesetzt wird – und eventuell auch KI Modelle von Unternehmen selbst trainiert werden – sollte der Energiebedarf berücksichtigt werden. Aus diesem Grund brauchen wir jetzt Ansätze und Lösungen, um damit umzugehen. Des Weiteren gilt auch vielerorts die Meinung, dass mehr Daten und mehr Modellparameter der Weg zu besseren AI-Modellen sind. Eine umstrittene Meinung, bei der Uneinigkeit unter den AI-Experten herrscht.

Die Frage des Energiebedarfs, wenn es um die Erstellung von AI-Modellen geht, ist eine, die wir uns dringend stellen müssen. Das Training von AI-Modellen ist bereits jetzt ein großer Treiber der CO2-Ausstoßemissionen. Wenn der Trend zu mehr Daten und Modellparameter weiter anhält, werden sich diese CO2-Emissionen voraussichtlich in Zukunft noch weiter verstärken. Ähnlich zu Moores Gesetz verdoppelt sich bislang der Rechenaufwand für KI-Anwendungen ca. alle 3 1/2 Monate.

Um diesem Trend entgegenzuwirken bieten sich drei Gegenmaßnahmen an:

  • Erforschung neuer AI-Lernmethoden, welche die Notwendigkeit von immensen Datenmengen und Rechenkapazitäten umgehen. Zero-Shot-, One-Shot- und Few-Shot-Modelle gehen bereits in diese Richtung.
  • Vortrainierte Modelle wiederverwenden und bei Bedarf nur diese für einen spezifischen Use Case fine-tunen. (Transfer Learning)
  • Optimierung der Machine-Learning-Modelle hinsichtlich Training und Inferenz.

Bei Punkt 1 handelt es sich um einen der Forschungsschwerpunkte von Leftshift One. Punkt 2 und 3 werden bereits jetzt von unserem AI Operating System AIOS ermöglicht. Der Skill Store verfügt über eine große Anzahl an vortrainierten KI-Modellen, welche bei Bedarf für spezielle Anforderungen angepasst werden können. Somit fällt der Aufwand für ein grundlegendes Training weg und eine Anpassung des Modells kann über Transfer Learning vorgenommen werden.

Beim dritten Punkt müssen wir zwischen der Optimierung der Trainingszeit und der Inferenzzeit unterscheiden. Bei ersterem unterstützt das AIOS mit speziellen Trainingsmechanismen. Diese sind z.B. Early StoppingGradient AccumulationGradient ClippingAuto Scaling of Batch Size, usw.

Bei der Optimierung der Inferenzzeit der Modelle unterstützt das AIOS, indem automatisiert fertig trainierte Modelle optimiert werden. Hierfür gibt es mehrere Herangehensweisen. In diesem Artikel fokussieren wir uns auf die Optimierung mittels ONNX, einem Standardformat für neuronale Modelle, das auch verwendet werden kann, um Edge AI zu ermöglichen.

Was ist Edge AI?

Grundsätzlich impliziert dieser Begriff, dass Daten dort verarbeitet werden sollen wo sie entstehen. Das heißt, mittels Edge AI soll die Verarbeitung von Daten gänzlich oder zum Teil auf einem Edge Device (z.B. einem Smartphone) stattfinden. Ein Großteil der Daten, welche mittels AI verarbeitet werden, werden momentan in großen Rechenzentren verarbeitet. Mit Edge AI bahnt sich jedoch ein Trend an, der dieses Denkmuster aufbrechen möchte.

Laut Gartner wurden 2018 nur 10% der Unternehmensdaten nicht in zentralisierten Rechenzentren verarbeitet, während bis 2022 dieser Wert auf 75% ansteigen soll. Dabei ist nicht gemeint, dass Big Data auf Edge Devices verarbeitet wird. Es geht vielmehr darum, dass personenbezogene Daten direkt auf dem Edge Device verarbeitet oder vorbearbeitet werden sollen. Der Einsatz von Edge AI ermöglich somit folgende Vorteile:

  • Privacy & Security
    Sensible Daten verlassen das Edge Device nicht.
  • Verringerung der Latenzzeit
    Daten müssen nicht an das Backend gesendet werden.
  • Load Balancing
    Die Ausführung des KI-Modells findet nicht auf einem Backend-System, sondern verteilt auf mehrere Edge Devices, statt.
  • Portabilität
    Einsatzfähigkeit der AI-Modelle in unterschiedlichsten Umgebungen.
  • Offline Processing
    Daten können offline verarbeitet werden und werden an das Backend versendet, sobald dieses online ist.

Damit KI-Modelle auf Edge Devices laufen können, müssen diese so optimiert werden, um einen reibungslosen Betrieb zu ermöglichen. Da diese Systeme zumeist andere Hardware-Anforderungen als Serversysteme haben, müssen KI-Modelle dahingehend angepasst werden. Der zuvor genannte Open-Neural-Network-Exchange-Standard, kurz ONNX, ist ein Werkzeug, um diesen Punkt zu adressieren. Mittels dieses Standards ist man in der Lage, AI-Modelle als Edge-AI-Modelle zu betreiben.

Ein wichtiger Punkt dabei: Wenn man KI-Modelle für ein Edge Device optimieren kann, dann kann man sie auch zwangsläufig für das Backend optimieren. Diesem Umstand kann man sich bedienen, um effizientere Modelle für das Backend zu erstellen. In weiterer Folge möchte ich zwei Use Cases vorstellen, um die Vorteile von Edge AI mittels ONNX zu demonstrieren:

Use Case 1: Image Similarity

Eine Java-Anwendung benötigt eine Funktionalität, um Bilder hinsichtlich ihres Contents auf Ähnlichkeiten vergleichen zu können. Im AIOS Skill Store befindet sich bereits ein Machine-Learning-Modell, das diese Aufgabe zwar erfüllt, jedoch in Python implementiert ist. Da die Lösungsanforderungen vorsehen, das Modell in Java zu betreiben, muss dieses Modell für Java lauffähig gemacht werden.

Bevor wir die Konvertierung des Modells besprechen, gehe ich kurz auf das Modell ein. Als KI-Modell für dieses Beispiel werden wir ein Image-Similarity-Detection-Modell heranziehen. Es gibt mehrere Möglichkeiten hinsichtlich der neuronalen Architektur dieses KI-Modells. Bei diesem Beispiel habe ich mich für einen Convolutional Autoencoder entschieden.

Autoencoder sind neuronale Architekturen, die darin trainiert werden, bestmöglich den Input in das Modell zu rekonstruieren. Dabei wird das Modell in zwei Komponenten unterteilt: den Encoder und den Decoder. Der Encoder übernimmt dabei die Aufgabe, den Input in eine latente Repräsentation des Bildes überzuführen.

Die Decoder-Komponente verwendet diese latente Repräsentation, um bestmöglich den Input zu rekonstruieren. Für den visuellen Vergleich von Bildern eignet sich der Encoder Output, da vermutet werden kann, dass dieser alle relevanten Informationen des Bildes in Tensor-Form beinhaltet. Diese Image Embeddings können in weiterer Folge mittels Distanzfunktionen (z.b. Kosinusdistanz) verglichen werden. Je geringer die Distanz der Embeddings, umso ähnlicher sind sich die Bilder.

Der Aufbau dieser Architektur ist nicht Teil dieses Artikels. Es handelt sich hierbei um einen Standard Autoencoder, der mittels PyTorch erstellt wurden. Wir legen unseren Fokus hier auf die Möglichkeit, dieses Modell, das mittels eines python-Frameworks erstellt wurde, in ein ONNX-Format zu konvertieren, um es anschließend mittels der ONNX Java Runtime auszuführen.

ML-Modelle werden in ein ONNX-Format konvertiert, indem eine Beispiel-Inferenz durchgeführt wurde. Es ist dabei unerheblich, ob die Daten, die durch das Modell fließen, sinnvoll sind oder nicht. Wichtig ist nur, dass die Struktur der synthetischen Daten (Shape) jener der Realdaten entspricht. Bei dem Image-Similarity-Modell wissen wir, dass folgende Shape als Tensorinput erwartet wird:

4 Dimensionen (Batch x Color x Height x Width)

Relevant ist außerdem zu wissen, dass die Dimensionen 0 (Batch), 2 (Height) und 3 (Width) dynamisch sind und somit als dynamische Axen definiert werden können. Somit ist das ONNX-Modell in der Lage, diese Axen dynamisch zu verarbeiten. Das ONNX-Framework analysiert das zu konvertierende Modell und benennt „per default“ die Inputs und Outputs des Modells. Für Debugging-Zwecke werden wir die Bezeichnungen dieser Werte jedoch manuell setzen.

Nach Durchlauf dieses Scripts erhalten wir ein File mit dem Namen image-similarity.onnx. Dieses File beinhaltet alle Informationen, um die Inferenz des Image-Similarity-Modells durchzuführen. Es kann mit jeglichen ONNX-Runtimes ausgeführt werden, womit uns auch die Ausführung des Modells im Sinne von Edge AI direkt im Browser oder am Smartphone ermöglicht wird.

Wie wir dem Bild entnehmen können wurde die erste Komponente des Modells als Input und die letzte Komponente als Output bezeichnet. Des Weiteren wurden die dynamischen Dimensionen 0, 2 und 3 mit einem Namen versehen.

Als nächstes werden wir das Modell mittels Java Code ausführen. Hierfür müssen wir zuerst das ONNX Environment in Java erstellen.

Als nächstes benötigen wir einen Code, der ein Image in einen OnnxTensor konvertiert. Dabei ist ein Tensor zu erstellen, der von den Dimensionen her mit dem Onnx-Modell kompatibel ist. Wie bereits zuvor erwähnt, handelt es sich dabei um die Dimensionen Batch, Color, Height und Width, wobei nur die Color-Dimension fix mit drei anzusetzen ist. Folgender Code konvertiert ein BufferedImage in einen OnnxTensor:

Als letzter Schritt ist es noch notwendig, die eigentliche Inferenz auszuführen. Hierbei übergeben wir dem Modell den Input mit dem dafür vorgesehen Namen (input) und erhalten ein Ergebnis mit dem vordefinierten Namen „output„. Des Weiteren wissen wir, dass das Modell des Modells ein „flatted Vector“ mit den Dimensionen Batch und Embedding ist. Da wir nur einen Batch erwarten, können wir die Embeddings direkt auslesen:

Somit haben wir ein Modell in Java ausgeführt, das ursprünglich in python erstellt wurde. Das ONNX-Modell ermöglicht es uns somit, ML-Modelle in ein Standard-Format zu übersetzen, das mittels unterschiedlicher Runtimes ausgeführt werden kann. Diese Modelle können bei der Konvertierung weiters auch für eine entsprechende Runtime optimiert werden. Somit sind wir nicht nur in der Lage, ML-Modelle als Edge-AI-Modelle zu betreiben, sondern auch diese Modelle für eine performantere Ausführung im Backend zu optimieren.

Vorteile:

  • Bestehendes AI-Modell kann wiederverwendet werden.
  • Daten müssen nicht an das Backendsystem übermittelt werden, womit Energie eingespart werden kann.

Use Case 2: Semantic Search

Use Case 2 behandelt einen Semantic Search Business Case, bei dem es konkret darum geht, aus einem großen Pool an Dokumenten jene Phrasen zu finden, die am besten zu einer Textanfrage passen.

Damit Textphrasen hinsichtlich ihrer semantischen Ähnlichkeit verglichen werden können, werden die einzelnen Sätze des Dokumentes in eine Vektorform überführt. Diese Vektoren können untereinander mittels einer Kosinusdistanzfunktion auf Ähnlichkeiten überprüft werden. Je geringer die Distanz zwischen den einzelnen Vektoren, umso ähnlicher sind sich die Texte.

Diese Aufgabe übernimmt ein auf BERT basierender NLU Skill, der den Text in eine Vektorform überführt. Dieser Vorgang wird als Sentence Embedding bezeichnet.

Im nächsten Schritt werden sämtliche Sätze von allen Dokumenten in ein Sentence Embedding überführt und zusammen mit der Dokument-ID in eine Dokumenten-DB persistiert. Hierfür bietet sich beispielsweise Elasticsearch an, die skalierend eingesetzt werden kann.

Die standardmäßige Vorgehensweise wäre hierbei, dass ein User eine Anfrage (Query) an das Backendsystem sendet, dieses Backensdystem leitet die Anfrage weiter an den Skill, der das Sentence Embedding zurückliefert. Dieses Sentence Embedding wird anschließend mit allen Embedings innerhalb der Dokumenten Datenbank verglichen, um die semantisch ähnlichsten Resultate zu finden.

Der konkrete Use Case hat jedoch die Anforderung, dass aus datenrechtlichen Gründen die Textanfrage nicht als Plain Text an das Backendsystem gesendet werden soll. Um dieser Anforderung gerecht zu werden, verschieben wir den Skill-Aufruf auf das Edge Device, sodass in weiterer Folge nur das Sentence Embedding an das Backend gesendet wird.

Da wir die Modellgröße für den Betrieb auf einem Edge Device verringern und gleichzeitig auch die Inferenzzeit verbessern möchten, werden wir das Modell für den Edge-AI-Einsatz optimieren. Diesbezüglich verwenden wir das von ONNX zur Verfügung gestellte Quantization Feature.

Bei den für die Verarbeitung natürlicher Sprache (NLP) verwendeten Transformatormodellen handelt es sich zumeist um große KI-Modelle:

  • BERT-base-uncased: ~110 Millionen Parameter
  • RoBERTa-base: ~125 Millionen Parameter
  • GPT-2: ~117 Millionen Parameter.

Jeder Parameter ist eine Gleitkommazahl, die 32 Bits benötigt (FP32). Des Weiteren haben diese Modelle auch eine recht hohe Anforderung an die Hardware, die die Inferenz-Berechnungen durchführt. Diese Herausforderungen machen es schwierig, Transformatormodelle auf Client-Geräten mit begrenztem Speicher und begrenzten Rechenressourcen auszuführen.

Gleichzeitig jedoch machen das wachsende Bewusstsein für den Datenschutz und die Kosten für die Datenübertragung die Ausführung der Inferenz auf dem Edge Device attraktiv. Auch in der Cloud sind Latenzzeit und Kosten sehr wichtig, und jede groß angelegte Anwendung muss für diese optimiert werden.

Quantisierung und Destillation sind zwei Techniken, die üblicherweise zur Bewältigung dieser Größen- und Leistungsherausforderungen eingesetzt werden. Diese Techniken sind komplementär und können zusammen verwendet werden.

Die Vorteile der Destillation machen wir uns zunutze, indem wir bereits ein dementsprechendes BERT-Modell verwenden (bert-destilled). Eine ausgezeichnete Beschreibung zum Thema Destillation liefert Huggingface. Wie bereits zuvor erwähnt, verwenden wir für den Quantization-Schritt das bereits vorhandene Feature von ONNX.

Quantization

Die Quantisierung nähert Fließkommazahlen mit Zahlen geringerer Bitbreite an, wodurch der Speicherbedarf drastisch reduziert und die Leistung beschleunigt wird. Die Quantisierung kann zu Genauigkeitsverlusten führen, da weniger Bits die Genauigkeit und den Wertebereich begrenzen. Forscher haben jedoch ausgiebig gezeigt, dass Gewichte und Aktivierungen mit 8-Bit-Ganzzahlen (INT8) dargestellt werden können, ohne dass ein signifikanter Genauigkeitsverlust auftritt.

Im Vergleich zu FP32 reduziert die INT8-Darstellung die Datenspeicherung und Bandbreite um das 4-fache, was auch den Energieverbrauch reduziert. Hinsichtlich der Inferenzleistung ist die Ganzzahlberechnung effizienter als die Fließkomma-Mathematik. Durch die Verwendung der Quantisierung der ONNX Runtime können wir erhebliche Leistungssteigerungen im Vergleich zum ursprünglichen Modell erzielen.

Die Beschleunigung gegenüber dem ursprünglichen PyTorch-Modell ist sowohl auf die Quantisierung als auch auf die Beschleunigung durch die ONNX Runtime zurückzuführen. Nach der Konvertierung des ursprünglichen PyTorch FP32-Modells in das ONNX FP32-Format war die Modellgröße erwartungsgemäß fast gleich. Nach der Quantifizierung konnte die ONNX-Laufzeit die Modellgröße um das 4-fache reduzieren.

Vorteile:

  • Realdaten verlassen das Edge Device nicht (es wird nur das Sentence Embedding an das Backend gesendet)
  • Entlastung des Backend-Systems, da die Erstellung des Embeddings lokal auf dem Edge Device ausgeführt wird

Das AIOS bietet die Möglichkeit, bestehende Modelle automatisiert in ONNX-Modelle zu konvertieren und eine Quantization durchzuführen. Des Weiteren kann das AIOS verwendet werden, um diese ONNX-Modelle zu managen und zu verteilen. Bei Bedarf kann auch das Preprocessing der Daten zusammen mit dem ONNX-Modell als atomare Einheit erstellt werden.

Wie wir anhand der zwei Use Cases gesehen haben, können wir bereits jetzt auf einfache Art und Weise Edge AI produktiv einsetzen. Mit diesem Ansatz lassen sich hocheffiziente Hybridsysteme erstellen, bei denen wir die Verarbeitung von Daten auf Edge Device und Backend Devices aufteilen können, um Vorteile wie eine Erhöhung des Durchsatzes oder des Datenschutzes zu erzielen.

Viel wichtiger ist jedoch, ein Bewusstsein zu schaffen, dass ein Einklang zwischen technischem Fortschritt und Energieeffizienz hergestellt werden kann und muss. Ich gehe davon aus, dass dieses Thema weiter an Popularität zunehmen wird. Unsere Umwelt wird es uns danken.