arm TechDays 2018 arm enthüllt Prozessor-Architektur für maschinelles Lernen

arm enthüllte seine NPU.
arm enthüllte seine NPU.

Im Februar 2018 kündigte arm sein »Projekt Trillium« an, eine Prozessor-IP für maschinelles Lernen auf Basis von neuronalen Netzwerken oder auch NPU genannt (Neuronal Networks Processing Unit). Die NPU soll CPUs und GPUs bei neuronalen Netzwerkoperationen ergänzen, hier sind die Details.

Im Gegensatz zu Rechenzentrumsbasierten –Ansätzen will arm  maschinelles Lernen "on the edge" möglich machen, d.h. direkt im Endgerät. Dies hat auf den ersten Blick zahlreiche Vorteile, wie z.B. geringere Latenzzeiten, da der Datentransfer vom und zum Rechenzentrum entfällt und Kostenreduktion z.B. durch den Entfall des (drahtlosen) Datentransfers. Ein weiterer Aspekt ist Security, da die Daten das Endgerät nicht mehr verlassen und damit nicht mehr im Rechenzentrum selbst oder auf dem Weg dahin von Hackern abgefangen werden können.

Das Problem beim Edge-Computing besteht jedoch darin, dass die für neuronale Netzwerke wichtigen rechenintensiven Operationen wie Matrizen-Multiplikationen auf herkömmlichen CPU- und GPU-Architekturen nicht oder nur mit enormem Hardware-Einsatz realisierbar sind, da weder CPU- noch GPU-Mikroarchitekturen für diese Art von Workloads (z.B. eben zweidimensionale MAC-Operationen im Fall von Matrizen) designt wurden. Als Antwort auf diese Herausforderungen wurden spezielle NN-Prozessoren entwickelt, wir haben Ihnen bereits ein Beispiel in Form der sogenannten TPU von Google im Detail vorgestellt.

Der maschinelle Lernprozessor von Arm basiert auf einer neuen Architektur speziell für neuronale Netze. Sie ist skalierbar vom Mobiltelefon bis hin zum Einsatz in Rechenzentren und soll drei wesentliche Aspekte abdecken, die bei dieser Art von Workloads relevant sind: Effizienz bei der Berechnung von Faltungen, effiziente Datenverschiebung und hinreichend einfache Programmierbarkeit. Dazu kommen 16 „Compute Engine“ genannte Einheiten für die reine Datenberechnung, ein Speicher-Subsystem und einen programmierbaren Block für die Ablaufsteuerung, der aus einem Mikrocontroller und einer DMA-Engine besteht. Die Faltungsberechnungen konzentrieren sich daher auf 8-Bit-Datentypen, die sich als Standard in maschinellen Lernanwendungen etabliert haben, wobei interne Operationen mit unterschiedlichen Präzisionen ausgeführt werden.

Die Bilderstrecke (Folie 5) zeigt die Darstellung des Datenflusses (grüne Pfeile) und des Kontrollflusses (rote Pfeile) durch die Funktionsblöcke des Prozessors. Das SRAM ist ein gemeinsamer Block mit einer Größe von 1 MB, der als lokaler Puffer für die Berechnungen der Compute-Engines dient. Deren Funktionsblöcke arbeiten auf den verschiedenen Ebenen des neuronalen Netzwerkmodells, z.B. Faltungsberechnungen, Gewichte-Dekoder u.s.w. Die Faltungsberechnungen werden in einer 128 bit breiten MAC-Einheit ausgeführt.

Jede Compute-Engine hat ihren eigenen lokalen Speicher, der von den Modulen zur Verarbeitung von DNN-Modellen verwendet wird (DNN-Deep Neuronal Network). Der Ablauf ist typisch für DNN-Implementierungen, beginnend mit der Gewichtung der eingehenden Daten, der Verarbeitung über die MAC-Faltungsengine und der Verarbeitung der Ergebnisse durch die programmierbare Layer-Engine (PLE).

Die sogenannte Programmable Layer Engine (PLE) soll die Architektur bezüglich fortlaufender Entwicklung des maschinellen Lernens flexibel halten. Ob die derzeitigen Modelle auch noch in Jahren verwendet werden, ist nämlich alles andere als sicher, wenn man erstmal hinreichende Erfahrungen mit den heutigen Modellen gemacht hat.  Die PLE ermöglicht es dem ML-Prozessor, über Vektor- und NN-spezifische Befehle neue Operatoren einzubinden und verarbeitet die Ergebnisse der MAC-Engines, bevor die Daten wieder in das SRAM geschrieben werden.

Bilder: 16

arms erster ML-Prozessor

arms „Projekt Trillium“ ist eine Prozessor-IP für maschinelles Lernen auf Basis von neuronalen Netzwerken oder auch NPU. Hier sind die Details.

Eine weitere Herausforderung beim Edge-Computing sind der limitierte Datendurchsatz vom und zum Chip und das zur Verfügung stehende Energiebudget, insbesondere kann externes DRAM eine ähnlich hohe Leistungsaufnahme generieren wie der ML-Prozessor selbst. Die Architektur von arm nutzt daher gängige Verfahren, um Feature-Maps verlustfrei zu komprimieren, indem das häufige Auftreten von sich wiederholenden Nullen in einem gegebenen 8x8-Block verborgen wird. Arm behauptet, dass dies zu Kompressionsverhältnissen von etwa 3,3 führen kann. SRAM, in dem Zwischenergebnisse und Daten gespeichert werden, beansprucht ebenfalls ein hohes Energiebudget, so dass jede Möglichkeit zur Reduzierung der benötigten SRAM-Kapazität genutzt wird. Für 16 Compute-Engines sieht arm einen Bedarf von 1 MB SRAM.

Um den Speicherbedarf weiter zu reduzieren, werden auch die Gewichte komprimiert und reduziert. Analog zu einer biologischen Synapse im Gehirn repräsentieren die Gewichte ja das Wissen in einem neuronalen Netz. Die Reduktion von Neuronen, die keinen signifikanten Einfluss auf das Endergebnis haben würden, erlaubt es der Hardware, bestimmte Berechnungen zu überspringen und reduziert damit die Anzahl der DRAM-Aufrufe.

Insgesamt kündigt arm in realen Anwendungsfällen für die 16 Compute-Engines-Variante bei einer Implementierung in TSMCs 7-nm-Prozess eine absolute Rechenleistung von 4.6 TOPs mit rund 3 TOPs/W an. Es soll aber auch Implementierungen in 16 nm geben. Neben der hier aufgezeigten Konfiguration mit 16 Compute-Engines und 1 MB SRAM soll es später auch kleinere Varianten geben, sogar eine Minimalkonfiguration mit nur einer Compute-Engine steht zur Disposition. An Siliziumfläche soll die hier gezeigte NPU etwas mehr als ein Cortex-A55 belegen.

Das System ist für die Skalierung von 20 GOPs für das Internet der Dinge (IoT) bis zu 150 TOPs für High-End-Unternehmensanwendungen ausgelegt. Natürlich werden Low-End-Plattformen nicht so leistungsfähig sein, aber viel weniger Strom aufnehmen.

Arm will Workloads für NPU, CPUs und GPUs mit einer gemeinsamen Software-Bibliothek bedienen. Der Kern davon ist "Arm NN", eine Art Brücke zwischen den gängigen neuronalen Netzwerkframeworks von Drittanbietern  wie TensorFlow, Caffe und Android NNAPI und den verschiedenen arm-CPUs und –GPUs. Code kann generisch geschrieben werden und auf jeder verfügbaren Verarbeitungseinheit ausgeführt werden. Beispielsweise kann ein budgetorientiertes Gerät mit herkömmlichem CPU- und GPU-Setup denselben NN-Code ausführen wie ein High-End-Gerät mit einem diskreten ML-Prozessor - nur langsamer. Arm bietet auch Unterstützung für IP von Drittanbietern, die bei Bedarf in den Stack integriert werden können. „Arm NN“ ist ab sofort für Entwickler verfügbar, die Android oder Embedded Linux mit Unterstützung für Cortex-A-CPUs und Mali-GPUs einsetzen.

In gewisser Weise ist dies der gleiche Ansatz, den Nvidia mit seiner CUDA-Plattform verfolgt, die auf eine Reihe von GPUs abzielt. Diese GPUs sind ähnlich, haben aber jeweils kleine Unterschiede, die durch die CUDA-Unterstützung verdeckt sind. Ein eigenes Framework macht es für Entwickler schwierig, auf verschiedene Plattformen zu wechseln. CUDA beherrscht mehr als nur künstliche Intelligenz (AI) und ML-Anwendungen. Entwickler, die auf ML-Tools wie TensorFlow abzielen, können normalerweise von Plattform zu Plattform wechseln, einschließlich des ML-Prozessors von Arm.

Die sofortige Verfügbarkeit von „Arm NN“ gilt allerdings nicht für Siliziumimplementierungen. Die RTL für die NPU ist noch nicht fertig, was bedeutet, dass erstes Silizium wohl kaum vor Ende 2019 auf den Markt kommen wird. Im Vergleich zum Wettbewerb ist arm damit richtig spät dran, denn die Chip-Schmiede von Huawei, HiSilicon, hat ja bekanntlich bereits für das aktuelle Smartphone P20 einen NN-Prozessor entwickelt, dessen dann vermutlich bereits 3. Generation verfügbar sein wird, wenn die ersten arm-Chips kommen. Nvidia hat bereits den NVIDIA Deep Learning Accelerator (NVDLA) als Open-Source-Hardware veröffentlicht. NVDLA wird im Xavier-SoC verwendet, das für Anwendungen im Automobil und für autonomes Fahren entwickelt wurde.