ACCL: Eine FPGA-beschleunigte Kommunikationsbibliothek für skalierbare Anwendungen
Inhaltsverzeichnis
- Einführung
- Motivation für verteilte Berechnung auf FPGAs
- Die Rolle von MPI in verteilten Anwendungen
- Die Herausforderungen der verteilten Berechnung mit FPGAs
- Die Lösung: Ackel, eine FPGA-beschleunigte Kommunikationsbibliothek
- Leistungsvergleich von Ackel und Open MPI
- Skalierbarkeit und Ressourcennutzung von Ackel
- Verwendung von Ackel in der Praxis
- Zukünftige Entwicklungen und Integrationen
- Zusammenfassung
Einleitung
Willkommen zu diesem XACCC Tech Talk! Mein Name ist Carl McCabe. Wenn Sie zuvor an einem unserer Tech Talks teilgenommen haben, werden Sie das neue Logo auf dem Bildschirm bemerken. Xilinx ist jetzt Teil von AMD, und wir sind die Adaptive and Embedded Computing Group bei AMD. Diese Tech Talks sollen einige der Anwendungen und Forschungsergebnisse im Zusammenhang mit dem Adaptive Compute Clusters (ACC) Programm hervorheben. Das ACC Programm ist eine spezielle Initiative zur Unterstützung neuartiger Forschung und Anpassung in adaptiver Rechenbeschleunigung für Hochleistungsrechnen. An Partneruniversitäten auf der ganzen Welt wurden Rechencluster eingerichtet, die mit Alveo Adaptive Compute Hardware ausgestattet sind. Wenn Sie als Forscher in den Bereichen Hochleistungsrechnen und verwandte Felder arbeiten, laden wir Sie ein, sich für das Programm zu bewerben. Sie erhalten Zugang zu diesen Nodes, den Sie für Ihre eigene Forschung nutzen können. Sie finden den Link zum Programm auf dem Bildschirm, wo Sie weitere Details zum Programm finden und Aufzeichnungen früherer Tech Talks ansehen können. Ich freue mich, meinen Kollegen, Dr. Lucian Petrica, der bereits seinen zweiten Tech Talk hält, vorstellen zu dürfen. Er ist von den AMD AECG Forschungslabors in Irland, und er wird über seine Arbeit an "Ackel" sprechen, einer Open-Source-FPGA-beschleunigten Kommunikationsbibliothek für anwendungsspezifisches Skalieren.
Motivation für verteilte Berechnung auf FPGAs
Die steigenden Anforderungen an Rechenleistung und Speicherplatz durch KI-Anwendungen stellen eine Herausforderung dar. Die Anforderungen wachsen schneller als die Leistungsfähigkeit einzelner Geräte gemäß dem Moore'schen Gesetz. Daher ist es nicht möglich, mit herkömmlicher Einzelgeräte-Berechnung mit den Anforderungen moderner KI-Anwendungen im Rechenzentrum Schritt zu halten. Eine weitere Einschränkung besteht darin, dass moderne KI-Modelle so groß sind, dass sie nicht in den Speicher eines einzelnen Rechenknotens passen. Dies gilt nicht nur für KI-Anwendungen, sondern auch für Hochleistungsrechenanwendungen wie Simulationen und die Arzneimittelforschung, bei denen KI-Funktionen immer häufiger integriert werden. Deshalb ist verteilte Berechnung notwendig, wobei die Berechnung über mehrere Beschleuniger und Knoten aufgeteilt wird. Die Berechnung an diesen Knoten erfolgt in Verbindung mit Kommunikationsrunden, bei denen Daten von allen Knoten aggregiert werden, um die Synchronisation aufrechtzuerhalten. In diesem Ansatz ist die Berechnung ebenso wichtig wie die Kommunikation, da eine schnelle Berechnung ohne eine ebenso schnelle Kommunikation kein Geschwindigkeitsvorteil bringt. Dementsprechend wurden Interconnects mit Geschwindigkeiten von über 100 Gigabit pro Sekunde entwickelt. Außerdem eröffnet die FPGA-Technologie neue Möglichkeiten, indem sowohl die Berechnung als auch die Kommunikation auf einer einzigen Hardware integriert werden können.
Die Rolle von MPI in verteilten Anwendungen
Typische verteilte Anwendungen erfordern spezialisierte Kommunikationsbibliotheken. Das De-facto-Standard für verteilte Anwendungen ist die Message Passing Interface-Standard (MPI), eine gemeinsame Schnittstelle für alle Anwendungsentwickler. Mit MPI können Entwickler Kommunikation zwischen zwei oder mehr Knoten einfach durchführen. Es bietet auch eine Reihe von Kommunikationsmechanismen, die sogenannten "Collectives". Beispiele für diese Collectives sind "Broadcast", bei dem Daten von einem Knoten an alle anderen Knoten gesendet werden, "Scatter", bei dem Daten von einem Knoten an die anderen Knoten verteilt werden, "Gather", das den umgekehrten Vorgang des Scatter darstellt, und "Reduce", bei dem Daten gesammelt und aggregiert werden, indem eine bestimmte Funktion auf die Daten angewendet wird. MPI ermöglicht es den Anwendungsentwicklern, diese Collectives mit nur einer Codezeile zu nutzen, da die Implementierung des eigentlichen Kommunikationsprozesses hinter der Schnittstelle verborgen ist. Dieses einfache und kompakte Konzept macht MPI zu einer mächtigen Funktion für die Implementierung verteilter Algorithmen und Anwendungen.
Die Herausforderungen der verteilten Berechnung mit FPGAs
Die Integration von FPGA-Technologie in die verteilte Berechnung bringt neue Herausforderungen mit sich. Zum einen müssen die FPGAs als Hardware-Beschleuniger in das System integriert werden. Bisher wurden GPU- und CPU-Beschleuniger eingesetzt, die auf CUDA oder OpenCL basieren und auf den CPUs oder GPUs Computeberechnungen durchführen, während die Kommunikation über das Netzwerk erfolgt. FPGAs bieten jedoch die einzigartige Möglichkeit, sowohl Berechnung als auch Kommunikationsfunktionen in einer einzigen Hardware zu integrieren. Dies erfordert jedoch, dass die FPGA-Entwickler spezielle Kommunikationsbibliotheken entwickeln, die auf die Hardware zugeschnitten sind. Zudem müssen diese Bibliotheken nahtlos mit MPI integriert werden, um die bestehenden Anwendungen nutzen zu können. Eine weitere Herausforderung ist die Übertragung der Kontrolle von der CPU auf das FPGA. Die Berechnung und die Kommunikation müssen jetzt auf dem FPGA durchgeführt werden, um die Vorteile der Hardware-Beschleunigung zu nutzen. Dies erfordert eine reibungslose Integration des CCL-Offload-Kernels auf dem FPGA.
Die Lösung: Ackel, eine FPGA-beschleunigte Kommunikationsbibliothek
Zur Bewältigung dieser Herausforderungen haben wir Ackel entwickelt, eine FPGA-beschleunigte Kommunikationsbibliothek. Ackel bietet eine Sammlung von MPI-ähnlichen Collectives speziell für FPGA-Systeme. Die Implementierung konzentriert sich auf die wichtigsten Collectives, die für die meisten Anwendungen ausreichen. Mit Ackel ist es möglich, ultra-niedrige Latenzzeiten für die Kommunikation zwischen den FPGAs zu erreichen. Dafür nutzen wir das Konzept des CCL Offload-Kernels, der die Kontrolle von der CPU auf das FPGA übernimmt und die Kommunikationsfunktionen auf dem FPGA ausführt. Zudem unterstützt Ackel Send-Receive und andere wichtige MPI-Collectives wie Broadcast, Scatter, Gather, Reduce und Allreduce. Dabei integrieren wir uns in die bestehenden Protokolloffload-Engines wie TCP und UDP, um eine schnelle Kommunikation zu ermöglichen. Zusätzlich haben wir Mechanismen zur automatischen Speicherverwaltung implementiert, um den Host von dieser Aufgabe zu entlasten. Mit Ackel haben FPGA-Entwickler auch die Möglichkeit, die Kommunikationsfunktion direkt auf dem FPGA aufzurufen, ohne die Latenz durch die Kommunikation über PCIe in Kauf nehmen zu müssen. Wir haben auch die Erweiterbarkeit durch Whitelist-Plugins ermöglicht, mit denen benutzerdefinierte Funktionalitäten integriert werden können, um den Anforderungen verschiedener Anwendungen gerecht zu werden.
Leistungsvergleich von Ackel und Open MPI
Um die Leistung von Ackel zu evaluieren, haben wir einen umfangreichen Leistungsvergleich mit Open MPI durchgeführt. Dabei haben wir die Skalierbarkeit, die Durchsatzleistung und den Ressourcenverbrauch der beiden Lösungen verglichen. In den meisten Fällen konnte Ackel eine höhere Leistung als Open MPI erzielen, insbesondere bei größeren Nachrichtengrößen. Für kleine Nachrichten gibt es einen gewissen Overhead aufgrund der Kommunikation über die FPGA-Infrastruktur, der die Leistung beeinträchtigt. Jedoch ist Ackel ideal für Anwendungen mit größeren Nachrichten, da hier die Vorteile der FPGA-Beschleunigung zum Tragen kommen. Wir haben auch die Skalierbarkeit von Ackel getestet und festgestellt, dass es gut auf eine wachsende Anzahl von Knoten skaliert. Der Ressourcenverbrauch von Ackel ist ebenfalls akzeptabel, wobei die TCP-Protokolloffload-Engine den größten Ressourcenbedarf hat. Insgesamt bieten sowohl Ackel als auch Open MPI eine gute Leistung in verteilten Anwendungen, aber Ackel hat klare Vorteile in Bereichen mit großen Nachrichten und niedriger Latenz.
Verwendung von Ackel in der Praxis
Um Ackel in der Praxis zu nutzen, können Entwickler das Ackel-Repository klonen und die Bibliothek in ihre eigenen Projekte integrieren. Ein großer Vorteil von Ackel ist, dass wir Emulatoren und Simulatoren bereitstellen, mit denen Entwickler ihre Anwendungen prototypisieren und die Leistung überprüfen können, ohne echte Hardware einzusetzen. Sobald die Entwicklung abgeschlossen ist, können sie den CCL Offload-Kernel für Ackel erstellen und mit ihren eigenen Kernels verlinken. Ackel bietet auch eine größere Flexibilität durch Whitelist-Plugins, mit denen zusätzliche Funktionen hinzugefügt werden können. Der gesamte Entwicklungsprozess mit Ackel ist einfach und zugänglich, insbesondere für Entwickler, die bereits Erfahrung mit MPI-Programmierung haben.
Zukünftige Entwicklungen und Integrationen
In Zukunft planen wir, die Bereitstellung von Ackel für verschiedene Plattformen zu erleichtern und hinzuzufügen. Zudem arbeiten wir an HLS-Bindings, um den Overhead für das Aufrufen von Ackel auf kleinen Nachrichten zu reduzieren. Wir integrieren auch Ackel in bekannte Anwendungsframeworks wie PyTorch, um die Verwendung und Integration von Ackel in Projekten zu erleichtern. Außerdem freuen wir uns über Feedback von Entwicklern und möglichen Kooperationspartnern, um Ackel weiter zu verbessern und den Bedürfnissen der FPGA-Community gerecht zu werden.
Zusammenfassung
Ackel ist eine FPGA-beschleunigte Kommunikationsbibliothek, die die Leistung und Effizienz von verteilten Anwendungen auf FPGA-Plattformen verbessert. Es bietet eine Reihe von MPI-ähnlichen Collectives, die speziell für FPGAs optimiert sind. Ackel ermöglicht eine ultra-niedrige Latenzkommunikation zwischen den FPGAs und bietet eine gute Skalierbarkeit. Im Vergleich zu Open MPI bietet Ackel eine höhere Leistung für größere Nachrichtengrößen. Der Ressourcenverbrauch von Ackel ist akzeptabel und die Bibliothek ist leicht in bestehende Anwendungen zu integrieren. Die Verwendung von Ackel erfordert jedoch spezifisches FPGA-Wissen und Erfahrung mit MPI-Programmierung. Für die Zukunft planen wir, Ackel weiter zu verbessern und in bekannten Anwendungsframeworks zu integrieren. Wir freuen uns auf Feedback und Zusammenarbeit mit der FPGA-Community, um Ackel zum Standardwerkzeug für verteilte Berechnungen auf FPGA-Plattformen zu machen.