Weißbuch

FPGA-Beschleunigung von Faltungsneuronalen Netzen

Übersicht

Convolutional Neural Networks (CNNs) haben sich bei komplexen Bilderkennungsproblemen als äußerst effektiv erwiesen. In diesem Whitepaper wird erörtert, wie diese Netzwerke mit FPGA-Beschleunigerprodukten von BittWare beschleunigt werden können, die mit dem Intel OpenCL Software Development Kit programmiert werden. Anschließend wird beschrieben, wie die Leistung der Bildkategorisierung durch eine Verringerung der Rechengenauigkeit erheblich verbessert werden kann. Jede Verringerung der Genauigkeit ermöglicht es dem FPGA-Beschleuniger, immer mehr Bilder pro Sekunde zu verarbeiten.

Caffe-Integration

Caffe ist ein Deep-Learning-Framework, bei dem Ausdruck, Geschwindigkeit und Modularität im Vordergrund stehen. Es wird vom Berkeley Vision and Learning Center und von Mitwirkenden der Community entwickelt.

Das Caffe-Framework verwendet eine XML-Schnittstelle, um die verschiedenen Verarbeitungsschichten zu beschreiben, die für ein bestimmtes CNN erforderlich sind. Durch die Implementierung verschiedener Kombinationen von Schichten kann ein Benutzer schnell eine neue Netzwerktopologie für seine gegebenen Anforderungen erstellen.

Die am häufigsten verwendeten dieser Schichten sind:

  • Faltung: Die Faltungsschicht faltet das Eingangsbild mit einer Reihe von lernfähigen Filtern, die jeweils eine Merkmalskarte im Ausgangsbild erzeugen.
  • Pooling: Beim Max-Pooling wird das Eingabebild in eine Reihe von sich nicht überlappenden Rechtecken unterteilt und für jeden dieser Teilbereiche der Maximalwert ausgegeben.
  • Rectified-Linear: Given an input value x, The ReLU layer computes the output as x if x > 0 and negative_slope * x if x <= 0.
  • InneresProdukt/Vollständig Verbunden: Das Bild wird als einzelner Vektor behandelt, wobei jeder Punkt zu jedem Punkt des neuen Ausgangsvektors beiträgt

Durch die Portierung dieser 4 Schichten auf den FPGA kann die überwiegende Mehrheit der Vorwärtsverarbeitungsnetzwerke auf dem FPGA unter Verwendung des Caffe-Frameworks implementiert werden.

Abbildung 1: Beispielhafte Darstellung eines typischen CNN - Convolutional Neural Network

AlexNet

AlexNet ist ein bekanntes und viel genutztes Netzwerk mit frei verfügbaren trainierten Datensätzen und Benchmarks. In diesem Papier wird eine FPGA-Implementierung für das AlexNet CNN erörtert, aber der hier verwendete Ansatz würde auch für andere Netzwerke gelten.

Abbildung 2 veranschaulicht die verschiedenen Netzwerkschichten, die das AlexNet CNN benötigt. Es gibt 5 Faltungsschichten und 3 vollständig verbundene Schichten. Diese Schichten beanspruchen > 99 % der Verarbeitungszeit für dieses Netz. Es gibt 3 verschiedene Filtergrößen für die verschiedenen Faltungsschichten: 11×11, 5×5 und 3×3. Es wäre ineffizient, verschiedene Schichten zu erstellen, die für die verschiedenen Faltungsschichten optimiert sind. Der Grund dafür ist, dass die Rechenzeit jeder Schicht von der Anzahl der angewandten Filter und der Größe der Eingabebilder abhängt, was auf die Anzahl der verarbeiteten Eingabe- und Ausgabemerkmale zurückzuführen ist. Jede Faltung erfordert jedoch eine andere Anzahl von Schichten und eine andere Anzahl von zu verarbeitenden Pixeln. Indem man die Ressourcen für rechenintensivere Schichten erhöht, kann man jede Schicht so ausbalancieren, dass sie in der gleichen Zeit fertig wird. Daher ist es möglich, einen Pipeline-Prozess zu erstellen, bei dem mehrere Bilder gleichzeitig verarbeitet werden können und die Effizienz der verwendeten Logik maximiert wird. Das heißt, dass die meisten Verarbeitungselemente die meiste Zeit beschäftigt sind.

Abbildung 2: AlexNet CNN - Faltungsneuronales Netz

Tabelle 1 zeigt die für jede Schicht des Imagenet-Netzes erforderliche Rechenleistung. Aus dieser Tabelle ist ersichtlich, dass die 5×5-Faltungsschicht mehr Rechenleistung erfordert als die anderen Schichten. Daher wird mehr Verarbeitungslogik für den FPGA benötigt, damit diese Schicht mit den anderen Schichten ausgeglichen werden kann.

Die inneren Produktschichten haben eine n-zu-n-Zuordnung, die für jede Multiplikation und Addition einen eigenen Koeffizienten erfordert. Innere Produktschichten benötigen in der Regel deutlich weniger Rechenleistung als Faltungsschichten und erfordern daher eine geringere Parallelisierung der Logik. In diesem Szenario ist es sinnvoll, die Innenproduktschichten auf die Host-CPU zu verlagern, so dass sich der FPGA auf die Faltungen konzentrieren kann.

FPGA-Logikbereiche

FPGA-Bausteine haben zwei Verarbeitungsbereiche : DSP- und ALU-Logik. Die DSP-Logik ist eine spezielle Logik für Multiplikations- oder Multiplikations-Additions-Operatoren. Dies liegt daran, dass die Verwendung von ALU-Logik für große Gleitkommamultiplikationen (18×18 Bits) kostspielig ist. In Anbetracht der Häufigkeit von Multiplikationen in DSP-Operationen haben FPGA-Anbieter spezielle Logik für diesen Zweck bereitgestellt. Intel ist noch einen Schritt weiter gegangen und ermöglicht es, die DSP-Logik für die Durchführung von Fließkommaoperationen zu rekonfigurieren. Um die Leistung für die CNN-Verarbeitung zu steigern, muss die Anzahl der Multiplikationen, die im FPGA implementiert werden, erhöht werden. Ein Ansatz besteht darin, die Bitgenauigkeit zu verringern.

 Leere Überschrift

Tabelle 1: Anforderungen an die Berechnung der ImageNet-Ebene

Bit-Genauigkeit

Die meisten CNN-Implementierungen verwenden Fließkomma-Präzision für die Berechnungen auf den verschiedenen Ebenen. Bei einer CPU- oder GPGPU-Implementierung stellt dies kein Problem dar, da die Fließkomma-IP ein fester Bestandteil der Chip-Architektur ist. Bei FPGAs sind die Logikelemente nicht fixiert. Die Arria 10- und Stratix 10-Bausteine von Intel haben eingebettete Fließkomma-DSP-Blöcke, die auch als Festkomma-Multiplikationen verwendet werden können. Jede DSP-Komponente kann tatsächlich als zwei getrennte 18×19-Bit-Multiplikationen verwendet werden. Durch die Durchführung der Faltung mit 18-Bit-Fixpunktlogik verdoppelt sich die Anzahl der verfügbaren Operatoren im Vergleich zur Fließkommazahl mit einfacher Genauigkeit.

Abbildung 3: Arria 10 Gleitkomma-DSP-Konfiguration

Wenn eine Gleitkommaverarbeitung mit geringerer Genauigkeit erforderlich ist, kann die halbe Genauigkeit verwendet werden. Dies erfordert zusätzliche Logik im FPGA, verdoppelt aber die Anzahl der möglichen Gleitkommaberechnungen, vorausgesetzt, die niedrigere Bitgenauigkeit ist immer noch ausreichend.

Einer der Hauptvorteile des in diesem Whitepaper beschriebenen Pipeline-Konzepts ist die Möglichkeit, die Genauigkeit in verschiedenen Phasen der Pipeline zu variieren. Daher werden die Ressourcen nur dort eingesetzt, wo sie benötigt werden, was die Effizienz des Entwurfs erhöht.

Je nach der Anwendungstoleranz der CNNs kann die Bitgenauigkeit noch weiter reduziert werden. Wenn die Bitbreite der Multiplikationen auf 10 Bit oder weniger reduziert werden kann (20-Bit-Ausgang), kann die Multiplikation effizient nur mit der FPGA ALU-Logik durchgeführt werden. Dadurch verdoppelt sich die Zahl der möglichen Multiplikationen im Vergleich zur Verwendung der FPGA-DSP-Logik. Einige Netzwerke können sogar eine geringere Bitpräzision tolerieren. Der FPGA kann bei Bedarf alle Genauigkeiten bis hinunter zu einem einzigen Bit verarbeiten.

Für die von AlexNet verwendeten CNN-Schichten wurde festgestellt, dass 10-Bit-Koeffizientendaten die geringste Reduktion darstellen, die für eine einfache Festkomma-Implementierung erreicht werden kann, wobei weniger als 1 % Fehler im Vergleich zu einer Gleitkommaoperation mit einfacher Genauigkeit beibehalten wird.

Arria 10 fixed point DSP configuration block diagram

Abbildung 4: Arria 10 Festkomma-DSP-Konfiguration

CNN-Faltungsschichten

Mit Hilfe der Sliding-Window-Technik ist es möglich, Faltungskerne zu erstellen, die extrem wenig Speicherplatz beanspruchen.

Abbildung 5 veranschaulicht, wie die Daten im FPGA-Speicher zwischengespeichert werden, so dass jedes Pixel mehrfach wiederverwendet werden kann. Die Menge der wiederverwendeten Daten ist proportional zur Größe des Fusionskerns.

Da jede Eingabeschicht alle Ausgabeschichten in einer CNN-Faltungsschicht beeinflusst, ist es möglich, mehrere Eingabeschichten gleichzeitig zu verarbeiten. Dies würde die für das Laden der Schichten erforderliche externe Speicherbandbreite erhöhen. Um diesen Anstieg abzumildern, werden alle Daten, mit Ausnahme der Koeffizienten, im lokalen M20K-Speicher des FPGA-Bausteins gespeichert. Die Anzahl der CNN-Schichten, die implementiert werden können, ist durch die Größe des Chipspeichers auf dem Baustein begrenzt.

illustration of sliding window for 3×3 convolution

Abbildung 5: Schiebefenster für 3×3-Faltung

Abbildung 6: Globale OpenCL-Speicherbandbreite (AlexNet)

Je nach der Menge der verfügbaren M20K-Ressourcen ist es nicht immer möglich, ein komplettes Netzwerk auf einem einzigen FPGA unterzubringen. In dieser Situation können mehrere FPGAs über serielle Hochgeschwindigkeitsverbindungen in Reihe geschaltet werden. Auf diese Weise kann die Netzwerkpipeline erweitert werden, bis genügend Ressourcen verfügbar sind. Ein wesentlicher Vorteil dieses Ansatzes besteht darin, dass er zur Leistungsmaximierung nicht auf Stapelverarbeitung angewiesen ist, so dass die Latenzzeit sehr niedrig ist, was für latenzkritische Anwendungen wichtig ist.

Um die Zeit, die zwischen den Schichten benötigt wird, auszugleichen, muss die Anzahl der parallel implementierten Eingabeschichten und die Anzahl der parallel verarbeiteten Pixel angepasst werden.

Abbildung 9: Ressourcen für die 5×5-Faltungsschicht von Alexnet

Die meisten CNN-Funktionen passen in einen einzigen M20K-Speicher, und mit Tausenden von M20Ks, die in die FPGA-Fabric eingebettet sind, liegt die gesamte Speicherbandbreite, die für parallele Faltungsfunktionen zur Verfügung steht, in der Größenordnung von 10 Terabyte/Sekunde.

Abbildung 7: Arria 10 GX1150 / Stratix 10 GX2800 Ressourcen

Abbildung 8: Erweitern eines CNN-Netzwerks über mehrere FPGAs

In Abbildung 9 sind die Ressourcen aufgeführt, die für die 5×5-Faltungsschicht von Alexnet mit 48 parallelen Kernen erforderlich sind, und zwar sowohl für eine Version mit einfacher Genauigkeit als auch für eine 16-Bit-Festkommaversion auf einem Intel Arria10 FPGA. Die Zahlen schließen die OpenCL-Boardlogik ein, verdeutlichen aber die Vorteile, die eine geringere Genauigkeit für die Ressourcen hat.

Vollständig verknüpfte Schicht

Die Verarbeitung einer vollständig verknüpften Schicht erfordert einen eindeutigen Koeffizienten für jedes Element und wird daher mit zunehmender Parallelität schnell speichergebunden. Die Menge an Parallelität, die erforderlich ist, um mit Faltungsschichten Schritt zu halten, würde den Off-Chip-Speicher des FPGAs schnell sättigen, daher wird vorgeschlagen, dass seine Stufe der Eingabeschichten entweder gebündelt oder beschnitten wird.

Da die Anzahl der Elemente für eine innere Produktschicht gering ist, ist der für die Stapelverarbeitung erforderliche Speicherplatz im Vergleich zu dem für die Faltungsschichten erforderlichen Speicherplatz gering. Durch das Stapeln von Schichten kann derselbe Koeffizient für jede gestapelte Schicht verwendet werden, wodurch die externe Speicherbandbreite verringert wird.

Beim Pruning werden die Eingabedaten untersucht und Werte unterhalb eines Schwellenwerts ignoriert. Da die vollverknüpften Schichten in den späteren Phasen eines CNN-Netzes platziert werden, sind viele mögliche Merkmale bereits eliminiert worden. Daher kann das Pruning den Arbeitsaufwand erheblich reduzieren.

Ressource

Der wichtigste Ressourcenfaktor des Netzes ist die Menge an M20K-Speicher auf dem Chip, die für die Speicherung der Ausgaben jeder Schicht zur Verfügung steht. Dieser ist konstant und unabhängig von der erreichten Parallelität. Die Erweiterung des Netzwerks über mehrere FPGAs erhöht die Gesamtmenge an verfügbarem M20K-Speicher und damit die Tiefe des CNN, die verarbeitet werden kann.

Leere Überschrift

Schlussfolgerung

Dank der einzigartigen Flexibilität der FPGA-Struktur kann die logische Präzision auf das für ein bestimmtes Netzwerkdesign erforderliche Minimum eingestellt werden. Durch die Begrenzung der Bitpräzision der CNN-Berechnung kann die Anzahl der Bilder, die pro Sekunde verarbeitet werden können, deutlich erhöht werden, was die Leistung verbessert und den Stromverbrauch reduziert.

Der Non-Batching-Ansatz der FPGA-Implementierung ermöglicht eine Einzelbildlatenz für die Objekterkennung, ideal für Situationen, in denen eine geringe Latenz entscheidend ist. Z.B. Objektvermeidung.

Mit diesem Ansatz für AlexNet (einfache Präzision für Schicht 1, dann 16 Bit fest für die restlichen Schichten) kann jedes Bild in ~1,2 Millisekunden mit einem einzelnen Arria 10 FPGA oder 0,58 Millisekunden mit zwei FPGAs in Reihe verarbeitet werden.