Eckdaten

Maschinelles Lernen ist nicht mehr auf Cloud- und High-End-Serversysteme beschränkt und wurde auch erfolgreich im Internet der Dinge und in Edge-Systemen eingesetzt. Dieser Artikel beschreibt einige der Probleme und Engpässe der künstlichen Intelligenz und des maschinellen Lernens in Embedded-Geräten. Diskutiert werden wichtige Designentscheidungen, die dabei helfen, die Leistung und Energieeffizienz zu maximieren.

In jüngster Zeit wurden maschinelles Lernen (ML) und künstliche neuronale Netze (NNs) recht erfolgreich in Computer-Vision-Lösungen zur Objektklassifizierung, Bildsegmentierung und Objekterkennung eingesetzt. Zu den weiteren Anwendungsbereichen zählen außerdem Spracherkennung, natürliche Sprachverarbeitung, Sensordatenanalyse und Predictive Maintenance, um nur einige zu nennen.

Neuronale Netze, die große Datenmengen für maschinelles Lernen benötigen, werden üblicherweise in Cloud-Umgebungen in Rechenzentren und auf Servern installiert, die über spezielle Hardwarebeschleuniger verfügen. Neuerdings werden maschinelle Lernmodelle vermehrt auch auf IoT-Geräten implementiert. Nicht zuletzt, weil die Rechenleistung der Embedded-Geräte kontinuierlich zunimmt, während gleichzeitig die Kosten dafür sinken. Daher ist es heute möglich, technisch anspruchsvollere Geräte in innovativen, zukunftsweisenden Anwendungen einzusetzen. Diese verfügen oftmals über ausreichend hohe Kapazitäten, um neuronale Netze ausführen zu können. Auf der anderen Seite steht modernste Software für die neuronalen Netze bereit, und optimierte Inferenzmaschinen sind heute auch für Embedded-Geräte verfügbar.

Dedizierte IP-Blöcke in System-on-Chips eingebaut

Gegenwärtig bauen die meisten Hersteller von Embedded-Systemen entweder dedizierte IP-Blöcke in ihre System-on-Chips ein, um künstliche neuronale Netze zu beschleunigen, bieten optimierte Board Support Packages (BSPs) mit jederzeit verfügbarer Unterstützung für maschinelles Lernen an oder haben dies zumindest in ihrem Strategieplan bereits fest eingeplant. Der Bedarf an KI-Beschleunigern ist nicht länger nur auf beschränkte Ökosysteme wie Server und Rechenzentren begrenzt. Tatsächlich ist die Nachfrage danach auch in den mobilen und Embedded-Märkten massiv gestiegen.

Convolutional NNs (CNNs)

Die wohl gängigsten heute verwendeten künstlichen neuronalen Netze sind Convolutional Neural Networks (CNNs). Eine einfache CNN-Struktur ist im Bild dargestellt.

Die wohl gängigsten heute verwendeten künstlichen neuronalen Netze sind Convolutional Neural Networks (CNNs). Eine einfache CNN-Struktur ist im Bild dargestellt. Arrow Electronics

Die wohl gängigsten heute verwendeten künstlichen neuronalen Netze sind Convolutional Neural Networks (CNNs), die sich in einer Reihe innovativer und bahnbrechender Anwendungen bewährt haben. Eine einfache CNN-Struktur ist im Bild dargestellt. Der Faltungsvorgang in der Convolutional-Schicht dient dazu, in den Eingabedaten einzelne Merkmale zu erkennen und zu extrahieren, häufig aus Fotos. Zu diesem Zweck wird ein beweglicher Filter (Kernel) auf die Eingabedaten angewendet, das heißt, es wird das Punktprodukt aus Kernel und Eingabepixel berechnet. Auf alle Schichten mit Parametern (Convolutional-, Fully-Connected-Layer) folgt in der Regel eine Schicht mit Aktivierungsfunktion, zum Beispiel eine Rectified Linear Unit (ReLU).

Nach den parametrischen Schichten kommen dann Pooling-Schichten zum Einsatz, diese haben die Aufgabe, räumliche Invarianz durch Reduzierung der Auflösung von Feature-Maps zu erreichen, das heißt überflüssige Informationen werden verworfen und die Datenmenge wird reduziert. Die mit Abstand am häufigsten verwendeten Pooling-Schichten sind Max- und Mean-Pooling.

Systemeinschränkungen

Embedded-Systeme teilen gewisse Einschränkungen mit anderen digitalen Systemen. Bestimmte spezifische Bedürfnisse und Anforderungen sind jedoch für diese Geräte von wesentlich größerer Bedeutung als für Server- oder Desktop-Geräte. In diesem Abschnitt werden diese Einschränkungen unter dem Gesichtspunkt der maschinellen Lernalgorithmen erörtert.

Energieverbrauch

Angestrebtes Designziel ist die Minimierung des Energieverbrauchs bei gleichzeitiger Wahrung der Systemzuverlässigkeit und Effizienz. Embedded-Systeme unterstützen ausgereifte Energiesparmodi mit Deep-Sleep-Energiezuständen zur Verringerung des Energieverbrauchs. Diese wecken die Systeme nur in bestimmten Abständen auf, um Aufgaben zu erfüllen, und kehren anschließend wieder in den Ruhezustand zurück. Das heißt, je länger die Aufgabe und je schneller die Aufwachfrequenz, desto länger ist die Gesamtzeit, die ein System im High-Power-Modus verweilt. Im Fall von neuronalen Netzen korrelieren die Komplexität des Modells und der Rechenaufwand mit der Zeit, die benötigt wird, um den Vorwärtspfad abzuschließen.

Speicherplatzbedarf

Der Speicherplatzbedarf ist ein wichtiger Parameter für Embedded-Plattformen, die häufig nur über eine begrenzte Speichergröße verfügen. Nichtflüchtiger Speicher, üblicherweise in Form eines On-Chip- oder über eine serielle periphere Schnittstelle (SPI) angeschlossenen Flash-Speichers, wird zur Speicherung von Anwendungscodes verwendet. Flüchtiger Speicher kommt zum Einsatz, um Variablen zu speichern und Ausführungscodes zu laden (außer bei laufender Ausführung). Ein System führt nur in den seltensten Fällen ausschließlich maschinelle Lernalgorithmen aus, sondern muss auch andere Komponenten, wie unter anderem Netzwerk-Stacks, Betriebssystem, Treiber und Zwischenspeicher aufnehmen. Speicherzugriffszeit und Prozessor-Cache wirken sich maßgeblich auf die Gesamtleistung eines Systems aus. Die Zentraleinheit (CPU) kann gedrosselt werden, während sie auf Befehle oder Daten wartet. Abhängig von der vorhandenen Architektur können Prozessoren eine begrenzte Cache-Größe aufweisen.

Die Netzwerkkonnektivität war der entscheidende Faktor, der das Internet der Dinge (IoT) erst möglich machte. In einem typischen System mit maschinellem Lernen sammeln Edge-Geräte Daten und leiten sie in die Cloud weiter, wo diese dann genauer ausgewertet werden. Allerdings ist dies nicht immer möglich beziehungsweise funktioniert es nicht immer zuverlässig, da manche Standorte unter Umständen nur über eine begrenzte Netzwerkabdeckung verfügen. In bestimmten Fällen kann es daher sinnvoll sein, die Daten lokal zu verarbeiten und nur die Endergebnisse zu senden, um die Netzwerkauslastung auf einem annehmbaren Level zu halten. Es ist außerdem anzumerken, dass ein System aufzuwecken, eine Verbindung mit der Cloud herzustellen und Daten zu versenden, um eine Antwort zu erhalten, möglicherweise mehr Energie erfordert, als für die lokale Datenverarbeitung tatsächlich nötig wäre.

Performance

In der Regel erhält man mit mehr NN-Schichten eine größere Modellkapazität und -genauigkeit. Die Forschung und Entwicklung zielt jedoch darauf ab, hochoptimierte Modelle in Hinblick auf Leistung und Speicherbedarf zu bauen, die gleichzeitig extrem präzise sind. Die Inferenzzeit, das heißt, die Zeit, die benötigt wird, um eine Vorhersage oder Klassifikation zu berechnen, hängt stark von der Kernfrequenz, der Parallelisierung und dem Befehlssatz ab. Je höher die Frequenz, desto geringer die Inferenzzeit. In vielen Fällen gilt heute der Speicherzugriff als das Nadelöhr, das die Leistung der neuronalen Netzwerke hemmt und die Prozessoreinheiten und Beschleuniger zum Stillstand bringt, während sie darauf warten, dass Daten abgerufen oder geladen werden. Der Cache-Speicher ist der CPU am nächsten und die Maximierung seiner Nutzung bei gleichzeitiger Minimierung der Cache-Fehlzugriffe ist in der Regel ein entscheidender Faktor für das Erreichen einer hohen Leistung. Der springende Punkt ist, dass die Systeme so ausgelegt werden sollten, dass der Speicherzugriff der Verarbeitungsfrequenz und den Systemkapazitäten entspricht.

Inferenzmaschinen

Deep-Learning-Frameworks sind die Werkzeuge, die für den Aufbau, die Lernentwicklung und den Betrieb von neuronalen Netzen zum Einsatz kommen. Die zunehmende Verbreitung von Deep-Learning-Frameworks hat dazu geführt, dass diese Aufgaben auf cloudbasierte Systeme umgestellt wurden. In sogenannten Modellzoos steht eine Vielzahl vorgeschulter Modelle zur Verfügung, die entweder unmittelbar zur Lösung allgemeiner Aufgaben oder auch als Backbones (das heißt als Funktionsextraktoren) für spezialisierte neuronale Netze verwendet werden können. So einfach es jedoch ist, ein geschultes System in einem System mit x86-Architektur mit Grafikprozessoreinheit einzusetzen, so problematisch gestaltet sich die Implementierung desselben Modells in einen Mikrocontroller.

Um dieses Problem zu beheben, wurde eine Reihe von Softwarelösungen entwickelt – sogenannte Inferenzmaschinen. Dabei handelt es sich im Wesentlichen um Bibliotheken mit optimierten Kerneln oder Funktionen für Zielhardware-Plattformen, ohne dabei die begrenzten Ressourcen auf Embedded-Mikrocontrollern außer Acht zu lassen.

CMSIS-NN

CMSIS ist eine der jüngsten Erweiterungen mit dem Ziel, die neuronalen Netzwerke mithilfe von DSP-Befehlen zu beschleunigen. Dabei handelt es sich um SIMD-Befehle (Single-Instruction Multiple-Data), die mit einem Datenvektor arbeiten. Die ARM-Mikrocontroller sind 32-Bit-Mikrocontroller, daher basiert jeder Befehl tatsächlich auf einem Vektor von vier 8-Bit- oder zwei 16-Bit-Samples. CMSIS ist im Wesentlichen eine Bibliothek von NN-Kernels, die direkt in einer Anwendung aufgerufen werden kann. Die Modelltopologie wird durch Ein- und Ausgangspuffer zwischen den aufeinanderfolgenden Schichten implementiert, Gewichtungen werden in einer Header-Datei mit Parametertabellen angegeben.

TensorFlow Lite

TensorFlow, von Google entwickelt, ist eines der bekanntesten Deep-Learning Open-Source-Frameworks. Es bietet Methoden für den Aufbau und die Schulung von Modellen, einschließlich Front-End-Schnittstellen wie Keras und GradientTape. TensorFlow Lite ist eine abgespeckte Version, die nur den Vorwärtspfad unterstützt, das heißt die Herleitung basiert ausschließlich auf den Eingabedaten.

Interferenzmaschinen im Vergleich.

Interferenzmaschinen im Vergleich. Arrow Electronics

Glow: Compiler für maschinelles Lernen

Glow ist ein Compiler für maschinelles Lernen, der bei Eingabe eines rechnergestützten Betriebsdiagramms einen optimierten Code für eine Zielhardware kompiliert. Er dient als Inferenzmaschine, welche die verfügbare Hardwarebeschleunigung nutzt. Glow nutzt einen zweiphasigen Ansatz mit Zwischendarstellung (IR). Ausgehend von einer High-Level-IR führt sie domänenspezifische (das heißt auf maschinelles Lernen bezogene) Optimierungen durch, gefolgt von einer Low-Level-IR, die Assembleranweisungen und reine Adressreferenzen verwendet, um die Speichernutzung durch Eliminierung von Kopiervorgängen, statische Speicherzuweisung und Umschichtungsoperationen zu optimieren. Der letzte Schritt ist dann die Kompilierung eines Maschinencodes, der Hardware-Features für die Beschleunigung nutzt.

Fazit

Embedded-Systeme haben zahlreiche Gemeinsamkeiten mit anderen gängigen digitalen Systemen mit Prozessoreinheit und Speicherdomäne. Es gibt jedoch spezifische Überlegungen, die gerade bei Geräten mit eingeschränkten Funktionen von größerer Bedeutung sind als bei Servern und High-End-Systemen. Auch Speicherplatzbedarf, Energieeffizienz und Verarbeitungszeit müssen berücksichtigt werden.

Der Schlüsselfaktor für hohe Leistung und Energieeffizienz ist die Abstimmung der Datenverarbeitungskapazitäten mit Speicherzugriff und Datenverfügbarkeit, so dass nichts davon unnötig stillsteht oder behindert wird. Darüber hinaus ist die Nutzung von DSP-Befehlen oder anderer Verfahren zum gleichzeitigen Arbeiten mit mehreren Datensätzen erforderlich, um eine hohe Leistung zu erzielen.