Kopplung von OpenFOAM mit einem künstlichen neuronalen Netz zur Modellordnungsreduktion für Reaktionskinetik

Darstellung Urheberrecht: © T. Jeremy P. Karpowski, TU Darmstadt, STFS

Wissenschaftlicher Bereich

Hochleistungsrechnen, Numerische Strömungsmechanik, Maschinelles Lernen

Kurzbeschreibung

Das Problem der globalen Erwärmung verlangt nach der Erforschung von effizienten und emissionsarmen Verbrennungsapplikationen. Grobstruktursimulationen von turbulenten, reaktiven Strömungen sind ein wichtiges numerisches Hilfsmittel, um diese Forschung zu ermöglichen. Jedoch ist die Modellierung der nichtlinearen Reaktionskinetik in reaktiven Strömungen (CFD) eine Herausforderung. Simulationen mit hochgradig aufgelöster detaillierter Chemie können häufig nicht praktikabel auf praktische Brennkammern angewandt werden, da der benötigte Rechenaufwand zu hoch ist. Ein Verfahren, um den Rechenaufwand zu reduzieren ist tabellierte Chemie basierend auf Flamelet-generierten Mannigfaltigkeiten, welches jedoch streng durch die verfügbare Speichermenge limitiert ist.

Um den Speicherbedarf zu reduzieren und die Untersuchung komplexerer Anwendungsfälle zu ermöglichen, ist ein datengetriebenes Verfahren des Maschinellen Lernens eine vielversprechende Alternative. Hierbei wurde ein künstliches neuronales Netz trainiert, um die nichtlinearen Zusammenhänge zwischen thermochemischen Kontrollvariablen und den chemischen Quelltermen zu lernen.

Die Integration eines solchen künstlichen neuronalen Netzes in einen traditionellen Simulationscode erfordert die Kopplung mit Techniken der künstlichen Intelligenz. Eine der größten Herausforderungen ist dabei die Kopplung verschiedener Hardwarearchitekturen. Viele traditionelle Simulationscodes im Hochleistungsrechnen sind über Jahre hinweg gewachsen und für die effiziente Ausführung auf CPU-Architekturen optimiert worden. Im Gegensatz dazu können aufkommende datengetriebene Techniken, vor allem das mehrschichtige Lernen, häufig signifikant durch GPUs oder andere spezialisierte Hardware beschleunigt werden. Daher haben wir einen Kopplungsansatz entwickelt, der diese Art von heterogenen Architekturen unterstützt und es ermöglicht eine gekoppelte Applikation auf einer Kombination von reinen CPU-Rechenknoten mit GPU beschleunigten Knoten im gleichen Job auszuführen. Dafür haben wir ein verteiltes Kontroller-Arbeiter Muster implementiert, bei dem der MPI_COMM_WORLD Kommunikator partitioniert wird, in dem für jede verfügbare GPU ein einzelner Arbeitsgruppenkommunikator erzeugt wird. Innerhalb eines solchen Unterkommunikators wird ein MPI-Prozess als Kontroller zugewiesen, während die übrigen MPI-Prozesse als Arbeiter aufgefasst werden. Diese Arbeiter führen ausschließlich Code der Hauptsimulation auf der CPU aus. Nur die Kontroller starten ML Kernel auf der GPU.

Unseren Kopplungsansatz haben wir in einer vereinfachten OpenFOAM Applikation implementiert. Die folgende Abbildung veranschaulicht schematisch die resultierende Simulationsschleife. Am Ende eines Zeitschritts der Strömungssimulation werden die Eingabedaten für das neuronale Netz von den Kontroller Prozessen gesammelt. Anschließend führt jeder Kontroller die Inferenz des neuronalen Netzwerks auf der ihm zugeteilten GPU durch. Zum Schluss verteilt der Kontroller die resultierenden Ausgabedaten wieder unter den Arbeitern innerhalb seines Kommunikators.

Schematische Darstellung der CFD-AI-Kopplung

Ergebnisse

Ausgangspunkt für unsere Leistungsbewertung ist die gekoppelte OpenFOAM-ML Applikation, bei der die Inferenz des neuronalen Netzes ausschließlich von jedem MPI Prozess auf den lokalen Daten auf der CPU ausgeführt wird. Wir untersuchen verschiedene Frameworks für maschinelles Lernen auf NVIDIA V100 GPUs: PyTorch 1.10.1, TensorFlow 2.6.0 und Torch-TensorRT 1.0.0. Darüber hinaus untersuchen wir auch NEC SX Aurora Tsubasa Vektorprozessoren (VE) vom Typ 10B als Beschleuniger für die Inferenz des neuronalen Netzes und nutzen dafür das VE-Backend des SOL 0.4.2.1 Frameworks. Der gekoppelte OpenFOAM-ML Code wird mit dem Intel C/C++ Compiler 19.0.1.144 20181018, unter Nutzung der mit dem GCC 8.2.0 ausgelieferten C++ Standardbibliothek, und Intel MPI 2018.4.274 übersetzt.

Die gekoppelte Applikation wird als heterogener Job auf unserem CLAIX-2018 Cluster ausgeführt, bei dem Rechenknoten von unterschiedlichen Partitionen gemischt werden. Für jeden GPU-Rechenknoten wird zusätzlich ein reiner CPU-Rechenknoten alloziert. Jeder Rechenknoten hat zwei CPU-Sockel. Die nachfolgende Abbildung zeigt die resultierenden Laufzeiten der untersuchten Frameworks für die Inferenz des neuronalen Netzes. Gezeigt wird der Median über fünf Zeitschritte der OpenFOAM Simulation. Der schattierte Bereich um die Linien herum verdeutlicht dabei die Varianz. Zu beachten ist, dass Torch-TensorRT keine Datentypen mit doppelter Genauigkeit unterstützt. Deshalb wurde die Laufzeit der Inferenz mit doppelter Genauigkeit geschätzt als das Doppelte der Laufzeit mit einfacher Genauigkeit. Die drei Frameworks, welche auf den GPUs laufen, zeigen eine sehr ähnliche Leistung auf. Auf einer einzigen GPU ist die Inferenz des neuronalen Netzes genauso schnell wie auf 4 reinen CPU-Rechenknoten (8 CPU-Sockel). Insgesamt kann die Inferenz durch Nutzung von GPUs um bis zu 4x beschleunigt werden. Um mit den SX Aurora Vektorprozessoren die gleiche Beschleunigung wie mit 1 GPU zu erhalten, werden insgesamt 8 NEC-Vektorprozessoren benötigt.

Grafik der Inferenzzeiten in verschiedenen ML-Frameworks