Künstliche Intelligenz Xilinx Versal: AI-Engine unter der Lupe

Die KI-Engine von Xilinx' neuer SoC-Plattform Versal bildet zusammen mit Adaptable-Engines (programmierbare Logik) und Skalar-Engines (Prozessor-Subsystem) eine eng integrierte Rechenplattform. Die KI-Engines bieten eine bis zu 5x höhere Rechenleistung/Fläche für vektorbasierte Algorithmen.

Die Architektur der neuen Versal-SoCs von Xilinx wurde bereits in [1] beschreiben. Dieser Artikel fokussiert sich ausschließlich auf die neue, proprietäre KI-Engine. Jede Kachel der KI-Engine enthält Vektorprozessoren für Fest- und Gleitkommaoperationen, einen skalaren Prozessor, einen dedizierten Programm- und Datenspeicher, dedizierte AXI-Datenbewegungskanäle und Unterstützung für DMA. KI-Engines verarbeiten eine einzelne Anweisung mit mehreren Daten (SIMD) und Vektoroperationen (VLIW), was pro Taktzyklus bis zu einer 6-Wege-Parallelität führt (Bild 1), einschließlich zwei/drei skalarer Operationen, zwei Vektor-Leseoperationen, einer Schreiboperation sowie einer Fest- oder Gleitkomma-Vektoroperation (z. B. Multiplikation).

Optimiert für die Echtzeit-DSP- und KI/ML-Berechnung bietet das KI-Engine-Array (Bild 2) deterministisches Timing durch eine Kombination aus dedizierten Daten- und Befehlsspeichern, DMA und Software-Tools. Spezielle Daten- und Befehlsspeicher sind statisch und eliminieren die Inkonsistenzen, die durch Cache-Misses und die damit verbundenen Folgen entstehen können.

Ziele und Vorgaben der KI-Engine

Die Ziele der KI-Engine wurden aus rechenintensiven Anwendungen mit DSP und KI/ML abgeleitet. Weitere Marktanforderungen sind eine höhere Entwicklerproduktivität und höhere Abstraktionsebenen, die die Entwicklung von Entwicklungswerkzeugen vorantreiben. Die KI-Engine wurde entwickelt, um vier wesentliche Vorteile zu bieten:

  • Bereitstellung von drei- bis achtmal mehr Rechenleistung pro Siliziumfläche im Vergleich zur PL-Implementierung rechenintensiver Anwendungen,
  • Reduzierung der Stromaufnahme um 50 % gegenüber den gleichen Funktionen, die in programmierbarer Logik implementiert sind,
  • deterministische, leistungsstarke Echtzeit-DSP-Funktionen und
  • deutliche Steigerung der Entwicklerproduktivität.
  • Details zur KI-Engine-Kachel-Architektur

    Um wirklich ein Gefühl für die enormen Fähigkeiten der KI-Engine zu bekommen, ist es wichtig, ein allgemeines Verständnis der Architektur und der Fähigkeiten zu erlangen. Die in Bild 3 dargestellte Kachel der KI-Engine bietet eine detaillierte Beschreibung der Ressourcen in jeder Kachel:

  • Dedizierter 16 KB Befehlsspeicher und 32 KB RAM,
  • 32-bit-RISC-Prozessor,
  • 512-bit-Festkomma- und 512-bit-Gleitkomma-Vektorprozessor mit zugehörigen Vektorregistern,
  • Synchronisationshandler und
  • Trace und Debugging.

Eine KI-Engine mit dediziertem Befehls- und Datenspeicher wird mit anderen KI-Engine-Kacheln verbunden, wobei eine Kombination aus dediziertem AXI-Bus-Routing und direkter Verbindung zu benachbarten KI-Engine-Kacheln verwendet wird. Für die Datenbewegung verbinden sich dedizierte DMA-Engines direkt mit der dedizierten AXI-Busverbindung und der Synchronisation.

Die Vektorprozessoren bestehen sowohl aus Ganzzahlen- als auch aus Gleitkommaeinheiten. Operanden mit 8 Bit, 16 Bit, 32 Bit und Single-Precision-Floating-Point (SPFP, Gleitkommazahlen mit einfacher Genauigkeit) werden unterstützt. Für verschiedene Operanden ändert sich die Anzahl der MAC-Instruktionen pro Taktzyklus, wie in Bild 4 dargestellt ist.

Mehrere Parallelitätsstufen werden durch Parallelität auf Befehls- und Datenebene erreicht. Die Parallelität auf Befehlsebene ist in Bild 5 dargestellt. In jedem Taktzyklus werden zwei skalare Anweisungen, zwei Vektor-Leseoperationen, eine Vektor-Schreiboperation und eine einzelne Vektoranweisung ausgeführt – also 6-fach VLIW. Die Parallelität auf Datenebene wird durch Operationen auf Vektorebene erreicht, bei denen mehrere Datensätze pro Taktzyklus verarbeitet werden können.

Determinismus und Konnektivität

Die KI-Engine-Architektur wurde für Echtzeit-Verarbeitungsanwendungen entwickelt, die eine deterministische Leistung erfordern. Zwei wesentliche architektonische Merkmale sorgen für ein deterministisches Timing: Spezielle Befehls- und Datenspeicher sowie dedizierte Konnektivität gepaart mit DMA-Engines für die Datenbewegung unter Verwendung der Konnektivität zwischen KI-Engine-Kacheln. Direct-Memory-(DM)-Schnittstellen ermöglichen den direkten Zugriff zwischen der KI-Engine-Kachel und ihren nächsten Nachbarn, dem KI-Engine-Kacheldatenspeicher im Norden, Süden und Westen. Dies wird typischerweise verwendet, um Ergebnisse zu oder von den Vektorprozessoren zu übertragen, während die gesamte Verarbeitungskette Daten produziert und/oder verbraucht. Der Datenspeicher ist implementiert, um ein »Ping-Pong«-Pufferschema zu ermöglichen, das die Auswirkungen von Speicherkonflikten auf die Leistung minimiert.

Die einfachste Form der Datenbewegung von KI-Engine zu KI-Engine erfolgt über den gemeinsamen Speicher zwischen direkt benachbarten KI-Engine-Kacheln. Wenn die Kacheln jedoch weiter entfernt sind, dann muss die KI-Engine-Kachel AXI-Datenstreaming verwenden. Die AXI-Streaming-Konnektivität ist vordefiniert und wird von den Compiler-Tools der KI-Engine basierend auf dem Datenflussgraphen programmiert. Diese Streaming-Schnittstellen können auch für die direkte Anbindung an die PL und den NoC (Network-on-Chip) verwendet werden (Bild 6).

KI-Engine und PL-Anbindung

Eines der wertvollsten Argumente des Versal-Portfolios ist die Möglichkeit, das KI-Engine-Array zusammen mit programmierbarer Logik in der Adaptable-Engine zu verwenden. Die Kombination von Ressourcen bietet eine große Flexibilität bei der Implementierung von Funktionen in der optimalen Ressource, KI-Engine, Adaptable Engine oder Skalar-Engine. Bild 7 veranschaulicht die Konnektivität zwischen dem KI-Engine-Array und der programmierbaren Logik, der sogenannten »KI-Engine-Array-Schnittstelle«. AXI-Streaming-Konnektivität existiert auf jeder Seite der KI-Engine-Array-Schnittstelle und erweitert die Konnektivität in die programmierbare Logik und separat in das Network-on-Chip.

Steuerungs-, Debug- und Trace-Funktionen sind in jede Kachel der KI-Engine integriert und bieten Transparenz für Debugging und Performance-Überwachung und -Optimierung. Der Zugriff auf die Debug-Funktionen erfolgt über den im Versal-Portfolio eingeführten Hochgeschwindigkeits-Debug-Port.

Die Effektivität der Architektur kann durch die Implementierung von 4G- und 5G-Mobilfunk in der programmierbaren Logik und der KI-Engine gemessen werden. Eine Zusammenfassung der Ergebnisse zeigt, dass KI-Engine-basierte Ansätze Vorteile bieten: Die benötigte Siliziumfläche ist drei- bis achtmal kleiner als die gleiche Funktion, die in programmierbarer Logik auf demselben Prozessknoten implementiert ist. Die Stromaufnahme ist etwa 50 % geringer als bei der Implementierung in programmierbarer Logik.

Für diejenigen Funktionen, die nicht in einer Vektorimplementierung abgebildt werden können, ist der Wirkungsgrad der KI-Engine viel geringer, und die KI-Engine ist oft nicht so gut geeignet. In diesen Fällen ist die programmierbare Logik eine bessere Lösung. KI-Engines und programmierbare Logik sind ja auch nicht als Entweder-oder-Lösung, sondern als Partner gedacht.

Programmierbare Logik eignet sich insbesondere für Datenbewegungen, bitorientierte Funktionen und nichtvektorbasierte Berechnungen; sie kann auch kundenspezifische Beschleuniger für nicht von der KI-Engine unterstützte Operationen implementieren. PL und KI-Engine ergänzen sich gegenseitig auf Systemebene. Programmierbare Logik ist immer noch eine sehr wertvolle Ressource in den meisten rechenintensiven Anwendungen.

In den letzten Jahren hat Xilinx großen Wert auf die Verwendung von Hochsprachen gelegt, um das Abstraktionsniveau für die Entwicklung mit seinen Chips zu erhöhen. Die Versal-Architektur verfügt über drei grundlegend unterschiedliche programmierbare Elemente: PL-, PS- und KI-Engine. Alle drei können in C/C++ programmiert werden.

Die AI-Engine-Simulation kann Funktions- oder Taktzyklusgenau sein, indem sie eine x86-basierte Simulationsumgebung verwendet. Für die Simulation auf Systemebene steht eine virtuelle System-C-Plattform zur Verfügung, die alle drei Verarbeitungsbereiche unterstützt.

Ein Schlüsselelement in der Entwicklungsumgebung sind die KI-Engine-Bibliotheken, die DSP- und Wireless-Funktionen, ML und KI, lineare Algebra und Matrix-Mathematik bereitstellen. Diese Bibliotheken sind auf Effizienz und hohe Rechenleistung optimiert.

KI-Engine-Anwendungen

KI-Engines wurden für rechenintensive Anwendungen optimiert, insbesondere für die digitale Signalverarbeitung und einige Technologien der künstlichen Intelligenz (KI) wie Machine Learning (ML) und 5G-Wireless-Anwendungen.

Im maschinellen Lernen ist ein Convolutional-Neuronales-Netz (CNN, zu Deutsch etwa »faltendes neuronales Netz«) ein künstliches neuronales Netz, das von biologischen Prozessen inspiriert Anwendung vornehmlich bei der maschinellen Verarbeitung von Bild- und Audiodaten findet. CNNs sind immer wichtiger geworden, da Computer für alles verwendet werden, von autonomen fahrenden Fahrzeugen über Videoüberwachung bis hin zur Analyse von Bildern und Videos im Rechenzentrum. CNNs lieferten hierfür den technologischen Durchbruch.

Die CNN-Techniken stecken noch in den Kinderschuhen, und fast jede Woche werden neue Durchbrüche angekündigt. Das Innovationstempo in diesem Bereich ist hoch und bedeutet, dass neue Anwendungen in den nächsten Jahren ermöglicht werden dürften.

Die Herausforderung bei CNNs besteht jedoch darin, dass ein hoher Rechenaufwand erforderlich ist, der häufig mehrere TeraOPS erfordert. KI-Engines wurden optimiert, um diese Rechenleistung kostengünstig und energieeffizient zu liefern.
Xilinx entwickelt zudem eine maschinenlernende Inferenzmaschine, die auf den KI-Maschinen basiert und als Anwendungs-Overlay eingesetzt wird. Programmierbare Logik wird verwendet, um Daten effizient zu bewegen und zu verwalten. Das Application-Overlay der KI-Engine bietet eine definierte Struktur für die Ausführung der Rechen- und anderer Operationen, die zur Implementierung vieler der gängigen CNN/DNN-Netzwerke wie ResNet, GoogLeNet und AlexNet erforderlich sind (DNN = Deep Neuronal Networks).

Aus Anwendersicht hat der Overlay-Ansatz viele Vorteile, darunter die Möglichkeit, mit dem Entstehen neuer Netzwerkarchitekturen modifiziert zu werden. Die programmierbare Kombination aus KI-Engine und PL bietet eine effiziente und sehr flexible Plattform, die mit fortschreitender Entwicklung des ML-Anwendungsbereichs wachsen und expandieren kann.

Die KI-Engine CNN/DNN-Overlay wird sowohl in Rechenzentrumsapplikationen zur Beschleunigung von ML-Netzwerk-Inferenzierungen als auch in Embedded Systemen eingesetzt. Die Integration ist eine einfache Angelegenheit der Instanziierung der Lösung in das Gesamtdesign des Benutzers. CNN/DNN-Netzwerke werden dann mit TensorFlow oder Caffe entwickelt und zu einem ausführbaren Programm kompiliert, das auf dem KI-Engine CNN/DNN-Overlay läuft.