Arrow Electronics / Nvidia Künstliche Intelligenz im Edge-Computing

Bild 1: Der Jetson Xavier von Nvidia (links) mehr Rechenleistung bietet als eine leistungsstarke Workstation. Herzstück ist der Xavier-Prozessor, der eine 512-Core-GPU namens Volta mit Tensor-Cores enthält.
Bild 1: Der Jetson Xavier von Nvidia (links) mehr Rechenleistung bietet als eine leistungsstarke Workstation. Herzstück ist der Xavier-Prozessor, der eine 512-Core-GPU namens Volta mit Tensor-Cores enthält.

Durch das IoT ist in letzter Zeit immer mehr »Intelligenz« aus der Cloud in die sogenannte Edge gewandert, also an die Ränder des Netzwerks. Was müssen Systemdesigner bei der Arbeit mit Künstlicher Intelligenz in Edge-Lösungen berücksichtigen?

Künstliche Intelligenz, Machine-Learning oder Deep-Learning haben in letzter Zeit große Aufmerksamkeit auf sich gezogen. Dies ist zu großen Teilen den großen Internet-Unternehmen geschuldet, die diese Technologien für Aufgaben wie Bild- oder Spracherkennung oder die Verarbeitung natürlicher Sprache einsetzen. Die meisten von uns nutzen solche Systeme tagtäglich. Denken wir einmal an Machine-Learning: Als Erstes kommt uns dabei die mithilfe riesiger Rechenzentren mit Tausenden von Servern gehostete Cloud in den Sinn. 

Für viele Anwendungen ist dies bereits seit vielen Jahren der Standard. Die vor Kurzem durch das Aufkommen des Internet der Dinge erfolgte Steigerung der Verfügbarkeit und Leistung von Hardware führt zusammen mit einer Verringerung der Kosten dazu, dass eine Vielzahl von Anwendungsszenarien wieder von der Cloud direkt an den Rand des Netzwerks verlegt werden – auch als Edge-Computing bezeichnet. Im Zuge dessen werden die Geräte an den Knotenpunkten immer autonomer. Gleichzeitig verschiebt sich die »Intelligenz« verstärkt aus der Cloud heraus zurück an den Rand des Netzwerks, wo die eigentlichen Ereignisse stattfinden. Dies ermöglichte bereits die Realisierung sehr interessanter Anwendungen wie autonome Drohnen, Fahrerassistenzsysteme (ADAS) im Automobilsektor und »intelligente« mobile Roboter, und das ist mit Sicherheit erst der Anfang.

Was aber muss ein Systemdesigner bei der Arbeit mit künstlicher Intelligenz in Edge-Lösungen berücksichtigen? Beim typischen Ablauf geht es dabei im Wesentlichen darum, die zu lösenden Aufgabe zu verstehen, den passenden Algorithmus zu wählen, wie dieser zu trainieren ist, und wie ein Inferenzmodell bereitzustellen ist. Dieses Modell ist letztlich das Stück Software, das – basierend auf den vorhandenen Eingangsdaten – eine Entscheidung trifft beziehungsweise ableitet.

Das Ziel: die Definition des Problems

Bei der Arbeit an einer beliebigen Lösung ist der möglicherweise wichtigste und überraschenderweise oft vernachlässigte Schritt die Identifikation des Problems, das es zu lösen gilt. Ein echtes Verständnis für die jeweilige Aufgabenstellung ist deshalb unverzichtbar, um den richtigen Lösungsansatz und die geeignete Technik dafür zu wählen.

Versucht man eine komplexe Klassifizierungsaufgabe zu bewältigen, für die ein tiefes neurales Netzwerk mit vielen versteckten Schichten benötigt wird? Machine-Learning ist nicht allein auf Deep-Learning und neuronale Netzwerke beschränkt. Es gibt viele sogenannte »klassische« Algorithmen für maschinelles Lernen, beispielsweise der k-Means-Algorithmus, Support-Vector-Machines und statistische Modelle, die häufig wenig Ressourcen benötigen und unter Umständen eine optimale Lösung darstellen.

Ein systematisches Trial-&-Error-Verfahren ist in diesem Zusammenhang sehr wichtig, um einen geeigneten Ansatz zu entwickeln. Vor diesem Hintergrund ist Deep-Learning seit Kurzem die maßgeblich treibende Kraft für die Verbreitung künstlicher Intelligenz.

Architektur: die Wahl der korrekten Werkzeuge

Die Anforderungen und Beschränkungen der jeweiligen Anwendung sind die ausschlaggebenden Faktoren für die Spezifikation des finalen Produkts, das mit Algorithmen aus dem Bereich der künstlichen Intelligenz realisiert wird. Diese sind wiederum eng verbunden mit Robustheit, Inferenzzeiten (das Durchreichen eines Datums innerhalb des neuronalen Netzwerks, um eine Vorhersage oder Klassifizierung eines einzelnen Musters zu erhalten), Hardware-Ressourcen und Dienstgüte (Quality of Service), insbesondere im Falle von Edge-Computing-Anwendungen und bei der Auswahl der geeigneten Embedded-Plattform. Die Robustheit bezieht sich darauf, wie genau die Ergebnisse sind, die das Modell liefert, und wie leicht es ist, diese Ergebnisse zu verallgemeinern. Darunter versteht man, wie wahrscheinlich das berechnete Ergebnis korrekt ist und gleichzeitig eine Überanpassung vermeidet. Typischerweise ist das Modell umso robuster, je komplexer (beziehungsweise tiefer, mehrschichtiger) es ist und je reichhaltiger die Datenbasis ist.

Die Festlegung einer gewünschten Inferenzzeit hängt von der jeweiligen Anwendung ab. In manchen Fällen, beispielsweise in Automobilanwendungen, ist es aus Sicherheitsgründen wichtig, die Antwort eines Bildverarbeitungssystems unter einer Millisekunde zu erhalten. Bei Sensorfusions-Systemen mit sich langsam verändernden Messwerten, die eventuell nur minütlich neue Inferenzen hervorbringen, ist dies hingegen nicht notwendig. Die Inferenzgeschwindigkeit hängt dabei von der Komplexität des Modells ab – mehr Schichten führen zu mehr Berechnungen, sodass sich die Inferenzzeiten in solchen Fällen verlängern. Dies lässt sich durch Auswahl und Einsatz einer leistungsstärkeren Rechenressource ausgleichen, zum Beispiel Embedded-GPUs, DSPs, neuronale Beschleuniger mit OpenCL-Kernel, die die verfügbaren Ressourcen vollständig nutzen können.

Zusätzlich wächst der Speicherbedarf des Modells mit der Anzahl der Neuronen und Gewichte. Denn jedes Gewicht entspricht einer Zahl, die im Speicher abgelegt werden muss. Um die Größe des Modells zu reduzieren (und oft um Hardware-Spezifikationen anzupassen), lassen sich die Gewichte von Floating-Point- oder Double-Werten in Integer-Werte umwandeln.