ISSCC 2019 Samsung zeigt NN-Verarbeitungseinheit für 8-nm-SoCs in Handys

Samsungs Spitzenmodelle Galaxy S9 und S9 plus haben die Absatzerwartungen bisher nicht erfüllt.

Deep-Learning wird seit langem für die Bild- und Spracherkennung eingesetzt. Für Mobilgeräte-SoCs wurden energieeffiziente neuronale Verarbeitungseinheiten (NPU) entwickelt, um die Faltungsschichten (CLs) und vollständig verbundene Schichten (FCLs) in tiefen neuronalen Netzwerken zu realisieren.

Eine NPU muss angesichts der Tatsache, dass neuronale Netze immer tiefer werden, 1K- oder noch mehr Multiplikator/Akkumulator-(MAC)-Einheiten integrieren. Für die Energieeffizienz wurde die Kompression neuronaler Netze untersucht, indem neuronale Verbindungen gestutzt und Gewichte und Merkmale mit 8 b oder noch niedrigerer Festkommapräzision ohne Genauigkeitsverlust quantisiert wurden. Ein Hardwarebeschleuniger erzielt damit eine hohe Auslastung der MAC-Einheiten. Da es jedoch schwierig ist, vorherzusagen, wo ein Beschneiden möglich ist, benötigt ein solcher Beschleuniger eine komplexe Schaltung zur Auswahl einer Reihe von Merkmalen, die einer Reihe von Gewichten ungleich Null entsprechen. Um die Leistungsaufnahme von MAC-Operationen zu reduzieren, wurden bit-serielle Multiplikatoren eingesetzt. Im Allgemeinen müssen neuronale Netze mit extrem niedriger oder variabler Bitpräzision sorgfältig trainiert werden.

Bild 1 zeigt die Anzahl der Operationen pro Element, Gewicht oder Merkmal in Inception-v3. Inception v3 ist ein weit verbreitetes Bilderkennungs-KI-Modell, das eine Genauigkeit von mehr als 78,1% im ImageNet-Datensatz erreicht. Wird ein Element mehr als ein anderes Element wiederverwendet, ist es aus Energiegründen vorteilhaft, wenn das Element stationär bleibt und somit die Energie zum Nachladen des Elements eingespart wird. Andernfalls, ohne hohe Wiederverwendung, sollten die Daten gestreamt werden. Da die ersten Schichten hauptsächlich CLs sind, ist die Anzahl der Operationen pro Gewicht viel höher als die pro Merkmal. Für die letzten Schichten haben sie kleine CLs und eine FCL, und die Anzahl der Operationen pro Merkmal ist relativ hoch. Die NPU sollte abwechselnd mit stationären Gewichten und Streaming-Funktionen arbeiten oder umgekehrt, je nach Schichttyp.

In seiner Präsentation stellte Samsung eine energieeffiziente neuronale Netzwerk-Verarbeitungseinheit mit den folgenden Merkmalen vor: einen energieeffizienten in Schmetterlings-Struktur ausgeführter Dualkern-Beschleuniger mit 1.024 MACs, Ausnutzung der dreifachen Parallelität bei der Berechnung von CLs und FCLs, Anwendung einer einfachen Feature-Map-Auswahl und Lockstep-freie MAC-Operationen basierend auf schwachbesetzten Matrizen sowie Unterstützung für ein bandbreiteneffizientes Netzwerk.

Die Gesamtarchitektur der NPU in Samsungs Exynos-SoC, das z.B. den den Galaxy-Smartphones verbaut wird, ist in Bild 2 ersichtlich. Sie besteht aus einem NPU-Controller (NPUC) und zwei NPU-Kernen. Der NPUC verfügt über eine CPU, eine DMA-Einheit, Code SRAM und einen Netzwerk-Controller. Die CPU kommuniziert mit dem Hostsystem des SoC und definiert die Netzwerkgröße für die Netzwerksteuerung. Die Steuerung konfiguriert automatisch alle Module in den beiden Kernen und durchquert das Netzwerk. Die DMA-Einheit verwaltet die komprimierten Gewichte und Feature Maps in jedem der 512 KB Scratchpad-RAMs der Kerne.

Die vorgestellte NPU integriert 1.024 MAC-Einheiten. Um Logik und Verdrahtungsengpässe zu minimieren, wird die in Schmetterlings-Struktur ausgeführte NPU in zwei Kerne mit unterschiedlichen Taktsignalen aufgeteilt, da die ersten MAC-Operationen innerhalb eines Kerns schnell berechnet werden und die letzten Aktivierungen langsam in Zusammenarbeit zwischen zwei Kernen durchgeführt werden. In einem Kern befinden sich zwei Data-Staging-Units (DSUs), die Pufferfunktionen für Feature-Maps übernehmen und Gewichte im Speicher von Dispatchern speichern sowie den Gewichts-Datenstrom dekomprimieren. Für CLs wird in einem Dispatcher ein Gewicht ungleich Null ausgewählt, und das entsprechende 2D-Array mit 16 Merkmalen wird über einen Feature-Map-Selektor ausgewählt. Für FCLs wird ein Merkmal durch den Selektor ausgewählt, und das entsprechende Array von 16 Gewichten wird vom Dispatcher ausgewählt. Die ausgewählten Gewichte und Merkmale von zwei DSUs werden auf Dual-8-bit-MAC-Arrays (MAAs) verteilt. In einem Dual-MAC mit zwei Multiplikatoren und einem Akkumulator werden die beiden Gewichte und zwei Merkmale multipliziert und ihre Ergebnisse akkumuliert. Jeder der Dual-MACs verfügt über Puffer mit 16 Teilsummen. Es gibt 16 MAAs für einen Kern und 1.024 MACs für zwei Kerne. Nach allen MAC-Operationen liefern MAAs die Teilsummen an eine Datenrückgabeeinheit (DRU), wobei die Teilsummen von 8 MAAs für nahe DRUs gelten und die anderen über asynchrone Brücken für ferne DRUs. Die Teilsummen von zwei MAAs werden einzeln addiert und von ReLU oder PReLU auf der DRU aktiviert. Die DRU schreibt das Array der Ausgabefunktionen zurück in den Scratchpad-Speicher.

Bild 3 zeigt, wie die NPU die dreifache Parallelität von CLs und FCLs nutzt. Für CLs umfasst die Parallelität A die Aufteilung der 3D-Eingangs-Feature-Maps in vier Teile entlang von Kanälen. Zwei Teile davon sind im 512KB Scratchpad gespeichert. Jede der DSUs in einem Kern holt sich einen Teil auf Streaming-Basis. Ein Gewichtskern wird ebenfalls entlang der Kanäle aufgeteilt. Die Gewichtskerne sind stationär, bis alle Ausgänge berechnet sind. Die NPU kann 16 Gewichtskerne parallel auf 16 MAAs nutzen, das ist Parallelität B. Darüber hinaus kann ein 4 x 4-Patch von Ausgabefeatures in einem MAA parallel durch Parallelität C berechnet werden. Diese Parallelitäten werden in ähnlicher Weise für FCLs angewendet. Eine Reihe von Eingabefunktionen ist, wie bei der Parallelität A, in vier Abschnitte unterteilt, während sie jeder der DSUs zugeordnet werden. Die Gewichtsmatrix ist ebenfalls in vier Matrizen unterteilt. Die NPU kann MAC-Operationen mit 256 Zeilen einer Matrix in einem Zyklus als Parallelität B durchführen, und 16 Ausgangsmerkmale in einem MAA werden parallel berechnet, wie in Parallelität C dargestellt. Die Anordnung der Merkmale ist stationär, bis alle Ausgänge berechnet sind, und die Gewichte werden gestreamt.

Die NPU verbessert die Faltungseffizienz durch das Überspringen von Gewichten, die Null sind, unter Verwendung einer Feature-Map-Auswahlschaltung, die in Bild 4 dargestellt ist. Wenn der Index eines Gewichts ungleich Null im Dispatcher gefunden wird, wird das entsprechende 2D-Array von Merkmalen durch In-Place-Auswahl und kreisförmige Drehung der Spalten- und Zeilenrichtungen ausgewählt. Die Geschwindigkeiten der Verbrauchsgewichte in den Dispatchern sind für jede DSU unterschiedlich, da die Verteilung der Gewichte ungleich Null nicht konstant zwischen den Teilen ist (z.B. Workload nicht ausbalanziert). Die Geschwindigkeitsdifferenz kann die Faltung aufgrund der erforderlichen Synchronisation des Ausgangsindex verlangsamen. Um dieses Problem zu beheben, verfügt der duale 8b MAC über einen Zusatz-Akkumulator. Wenn die beiden Multiplikationsergebnisse für den gleichen Ausgabeindex sind, werden sie zusammengerechnet. Wenn die Indizes unterschiedlich sind, werden die Multiplikationsergebnisse separat summiert. Dadurch entfällt die Lockstep-Anforderung zwischen Dispatchern mit unterschiedlichen Verteilungen von Nullgewichten.

Da neuronale Netze immer tiefer werden, muss die NPU die externe Speicherbandbreite und die Scratchpads gut ausnutzen. Ein Netzwerk-Compiler für die vorgeschlagenen NPU-Partitionen teilt Netzwerke in Subnetzwerke und entscheidet über die Traversierung über mehrere Netzwerkebenen, wie in Bild 5 dargestellt. So werden beispielsweise Feature-Maps in einem Subnetz aus drei Schichten vom Compiler bestimmt, und der Netzwerkcontroller konfiguriert die NPU-Kerne basierend auf der Traversal-Reihenfolge. Die Eingangs-Feature-Maps der Zwischenlagen werden aus den Ausgangs-Feature-Maps der vorherigen Lagen weitergeleitet, ohne dass zusätzliche externe Speicherzugriffe erfolgen.

Bild 6 zeigt die Messergebnisse für die NPU in einem Exynos-SoC, das in 8-nm-CMOS-Technologie hergerstellt wird. Die NPU belegt 5,5 mm2 und arbeitet mit einer Versorgungsspannung von 0,5 bis 0,8 V, die Taktfrequenz beträgt 67 bis 933 MHz. Die TOPs von Einzelschichten mit 5×5, 3×3 und 1×1 Kernen werden in Bezug auf den Anteil der Nullgewichte gemessen. Die NPU erreicht 6,9 TOPS und 3,5 TOPS mit 75% Nullgewichten für 5×5 bzw. 3×3 Kerne. Die Leistung für 1×1-Kerne ist jedoch aufgrund der Bandbreitenbegrenzung des Streamings bescheidener. Die Energieeffizienz, gemessen für die einzelnen Schichten, beträgt 11,5 und 8,4 TOPS/W für 5×5 bzw. 3×3 Kerne. Die ganzheitliche Energieeffizienz wird mit 3,4 TOPS/W gemessen, wenn Inception-v3 auf der NPU betrieben wird. Für 8-b-Gewichte erreicht die NPU einen 2,06× höheren Wirkungsgrad und eine 10× höhere Leistung im Vergleich zu anderen vergleichbaren NPUs. Die Chip-Mikroskopaufnahme der NPU ist in Bild 7 dargestellt.