Weißbuch

FPGA-Beschleunigung von binär gewichteten neuronalen Netzen

Eines der Merkmale von YOLOv3 ist die Erkennung mehrerer Objekte in einem einzigen Bild. Wir haben dieses Netzwerk verwendet, weil es einen komplexeren, anspruchsvolleren Ansatz darstellt, der die Fähigkeit zur Anpassung an eine begrenzte Randumgebung herausfordert.

Die Nachfrage nach FPGAs steigt sowohl im Rechenzentrum als auch in Edge-Umgebungen rapide an. Dies ist auf Fortschritte bei der Leistung, die Verwendung von einfacheren FPGA-Entwicklungstools und den wachsenden Bedarf an Flexibilität bei der Anpassung der Hardwarebeschleunigung an eine bestimmte Anwendung zurückzuführen. FPGA-Beschleunigerlösungen, die häufig neben CPUs eingesetzt werden, sind Teil eines heterogenen Computing-Ansatzes, der sich auf eine flexible, an die Anforderungen des Endbenutzers angepasste Anwendungsleistung konzentriert.

In diesem Whitepaper erläutern wir eine solche Anwendung: Verkehrsüberwachung unter Verwendung eines aktuellen, auf maschinellem Lernen basierenden Bilderkennungssystems(YOLOv3), das mit OpenCL an das BittWare 520N Accelerator Board mit einem Intel Stratix 10 FPGA angepasst wurde. Die drei Aspekte, die als wichtige FPGA-Treiber genannt wurden, werden untersucht: Leistung im Vergleich zur CPU, einfache Entwicklung unter Verwendung von OpenCL anstelle von HDL und die Flexibilität der Anpassung der Anwendung (in dieser variablen Berechnungspräzision einschließlich Ein-Bit-Binärgewichten), um die minimale Leistung/Ressourcen zu nutzen.

Wachsende Nachfrage nach maschinellem Lernen

Bis vor einem Jahrzehnt war Künstliche Intelligenz fast ausschließlich ein Thema für Akademiker, Forschungsinstitute und Science-Fiction. Die relativ neue Erkenntnis, dass Techniken des maschinellen Lernens (ML) praktisch und wirtschaftlich in großem Umfang zur Lösung realer Anwendungsprobleme eingesetzt werden können, hat zu einem lebendigen Ökosystem von Marktteilnehmern geführt.

Bei allen Nachrichten über Durchbrüche beim maschinellen Lernen muss jedoch berücksichtigt werden, dass es sich hierbei um einen sehr rechenintensiven Ansatz zur Problemlösung handelt, und zwar sowohl in der Trainingsphase eines Datensatzes als auch in der so genannten Inferenzphase - der "Laufzeit", in der unbekannte Eingaben in abgeleitete Ausgaben umgesetzt werden. Während die Trainingsphase für eine Anwendung des maschinellen Lernens nur einmal im Rechenzentrum über einen unbeschränkten Zeitraum, der sich oft über Stunden oder Tage erstreckt, stattfinden muss, muss die Live-Inferenz oft in einem Bruchteil einer Sekunde auf einer beschränkten Hardwareplattform am Rande eines Systems erfolgen.

PDF-Version dieses Whitepapers

Damit sich das maschinelle Lernen immer mehr durchsetzt, müssen Inferenzlösungen entwickelt werden, die die neuesten Bibliotheken für maschinelles Lernen schnell in Hardware implementieren können, die auf die Bedürfnisse der Anwendung zugeschnitten werden kann.

Flexible FPGAs

Ein Ansatz zur Verringerung der Siliziumzahl (und damit des Stromverbrauchs), die für maschinelles Lernen erforderlich ist, ist die Reduzierung des dynamischen Bereichs der Berechnungen. Die Reduzierung von 32-Bit- auf 16-Bit-Gleitkomma-Arithmetik beispielsweise verringert die Leistung der Anwendung in Bezug auf die Erkennungsgenauigkeit nur geringfügig, kann aber die Hardwareanforderungen erheblich reduzieren.

Was wäre, wenn wir noch weiter gehen würden? Hier können FPGAs glänzen, denn wenn die Anzahl der benötigten Bits reduziert wird, sogar bis auf ein einziges binäres Bit, passt sich die Hardware-Struktur an, um nur das zu verwenden, was benötigt wird. Wir können innerhalb eines Projekts auch variable Präzision verwenden, einschließlich der Verwendung der gehärteten Gleitkomma-DSP-Logikblöcke auf dem Stratix 10 FPGA, wenn dies erforderlich ist. Mit FPGAs stehen dem Entwickler eine Reihe von Tools zur Verfügung, mit denen er die Hardware optimal an die Anforderungen der Anwendung anpassen kann.

Unsere Forschung konzentriert sich auf die Durchführung von maschinellem Lernen mit ausschließlich binären Gewichten: Die Gewichte werden mit nur zwei Werten binarisiert: +1 und -1. Während viele bildbasierte Anwendungen des maschinellen Lernens eine Reihe von Faltungsoperationen verwenden, die zusammen als Faltungsneuronale Netze (CNN) bezeichnet werden, ist diese neue CNN-Variante spezifischer als Binär gewichtetes Neuronales Netz (BWNN) bekannt. Es reduziert alle Festkomma-Multiplikationsoperationen in den Faltungsschichten und vollständig verbundenen Schichten auf Ganzzahladditionen.

Über den Autor

Richard Chamberlain ist Systemarchitekt bei BittWare. Richard kümmert sich um OpenCL-Entwicklungsprojekte und verfügt über umfangreiche Erfahrung in der High-Level-Programmierung von FPGAs. Er berät regelmäßig Kunden über die beste Hardware und den besten Entwicklungsansatz für neue Designs oder die Anpassung von Designs, die auf anderen Systemtypen wie CPUs oder GPUs basieren.

Leere Überschrift

Eine weitere Schlüsselkomponente in dieser Forschung war die Verwendung der OpenCL-Unterstützung des 520N, um den Hardware-Entwicklungsprozess zu einem softwareähnlichen Toolflow zu abstrahieren. Dadurch können die neuesten Anwendungsbibliotheken als Grundlage für die Hardwarebeschleunigung verwendet werden, was die Monate oder länger dauern würde, um ein bestimmtes Gerät und eine ML-Bibliothek mit herkömmlichen HDL-Methoden zu entwickeln (während derer neuere, leistungsfähigere ML-Bibliotheken veröffentlicht werden könnten). Dieses White Paper stammt zum Beispiel aus unserer Arbeit für das OPERA-Projekt auf einem BittWare Arria 10-basierten Board, dem 385A-SoC. Unser Entwicklungsteam hat den OpenCL-Code schnell von diesem Gerät auf die viel größere und schnellere Struktur von Stratix 10 übertragen.

Die variable Genauigkeit, die Verwendung von DSPs für Gleitkommaberechnungen und die Entwicklung unter Verwendung von OpenCL sorgen für eine anwendungsspezifische Hardwarelösung mit einer softwareähnlichen Entwicklungsgeschwindigkeit.

Binäre neuronale Netze

Die Verarbeitung von Faltungen in CNN-Netzen erfordert die Speicherung und Verarbeitung vieler Millionen von Koeffizienten. Traditionell wird jeder dieser Koeffizienten in voller einfacher Genauigkeit gespeichert. Forscher haben gezeigt, dass die Koeffizienten auf halbe Genauigkeit reduziert werden können, ohne dass sich die Gesamtgenauigkeit wesentlich ändert, während gleichzeitig der Speicherbedarf und die Anforderungen an die Speicherbandbreite verringert werden. Die meisten der heute verfügbaren CNN-Modelle verwenden eine teilweise reduzierte Genauigkeit.

Durch einen anderen Ansatz für das Training dieser Koeffizienten kann die Bitgenauigkeit jedoch auf ein einziges Bit plus einen Skalierungsfaktor(ref) reduziert werden. Während des Trainings werden Fließkomma-Koeffizienten in binarisierte Werte umgewandelt, die angeben, ob ein Wert entweder größer oder kleiner als der Mittelwert aller Eingabekoeffizienten ist. Dies kann in binärer Notation entweder als 1 oder 0 dargestellt werden (Abbildung 1). Die Ausgabe der Faltung wird dann mit dem Mittelwert multipliziert.

Abbildung 1: Umwandlung der Gewichte in binäre Werte (Mittelwert = 0,12)

FPGA-Optimierungen

Erstens reduziert die Binarisierung der Gewichte die externe Speicherbandbreite und die Speicheranforderungen um den Faktor 32. Die FPGA-Struktur kann diese Binarisierung nutzen, da jeder interne Speicherblock so konfiguriert werden kann, dass er eine Portbreite von 1 bis 32 Bit hat. Dadurch wird die interne FPGA-Ressource für die Speicherung von Gewichten erheblich reduziert und mehr Platz für die Parallelisierung von Aufgaben geschaffen.

Durch die Binarisierung des Netzes können die CNN-Faltungen auch als eine Reihe von Additionen oder Subtraktionen von Eingangsaktivierungen dargestellt werden. Ist die Gewichtung binär 0, wird die Eingabe vom Ergebnis subtrahiert; ist die Gewichtung binär 1, wird sie zum Ergebnis addiert. Jedes Logikelement in einem FPGA verfügt über eine zusätzliche Übertragskettenlogik, mit der ganzzahlige Additionen praktisch jeder Bitlänge effizient durchgeführt werden können. Durch die effiziente Nutzung dieser Komponenten kann ein einzelnes FPGA Zehntausende von parallelen Additionen durchführen. Zu diesem Zweck müssen die Fließkomma-Eingangsaktivierungen in feste Präzision umgewandelt werden. Dank der Flexibilität der FPGA-Fabric können wir die Anzahl der von den festen Additionen verwendeten Bits auf die Anforderungen des CNN abstimmen. Die Analyse des dynamischen Bereichs der Aktivierungen in verschiedenen CNNs zeigt, dass nur eine Handvoll Bits, typischerweise 8, erforderlich sind, um eine Genauigkeit innerhalb von 1% eines Fließkomma-äquivalenten Designs zu erreichen. Die Anzahl der Bits kann für eine höhere Genauigkeit erhöht werden.

Es gibt viele verschiedene Netzwerke, die für BNN-Anwendungen untersucht werden könnten, und es ist verlockend, eines der vielen einfacheren Netzwerke wie AlexNet zu wählen. Um jedoch die Effektivität von FPGAs für die BWNN-Verarbeitung wirklich zu verstehen, ist es besser, ein modernes Netz wie YOLOv3 zu verwenden. Dies ist ein großes Faltungsnetzwerk mit vielen Faltungsschichten.

YOLOv3 ist ein tiefes Netz, und die durch die Festkommarundung verursachten Fehler erfordern mehr Bits pro Addition als kleinere Netze wie AlexNet. Der Vorteil der FPGA-Technologie ist die Möglichkeit, die genaue Anzahl der benötigten Bits zu ändern. Für unseren Entwurf haben wir 16 Bits verwendet, um die zwischen den Schichten übertragenen Daten darzustellen.

Durch die Konvertierung in Festkomma für die Faltung und die Beseitigung der Notwendigkeit von Multiplikationen durch Binarisierung werden die im FPGA erforderlichen logischen Ressourcen drastisch reduziert. Im Vergleich zu einer Implementierung mit einfacher oder halber Genauigkeit ist es dann möglich, auf demselben FPGA deutlich mehr Verarbeitungen durchzuführen oder FPGA-Logik für andere Verarbeitungen freizugeben.

Gezielte Netzwerkschulung

Das YOLOv3-Netzwerk ist ein großes Faltungsnetzwerk mit 106 Schichten, das nicht nur Objekte identifiziert, sondern auch Begrenzungsrahmen um diese Objekte herum platziert. Es ist besonders nützlich für Anwendungen, bei denen Objekte nachverfolgt werden müssen.

Binär gewichtete Netze verringern die Genauigkeit des YOLOv3-Netzes nur geringfügig, wenn sie entsprechend trainiert werden. Die folgende Tabelle veranschaulicht die Ergebnisse, die für das neu trainierte YOLOv3-Netz erzielt wurden.

Das durchschnittliche Vertrauen in dieses Bild lag bei Fahrrädern bei 76 % und bei Personen bei 82 %. Vergleichen Sie dies mit der Fließkommazahl für dasselbe Bild, die eine durchschnittliche Genauigkeit von 92 % bei Fahrrädern (16 % besser) und 88 % bei Personen (6 % besser) erreichen würde.

 

Um die beste Leistung für den FPGA zu erzielen, ist es hilfreich, Netzwerkmerkmale zu wählen, die sich am besten auf den FPGA übertragen lassen. In diesem Fall wurde das Netz nicht nur für binäre Gewichte trainiert, sondern es wurden auch geeignete Aktivierungsarten gewählt, die sich effizient auf die FPGA-Logik übertragen lassen.

 

Leere Überschrift

Entwerfen für Stratix 10

OpenCL ist eine beliebte Sprache, um Parallelität in CPUs, GPGPUs und FPGAs auszudrücken. Hier wurde der Intel FPGA OpenCL Compiler verwendet, um Beschleuniger zu programmieren, die auf den Intel Stratix 10 Baustein abzielen. Der Ziel-FPGA-Beschleuniger für dieses Whitepaper war das BittWare 520N Board.

Die Leistung von FPGA-Designs hängt von vielen Faktoren ab, unter anderem von folgenden:

  • Geschwindigkeitsstufe des Geräts
  • Tiefe der kombinatorischen Logik in einem Entwurf
  • Auffächerung eines Musters (die Anzahl der Signale, die zwischen mehreren Punkten geteilt werden)
  • Überlastung des Routings durch Überbelegung des Geräts
  • Globale Speicherbandbreite

Stratix 10-Geräte sind sehr groß und anfälliger für diese Probleme als frühere Geräte. In den folgenden Abschnitten werden einige dieser Probleme ausführlicher behandelt.

Abbildung 2: BittWare 520N FPGA-Beschleunigerkarte

Kombinatorische Logik-Tiefe: Die Intel OpenCL-Tools führen Pipeline-Entwürfe nach Möglichkeit automatisch durch und fügen die erforderliche Registrierung ein, um die bestmögliche Leistung auf einer Stratix 10 zu erzielen. Die Registrierung ist jedoch nicht immer möglich, wenn Rückkopplungen im Design vorhanden sind. Dies ist typischerweise bei der Erstellung komplexer Indizierungsanforderungen der Fall, die sich selbst bedingen. Daher muss der Code nach Möglichkeit so strukturiert werden, dass solche Pipeline-Abhängigkeiten vermieden werden; andernfalls wird die Taktfrequenz des Entwurfs durch diese Pfade dominiert.

Fanout: Fanout bezieht sich auf Signale, die eine einzige Quelle, aber mehrere Endpunkte haben. Dies kann zu Problemen für Routing-Tools führen, da nur eine begrenzte Anzahl von Netzen auf einem Gerät zur Verfügung steht. Die Überlastung dieser Routen führt dazu, dass einige Signale um die Überlastungspunkte herum geleitet werden müssen, was zu längeren Pfaden und letztendlich zu niedrigeren Taktfrequenzen führt. Fanout kann reduziert werden, indem man sich zum Zeitpunkt der Codierung der Auswirkungen der gemeinsamen Nutzung von Variablen durch mehrere Teile des Entwurfs bewusst ist.

Überbevölkerung: Es besteht die Versuchung, so viel Logik wie möglich in ein Design zu packen; es gibt jedoch einen Punkt, an dem die Taktfrequenz des Designs zu sinken beginnt, wenn der Baustein stark bevölkert wird. Dies wird durch Routing-Staus aufgrund der großen Anzahl von Signalen verursacht, die versuchen, einen Weg um das FPGA herum zu finden. Damit große Designs hohe Taktfrequenzen erreichen, müssen sie stark pipelined sein und hohe Fanouts vermeiden.

Speicherbandbreite: Es ist nicht immer möglich, genügend Daten im lokalen FPGA-Speicher zu speichern, und die Daten müssen aus einem tiefen externen Speicher geschrieben oder gelesen werden. Der 520N verfügt über 4 DDR4-Speicherbänke, was eine Gesamt-Speicherbandbreite von ~98 GByte/Sek. ergibt. Angesichts der Größe des S10-Bausteins reicht diese Bandbreite nicht aus, um alle Schichten des neuronalen Netzes mit Daten zu versorgen; daher müssen die Eingabedaten nach Möglichkeit wiederverwendet werden. Glücklicherweise erlauben CNN-Codes eine weitgehende Wiederverwendung von Daten. Dieses Problem kann durch die Verwendung von HBM2-Versionen des Stratix 10, wie sie auf der 520N-MX-Karte von BittWare verwendet werden, etwas gemildert werden.

Letztlich sind die meisten Entwürfe ein Kompromiss aus den oben genannten Punkten, und der hier beschriebene BNN-Entwurf bildet da keine Ausnahme.

Abbildung 3 veranschaulicht das wichtigste Verarbeitungselement des Entwurfs, den Faltungspfad. Die Daten wurden, soweit möglich, in 3 Akkumulationspfaden zusammengefasst. Jeder Faltungsblock führt einen 32×32 binär gewichteten Faltungsblock aus, wobei jeder der 32 Eingänge von allen 32 Ausgängen gemeinsam genutzt wird. Dies führt natürlich zu einem hohen Fanout, verringert aber den Druck auf die externe Speicherbandbreite. Durch die Unterteilung einer 96×96-Faltung in mehrere 32×32-Blöcke wird das Fanout-Routing auf die einzelnen Blöcke beschränkt, wodurch das Gesamtfanout des Entwurfs verringert wird. Die Eingangsdaten werden über OpenCL-Pipes an jeden Faltungsblock weitergeleitet, so dass der Compiler bei Bedarf zusätzliche Register einfügen kann.

Die in Abbildung 3 dargestellten Kernel "Producer", "Consume" und "Coefficient" leiten Daten aus dem globalen Speicher an die verschiedenen Faltungsblöcke weiter. Der Consumer-Block führt außerdem eine Gleitkomma-Aktivierungsfunktion für die Ausgabe aus.

In Tabelle 1 sind die Ressourcen aufgeführt, die zur Durchführung von 1024 16-Bit-Akkumulationen erforderlich sind, die jede 32×32-Faltung darstellen.

Abbildung 3: Beispiel einer Faltungspipeline

Der für die Speicherung aller Eingabe- und Ausgabedaten erforderliche Speicherplatz übersteigt den auf dem FPGA-Baustein verfügbaren Speicherplatz, selbst wenn 16-Bit-Daten verwendet werden. Daher müssen die Daten stapelweise aus dem angeschlossenen globalen Speicher in den lokalen FPGA-Speicher kopiert werden, was schließlich die Leistung beeinträchtigt, sobald die Anzahl der parallelen Faltungen über das hinausgeht, was der globale Speicher unterstützen kann.

 
ALMsRegisterOps
35305 (2%)41601 (2%)2048

 

Tabelle 1: Stratix 10-Ressourcen für 32×32-Faltungsmatrix

ogisch (ALMs)MHzSpitzenwert TOpsGeschwindigkeitssteigerung gegenüber
OpenMP 32 Threads
(Xeon CPU D-1587 1,7 GHz)
536,122 (57%)3005.550x
Tabelle 2: Stratix 10 G280 3×3 Design Leistung

Der für die Speicherung aller Eingabe- und Ausgabedaten erforderliche Speicherplatz übersteigt den auf dem FPGA-Baustein verfügbaren Speicherplatz, selbst wenn 16-Bit-Daten verwendet werden. Daher müssen die Daten stapelweise aus dem angeschlossenen globalen Speicher in den lokalen FPGA-Speicher kopiert werden, was schließlich die Leistung beeinträchtigt, sobald die Anzahl der parallelen Faltungen über das hinausgeht, was der globale Speicher unterstützen kann.

Tabelle 2 enthält einige Statistiken für das endgültige kompilierte Design. Beachten Sie, dass die Logik auch die Board-Support-Package-Ressourcen enthält, die für die Host-Kommunikation über PCIe- und globale Speicherschnittstellen erforderlich sind.

Die nächsten Abbildungen zeigen einen Vergleich der Leistung in Bezug auf Geschwindigkeit und Leistung pro verbrauchter Energie im Vergleich zu Arria 10 und einer Xeon-CPU. Beachten Sie, dass bei Stratix 10 noch mehr Kerne für weitere Geschwindigkeitsverbesserungen genutzt werden könnten.

Abbildung 4: Beschleunigung gegenüber CPU
Abbildung 5: Anzahl der Bilder pro Joule Energie

HBM2 auf Stratix 10 MX

Das neue BittWare 520N-MX Board enthält einen Intel Stratix 10 MX Baustein. Dieser FPGA verfügt über 3D-Stacked High-Bandwidth Memory 2 (HBM2) mit 32 Benutzeranschlüssen, die eine kombinierte Speicherbandbreite von bis zu 512 GB/s bieten. Diese zusätzliche Bandbreite ermöglicht verschiedene Architekturen, die dazu beitragen können, hohe Fanouts in Designs zu reduzieren und den Bedarf an interner Pufferung für externen Speicher zu verringern. MX-Bausteine sollten mehr Benutzerlogik für die Verarbeitung freisetzen, indem sie das Speicherarbitrierungsnetzwerk vereinfachen, das für speicherintensive Algorithmen komplex werden kann, und neue bandbreitenbeschränkte Lösungen für CNN ermöglichen, die zuvor nicht möglich waren.

Schlussfolgerung

Die Flexibilität von FPGAs bietet Möglichkeiten für CNN-Optimierungen für jedes einzelne Netzwerk, die auf anderen Technologien nur schwer oder gar nicht zu erreichen sind. In dem Maße, in dem die Industrie die Vorteile neuronaler Netze erkennt und die Zahl der Inferenzanwendungen zunimmt, steigt auch der Bedarf an Netzwerken, die auf unterschiedliche Datensätze, Genauigkeit und Leistung zugeschnitten sind.

Die vollständige Realisierung des breiten Spektrums zukünftiger Anwendungen wird unweigerlich Topologien erfordern, die von generischen APIs nicht vollständig erfüllt werden können, insbesondere für das Computing am Rande. BittWare's breite Palette an FPGA-Lösungen, kombiniert mit CNN-FPGA-Optimierungsexpertise, ist einzigartig positioniert, um der Industrie zu helfen, das Potenzial von FPGAs für CNN zu realisieren.