Home Artikel Künstliche Intelligenz am „Edge“

Künstliche Intelligenz am „Edge“

Einführung
In letzter Zeit wurden maschinelles Lernen und neuronale Netze erfolgreich in maschinellen Bildverarbeitungslösungen zur Objektklassifizierung und -erkennung sowie zur Bildsegmentierung eingesetzt. Darüber hinaus umfassen die Anwendungen Spracherkennung, Verarbeitung natürlicher Sprache, Sensordatenanalyse und vorausschauende Wartung, um nur einige zu nennen. Neuronale Netze, die große Datenmengen zum Trainieren benötigen, werden häufig in Cloud-Umgebungen, Rechenzentren und Servern mit Beschleunigungskarten eingesetzt. Vor kurzem wurde damit begonnen, Modelle für maschinelles Lernen in Geräten des Internets der Dinge zu implementieren.
Die Rechenkapazität eingebetteter Geräte hat stetig zugenommen, während die Kosten gesenkt wurden. Daher können jetzt viel ausgefeiltere Geräte in hochmodernen Anwendungen eingesetzt werden. Oft haben sie genug Leistung, um neuronale Netze zu betreiben. Andererseits unterstützt moderne Software solche Netzwerke und es gibt Inferenz-Engines, die für eingebettete Geräte optimiert sind. Heutzutage können die meisten Hersteller von Embedded-Systemen dedizierte IP-Blöcke in ihren Systems-on-Chip hinzufügen oder erwägen das Hinzufügen von dedizierten IP-Blöcken in ihre Systems-on-Chip, um künstliche neuronale Netze zu beschleunigen und optimierte BSPs (Board Support Packages) mit sofort einsatzbereiter Kompatibilität anzubieten. Der Bedarf an KI-Beschleunigern beschränkt sich nicht mehr nur auf Server und Rechenzentrumsökosysteme, sondern ist auch in den Mobil- und Embedded-Märkten zu einem echten Bedarf geworden.
Convolutional Neural Networks (CNN)
Der vielleicht bekannteste Netzwerktyp, der heute verwendet wird, sind Convolutional Neural Networks (CNNs), die Anwendungen für eine Reihe von beispiellosen und hochmodernen Implementierungen gefunden haben. Das Bild zeigt eine einfache Struktur von CNN. Die Faltungsoperation wird verwendet, um Merkmale aus Eingabedaten, häufig aus Bildern, zu extrahieren. Dazu wird auf die Eingabedaten ein mobiler Filter (Kernel) angewendet, dh das Punktprodukt aus dem Kernel und den Eingabepixeln wird berechnet. Allen parametrisierten Schichten (Faltung, vollständig verbunden) folgt normalerweise eine Aktivierungsfunktionsschicht, z. B. Rectified Linear Unit (ReLU). Die Reduktionsschichten werden nach den parametrischen Schichten eingeführt, deren Funktion darin besteht, räumliche Invarianz durch Verringerung der Auflösung der Merkmalskarten zu erreichen. Die am häufigsten verwendeten Reduktionsschichten sind die maximalen und durchschnittlichen Operationen.
Systembeschränkungen
Eingebettete Systeme teilen einige Einschränkungen mit anderen digitalen Systemen. Diese Geräte haben jedoch bestimmte spezifische Bedürfnisse und Anforderungen mit größerem Gewicht als im Fall von Servern oder Desktop-Geräten. In diesem Abschnitt werden diese Einschränkungen unter Berücksichtigung von maschinellen Lernalgorithmen diskutiert.
Energieverbrauch
Das Designziel besteht darin, den Stromverbrauch zu minimieren und die Systemzuverlässigkeit und -effizienz aufrechtzuerhalten. Eingebettete Systeme ermöglichen ausgeklügelte Stromsparmodi mit Tiefschlafzuständen, um den Stromverbrauch zu reduzieren. Sie wachen nur periodisch auf, um bestimmte Aufgaben zu erledigen, und schlafen dann wieder ein. Je länger also die Aufgabe dauert und je höher die Weckfrequenz ist, desto länger befindet sich das System insgesamt im Hochleistungsmodus. Bei neuronalen Netzen korrelieren die Komplexität des Modells und der Rechenaufwand mit der Zeit, die benötigt wird, um die Vorwärtsausbreitung abzuschließen.
Speicher
Der Speicherbedarf ist ein wichtiger Parameter für eingebettete Plattformen, die oft nur über eine begrenzte Speichergröße verfügen. Nichtflüchtige Speicher, typischerweise On-Chip- oder SPI-Flash-Speicher, werden zum Speichern von Anwendungscode verwendet. Flüchtige Speicher werden verwendet, um Variablen zu speichern und Code zur Ausführung zu laden (außer bei direkter Ausführung). Es ist selten, dass ein System nur maschinelle Lernalgorithmen ausführt. Es muss Komponenten wie den Netzwerkstapel, das Betriebssystem, Treiber und Puffer enthalten. Prozessor-Cache und Speicherzugriffszeit haben einen erheblichen Einfluss auf die Gesamtsystemleistung. Die CPU (Central Processing Unit) kann drosseln, wenn sie auf Anweisungen oder Daten wartet. Abhängig von der Architektur können eingebettete Prozessoren eine begrenzte Cache-Größe haben. Die Netzwerkkonnektivität war der Schlüssel zur Entstehung des Internets der Dinge. In einem typischen System mit maschinellem Lernen sammeln und teilen die Edge-Geräte Daten mit der Cloud, wo sie weiter analysiert werden. Dies ist jedoch nicht immer möglich oder zuverlässig, da bestimmte Bereiche möglicherweise eine begrenzte Netzabdeckung haben. In einigen Fällen kann es sinnvoll sein, die Daten lokal zu verarbeiten und nur die endgültigen Ergebnisse zu senden, um den Netzwerkverbrauch zu reduzieren. Es sollte auch beachtet werden, dass das Aufwecken eines Systems, das Herstellen einer Verbindung zu einer Cloud und das Senden von Daten zum Empfangen einer Antwort mehr verbrauchen könnte als die lokale Verarbeitung der Daten.
Performance
Im Allgemeinen entsprechen mehr Schichten neuronaler Netze einer größeren Modellfähigkeit und -genauigkeit. Es wird jedoch weiter geforscht, um Modelle zu erstellen, die in Bezug auf Leistung und Speicheranforderungen hochgradig optimiert sind und gleichzeitig sehr genau sind. Die Inferenzzeit, dh wie lange es dauert, eine Vorhersage oder Klassifizierung zu berechnen, hängt stark von Kernfrequenz, Parallelisierung und Befehlssatz ab. Je höher die Frequenz, desto kürzer die Inferenzzeit. Heutzutage wird in vielen Fällen oft gesagt, dass der Speicherzugriff der Engpass ist, der die Leistung neuronaler Netze hemmt und dazu führt, dass Verarbeitungseinheiten oder Beschleuniger ins Stocken geraten, während sie darauf warten, dass Daten abgerufen oder geladen werden. Der Cache ist der CPU am nächsten, und die Maximierung seiner Nutzung bei gleichzeitiger Minimierung von Cache-Fehlschlägen ist oft entscheidend für eine hohe Leistung. Das Schlüsselproblem besteht darin, dass sich das System so anpassen sollte, dass der Speicherzugriff mit der Verarbeitungsfrequenz und den Fähigkeiten des Systems übereinstimmt.
Inferenzmaschinen
Deep-Learning-Frameworks sind Tools zum Erstellen, Trainieren und Ausführen neuronaler Netze. Die Verbreitung von Deep-Learning-Frameworks hat zur Optimierung dieser Aufgaben in Cloud-basierten Systemen geführt. In sogenannten „Modell-Zoos“ steht eine große Anzahl vortrainierter Modelle zur Verfügung, die direkt für generische Aufgaben oder als Rückgrat (z. B. Merkmalsextraktoren) für spezialisierte neuronale Netze verwendet werden können. So einfach es jedoch ist, ein Modell einzusetzen, das mit einem x86-Architektursystem mit einer Grafikverarbeitungseinheit trainiert wurde, ist es nicht so einfach, dasselbe Modell für einen Mikrocontroller zu verwenden. Um dieses Problem anzugehen, wurde eine Reihe von Softwarelösungen entwickelt, die als Inferenzmaschinen bezeichnet werden. Im Wesentlichen sind sie Bibliotheken mit Funktionen oder Kerneln, die für Hardwareplattformen optimiert sind, wobei berücksichtigt wird, dass eingebettete Mikrocontroller begrenzte Ressourcen haben.
Neuronale CMSIS-Netze
CMSIS ist eine der neueren Erweiterungen, die darauf abzielt, neuronale Netze mithilfe von DSP-Anweisungen zu beschleunigen. Dies sind SIMD-Befehle (Single Instruction, Multiple Data), die mit einem Datenvektor arbeiten. ARM-Mikrocontroller sind 32-Bit, sodass jede Anweisung tatsächlich mit einem Vektor von vier 8-Bit-Samples oder zwei 16-Bit-Samples arbeitet. Im Grunde ist CMSIS eine Bibliothek neuronaler Netzwerkkerne, die direkt in einer Anwendung aufgerufen werden können. Die Modelltopologie wird implementiert, indem Eingabe- und Ausgabepuffer zwischen aufeinanderfolgenden Schichten weitergegeben werden, während Gewichtungen in einer Header-Datei mit Parametertabellen zugewiesen werden.
TensorFlow Lite
TensorFlow ist eines der beliebtesten Open-Source-Frameworks für Deep Learning, das von Google entwickelt wurde. Es bietet Methoden zum Erstellen und Trainieren von Modellen, einschließlich Frontend-Schnittstellen wie Keras und Gradient Tape. TensorFlow Lite ist eine Kurzversion, die nur die Vorwärtsausbreitung unterstützt, d. h. sie leitet nur aus den Eingabedaten ab.
Glühen
Glow ist ein Compiler für maschinelles Lernen, der anhand eines Rechendiagramms von Operationen als Eingabe Code kompiliert, der für die betreffende Hardware optimiert ist. Es wurde entwickelt, um als Inferenz-Engine verwendet zu werden, die die verfügbare Hardwarebeschleunigung nutzt. Glow verwendet einen zweiphasigen Ansatz mit Intermediate Rendering (IR). Beginnend mit High-Level-RI führt es domänenspezifische Optimierungen durch (z. B. im Zusammenhang mit maschinellem Lernen), gefolgt von Low-Level-RI mit Assembleranweisungen und reinen Adressreferenzen, um die Speichernutzung zu optimieren, indem Kopiervorgänge eliminiert, Speicher statistisch zugewiesen und Vorgänge neu organisiert werden. Dann besteht die letzte Phase darin, Maschinencode zu kompilieren, der Hardwarefunktionen zur Beschleunigung nutzt.
Fazit
Eingebettete Systeme ähneln jedem digitalen System mit einer Verarbeitungseinheit und einer Speicherdomäne. Es gibt jedoch bestimmte Überlegungen, die für eingeschränkte Geräte wichtiger sind als für High-End-Systeme und -Server. Speicherbedarf, Energieeffizienz und Verarbeitungszeit müssen alle berücksichtigt werden. Der Schlüssel zu Leistung und Energieeffizienz liegt in der Ausbalancierung von Verarbeitungskapazitäten mit Speicherzugriff und Datenverfügbarkeit, damit beide nicht unnötig ins Stocken geraten. Für eine hohe Leistung ist es notwendig, DSP-Anweisungen oder andere Verfahren zu verwenden, um gleichzeitig mit mehreren Datenabtastungen zu arbeiten.