Seite 7: Tensor Cores: Entschrauschen und DLSS

Um das Ray Tracing zu unterstützen und für weitere Anwendungen sind in der Turing-Architektur die aus der Volta-Architektur bekannten Tensor Cores vorhanden. Die Tensor Cores kommen bei den Volta-Karte zur Beschleunigung von Deep-Learning-Berechnungen zum Einsatz. Dies ist in der Turing-Architektur ebenfalls der Fall, allerdings ist die Anwendung eine ganz andere. Zunächst einmal aber müssen wir klären, was ein Tensor Core ist und wie dieser funktioniert.

Ein Tensor Core ist darauf ausgelegt eine Matrix-Multiplikation durchzuführen. Matrix-Multiplikationen (BLAS GEMM) sind der wichtigste Bestandteil für das Training und Inferencing von Deep-Learning-Netzwerken. Für eine Matrixmultiplikation werden die Werte A0,0 und B0,0, A0,1 und B0,1, A0,2 und B0,2 sowie A0,3 und B0,3 jeweils multipliziert und aufaddiert. Das Ergebnis wird in C0,0 eingetragen. Für 4x4-Matrizen wird dies analog für alle 16 Datenfelder ausgeführt. In der Pascal-Architektur werden diese Operationen seriell über die FP32-Einheiten ausgeführt. Der Unterschied in der Art und Weise der Ausführung ist im folgenden Video am besten zu erkennen:

Für die Volta-Architektur steht sowohl das Training, als auch das Inferencing im Fokus und daher sind die Tensor Cores hier auf FP16- oder FP32-Berechnungen ausgelegt. Für die Turing-Architektur ist das Inferencing der Fokus und daher sind die Tensor Cores hier auch auf FP16-, INT8- und INT4-Operationen ausgelegt.

Die Tensor Cores haben innerhalb des SMs ihre eigenen Datenpfade und können per Clock Gating auch komplett abgeschaltet werden, wenn sie nicht benötigt werden. Kommen sie in Spielen also nicht zum Einsatz, verbrauchen sie auch keinerlei Strom.

Für den Maximalausbau der TU102-GPU gibt NVIDIA 576 Tensor Cores an. Die GeForce RTX 2080 besitzt derer aber nur 544 und für diese nennt NVIDIA eine Rechenleistung von 110 TFLOPS FP16 für das Gaming und Image Processing. Bei INT8-Berechnungen sind es dementsprechend 220 TOPS und für derzeit noch nicht verwendete INT4-Berechnungen 440 TOPS.

Wozu NVIDIA die Tensor Cores verwendet?

NVIDIA verwendet die Tensor Cores der Turing-Architektur derzeit für zwei konkrete Anwendungen: Das Denoising bzw. Entrauschen und für einen neuen Super-Sampling-Modus namens Deep Learning Super Sampling (DLSS).

Das Denoising ist im Zusammenhang mit dem Ray Tracing besonders wichtig. Trotz aller Hardwareressourcen, die auf das Ray Tracing geworfen werden, sind wir aktuell noch nicht in der Lage eine komplette 3D-Szene per Ray Tracing zu berechnen. Es handelt sich also immer um ein partielles Ray Tracing, was natürlich die Frage offen lässt, was mit den Bereichen passiert, die nicht per Ray Tracing berechnet wurden.

Ein Denoising schaut sich die Bereiche an, die nicht oder nicht ausreichend von berechneten Rays abgedeckt sind und versieht diese "künstlich" mit den entsprechenden Informationen. Ein trainiertes Deep-Learning-Netzwerk bestimmt dabei, welche Informationen hinzugefügt werden. Das Inferencing des Deep-Learning-Netzwerkes findet auf den Tensor Cores statt.

NVIDIA hat dazu ein neues Framework entwickelt. Das Neural Graphics Framework (NGX) wird mit Hilfe der Tensor Cores angesprochen. Das NGX kann neben dem Denoising aber auch für andere Anwendungen genutzt werden. Denkbar wären eine KI darüber laufen zu lassen, aber auch Cheats lassen sich darüber erkennen oder eine Sprachausgabe muss nicht mehr komplett eingesprochen werden, sondern wird aus einem Netzwerk heraus als Audioquelle wiedergegeben. Neural Graphics ist der zunächst wichtigste Anwendungspunkt für dieses Framework.

Deep Learning Super Sampling (DLSS)

In nahezu allen Spielen erfolgt die Ausgabe des gerenderten Frames nicht sofort, sondern häufig gibt es noch einige Post-Processing-Operationen wie zum Beispiel ein Temporal Anti-Aliasing (TAA). Dabei handelt es sich um einen Shader-basierenden Algorithmus, der zwei aufeinander folgende Frames mit Hilfe von Bewegungsvektoren miteinander vergleicht. Nicht immer aber funktioniert das TAA perfekt und erzeugt damit wieder Störungen bzw. falsche Darstellungen im Frame, die aus dem Rendering-Prozess heraus besser ausgesehen hätte, aber ohne Anti-Aliasing hätten auskommen müssen. Hier kommt nun das Deep Learning Super Sampling ins Spiel.

Bereits kurz nach der Präsentation der GeForce-RTX-20-Serie gab NVIDIA die ersten Details zum Deep Learning Super Sampling preis. Um das DLSS anbieten zu können, hat NVIDIA auf seinem eigenen SATURN V Supercomputer bereits ein Deep-Learning-Netzwerk trainiert. Ein sogenannter Temporal Stable Convolutional Autoencoder berechnet dazu 500 Milliarden FP16-Operationen pro Sekunde und erstellt 64 Samples, die als Basis einer idealen Darstellung herangezogen werden können. Diese Samples sind jeweils ein 64x Supersampling (64xAA). Anstatt jeden Pixel einmal durch den Shader zu schicken, geschieht dies 64mal und jedes mal mit einem leichten Offset. Dies ist extrem aufwändig und wird daher auf dem SATURN V berechnet.

Die vorliegenden Ergebnisse einer idealen Darstellung werden in Form einiger Daten auf dem System mit GeForce-RTX-Grafikkarte hinterlegt. Der Vergleich findet über die ausgegebenen Frames der Grafikkarte statt. Das Inferencing findet somit auf der Turing-Hardware im Gaming-Rechner statt und wird durch die Tensor Cores unterstützt. DLSS 2X ist ein weiterer Schritt, bei dem der Input für das DLSS aus der finalen Render-Auflösung besteht, welcher wiederum mit einem größeren DLSS-Netzwerk abgeglichen wird.

Die dazu notwendigen Daten werden nach aktuellem Kenntnisstand per GeForce Experience an den Rechner übertragen und sind nur wenige Megabyte groß. Allerdings würde damit auch die Installation der GeForce Experience zusätzlich zum Treiber notwendig und zudem verlangt dieser nach einem Login und kann nicht mehr einfach so betrieben werden.

Das NGX-Framework nimmt den Frame von der Game Engine (Z-Buffer und anderen) entgegen, dieser wird per Inferencing abgeglichen und in optimierter Form wieder an die Game Engine übergeben.

Laut NVIDIA gibt es hinsichtlich der Darstellungsqualität zwischen einem 64x Super Sampling und einem DLSS 2x keinerlei erkennbare Unterschiede. Die Bildqualität für ein DLSS 2x soll besser als ein TAA sein. Auf dem Editors Day konnten wir uns einen direkten Vergleich anschauen und haben in der Tat keine optischen Unterschiede feststellen können.

Hinsichtlich der Leistung spricht NVIDIA vom Faktor zwei, wenn man eine GeForce GTX 1080 Ti mit TAA gegen eine GeForce RTX 2080 Ti mit aktiviertem DLSS stellt. Allerdings erreicht eine GeForce RTX 2080 Ti mit TAA ebenfalls eine um etwa 50 % höhere Leistung – das zusätzliche Plus durch die Verwendung von DLSS gegenüber TAA ist also etwas geringer.

Um einen Vergleich der Darstellungsqualität zu ermöglichen, stellt NVIDIA noch ein paar weitere Screenshots zur Verfügung:

DLSS wird anfangs von den folgenden Spielen unterstützt:

  • Ark: Survival Evolved
  • Atomic Heart
  • Dauntless
  • Final Fantasy XV
  • Fractured Lands
  • Hitman 2
  • Islands of Nyne
  • Justice
  • JX3
  • Mechwarrior 5: Mercenaries
  • PlayerUnknown’s Battlegrounds
  • Remnant: From the Ashes 
  • Serious Sam 4: Planet Badass
  • Shadow of the Tomb Raider
  • The Forge Arena
  • We Happy Few

 

Das NGX-Framework kann aber auch für andere Anwendungen genutzt werden. Ein Beispiel ist AI Super Rez. Dabei werden niedrig aufgelöste Bilder derart optimiert, dass sie deutlich höher aufgelöst wirken. Eine weitere Anwendung ist AI Slow-Mo. Dabei kann ein Deep-Learning-Algorithmus ein Video mit 30 FPS in eine Slow-Motion-Aufnahme mit 240 FPS verwandeln. Der Algorithmus vergleicht dazu zwei aufeinanderfolgende Frames und berechnet die Bewegung der Objekte. Aus dieser Erkenntnis wird ein Zwischenbild interpoliert. Weitere Informationen dazu hatten wir vor einiger Zeit in einer Meldung zusammengefasst.