Deep Learning GPU Benchmarks 2021
Übersicht der getesteten GPUs
Obwohl wir nur eine kleine Auswahl aller verfügbaren GPUs getestet haben, sind wir der Meinung, dass wir alle GPUs abdecken, die sich aufgrund ihrer Rechenleistung, Speicherausbau und ihrer Kompatibilität mit aktuellen Deep-Learning-Frameworks derzeit am besten für Deep-Learning-Training und -Entwicklungen eignen.
GTX 1080TI
NVIDIAs klassische GPU für Deep Learning. Herausgebracht im Jahr 2017 mit 11 GB DDR5-Speicher und 3584 CUDA-Kernen wurde sie für Compute-Anwendungen entwickelt. Da die GTX 1080TI nicht mehr produziert wird, haben wir sie hier nur als Referenz für einen Vergleich hinzugefügt.
RTX 2080TI
Die RTX 2080 TI aus dem vierten Quartal 2018 liefert eine Leistung von 5342 CUDA-Kernen, die als 544 NVIDIA Turing-Tensorkerne mit gemischter Präzision organisiert sind und somit 107 Tensor-TFLOPS AI-Leistung und 11 GB GDDR6-Speicher bieten. Im September 2020 wurde die Produktion dieser GPU eingestellt, wodurch sie nur noch sehr schwer erhältlich ist.
Titan RTX
Basierend auf der preisgekrönten Turing™-Architektur bietet die Titan RTX mit ihren 576 Tensorkernen eine Leistung von 130 Tensor-TFLOPs und 24 GB GDDR6-Speicher.
Quadro RTX 6000
Die Quadro RTX 6000 ist die Server-Variante der beliebten Titan RTX mit verbessertem Luftkühlsystem, zusätzlichen Virtualisierungsfunktionen und ECC-Speicher. Sie basiert auf der gleichen Turing ™ Architektur, wie die Titan RTX mit 576 Tensor-Kernen und bietet 130 Tensor TFLOPS Leistung mit 24 GB ultraschnellem GDDR6 ECC Speicher.
Quadro RTX 8000
Die Quadro RTX 8000 ist die große Variante der RTX 6000. Mit dem gleichen GPU-Prozessor, aber doppeltem Grafikspeicher (48 GB GDDR6 ECC). Tatsächlich ist sie derzeit die GPU mit dem größten verfügbaren GPU-Speicher und damit am besten geeignet für besonders speicherintensive Aufgaben.
RTX 3080
Eine der ersten GPU-Modelle mit der NVIDIA Ampere™-Architektur. Mit verbessertem Raytraycing und Tensorkernen, sowie neuen Streaming-Multiprozessoren. Die RTX 3080 ist mit 10 GB ultraschnellem GDDR6X-Speicher und 8704 CUDA-Kernen ausgestattet.
RTX 3080 Ti
Der große Bruder der RTX 3080 mit 12 GB ultraschnellem GDDR6X-Speicher und 10240 CUDA-Kernen.
RTX 3090
Die GeForce RTX ™ 3090 ist die TITAN-Klasse der NVIDIA Ampere™ GPU-Generation. Sie wird mit 10496 CUDA-Kernen, 328 Tensorkernen der dritten Generation und neuen Streaming-Multiprozessoren betrieben. Wie die Titan RTX verfügt sie über 24 GB GDDR6X-Speicher.
NVIDIA RTX A5000
Die NVIDIA RTX A5000 ist die kleinere Version der RTX A6000. Sie hat die gleiche Menge an GDDR-Speicher wie die RTX 3090 (24 GB) und verfügt auch über den gleichen GPU-Prozessor (GA-102) wie die RTX 3090, jedoch mit reduzierter Anzahl Prozessorkernen. Was zu 8192 CUDA-Kernen und 256 Tensor-Kernen der dritten Generation führt. Der Hauptvorteil der RTX A5000 ist der geringere Leistungsbedarf von 230 Watt
NVIDIA RTX A6000
Die NVIDIA RTX A6000 ist das Ampere-basierte Nachfolgemodell der Quadro RTX 6000. Sie verfügt über denselben GPU-Prozessor (GA-102) wie die RTX 3090, allerding sind alle Kerne des GA-102 Prozessors aktiviert was in 10752 CUDA und 336 Tensor-Kernen resultiert. Zusätzlich ist sie mit der doppelten Menge an GPU-Speicher der RTX 3090 ausgestattet: 48 GB GDDR6 ECC.
Tesla V100
Mit 640 Tensorkernen war die Tesla V100 die erste GPU der Welt, die die 100-TeraFLOPS-Barriere (TFLOPS) durchbrach. Der GPU-Speicher besteht aus 16 GB HBM2-Speicher mit höchstmöglicher Bandbreite. Sie basiert auf dem Volta GPU-Prozessor, der nur für die professionelle GPU-Serie von NVIDIA verfügbar ist.
NVIDIA A100
Die Nvidia A100 ist das Flaggschiff der Nvidia Ampere™-Prozessorgeneration. Mit 6912 CUDA-Kernen, 432 Tensorkernen der dritten Generation und 40 GB HBM2-Speicher mit der höchsten Bandbreite. Ein einzelner A100 schreitet bereits in den Leistungsbereich von Peta TOPS vor.
Die optimale Leistung mit Tensorflow erzielen
Im Folgenden zeigen wir die Maßnahmen auf, mit denen wir Tensorflow für das Benchmarking optimieren:
Batch-Size
Eine der wichtigsten Einstellungen zur Optimierung der Auslastung für jeden GPU-Typ ist die Verwendung der optimalen Batch-Size. Die Batch-Size gibt an, wie viele Propagations des Netzwerks parallel ausgeführt werden. Das Ergebnis jeder Propagation wird dann aus den Werten des Batches gemittelt und anschließend zum Anpassen der Netzwerkgewichte verwendet. Die in Bezug auf die Leistung optimale Batch-Size hängt direkt von der Größe des verfügbaren GPU-Speichers ab.
Eine größere Batch-Size erhöht die Parallelität und verbessert die Auslastung der GPU-Kerne. Die Batch-Size sollte jedoch den verfügbaren GPU-Speicher nicht überschreiten, da ansonsten Paging-Mechanismen einsetzen, welche die Leistung wieder verringern oder die Anwendung stürzt einfach mit einer "Nicht genügend Speicher"-Exception ab.
Eine große Batch-Size hat bis zu einem gewissen Maß keine negativen Auswirkungen auf die Trainingsergebnisse. Im Gegenteil: Eine große Batch-Size kann sogar positive Auswirkungen haben, indem sie das Netzwerk unterstützt, die Trainingsbeispiele besser zu abstrahieren. Ein Beispiel ist BigGAN, bei dem um die besten Ergebnisse zu erzielen, Batch-Größen von 2048 empfohlen werden. Eine weitere interessante Analyse vom Einfluss der Batch-Size auf das Trainigsergebniss wurde von OpenAI durchgeführt.
Tensorflow XLA
Ein Tensorflow-Feature, das vor längerer Zeit als stabil erklärt wurde, allerdings standardmässig abgeschaltet ist, nennt sich XLA (Accelerated Linear Algebra). Mit XLA wird der Netzwerk-Graph optimiert, indem Teile des Netzwerks dynamisch in einzelne Kernel kompiliert werden, die direkt auf das entsprechende Gerät optimiert werden. Dies kann, im Vergleich zu statisch kompilierten Tensorflow-Kerneln, zu Leistungssteigerungen von 10% bis 30% führen.
Diese Funktion kann durch eine einfache Option oder eine Umgebungsvariable aktiviert werden und wirkt sich direkt auf die Ausführungsleistung aus. Informationen zum Aktivieren von XLA in Ihren Projekten finden Sie hier.
Float 16bit / Mixed Precision Learning
Für Inferenz-Aufgaben wird bereits eine niedrigere Gleitkommapräzision und eine noch niedrigere 8- oder 4-Bit-Ganzzahlauflösung zur Leistungsverbesserung verwendet. Studien deuten darauf hin, dass die 16-Bit-Präzision von Float auch für Trainingsaufgaben mit vernachlässigbarem Verlust an Trainingsgenauigkeit angewendet werden kann und damit Trainings-Aufgaben erheblich beschleunigen kann. Die Anwendung der 16-Bit-Genauigkeit von Float ist nicht ganz so einfach. Um sie verwenden zu können muss das zu trainierende Modell angepasst werden. Da nicht alle Berechnungsschritte mit einer niedrigeren Bitgenauigkeit ausgeführt werden sollten, wird das Mischen verschiedener Bitauflösungen bei der Berechnung als "gemischte Genauigkeit" (mixed precision) bezeichnet.
Um das Potenzial der Methode zu verdeutlichen, zeigen wir im Folgenden die Benchmarks mit 32-Bit- und 16-Bit-Float-Genauigkeit.
Das Deep Learning Benchmark
Für unsere Performance-Messung wird das visuelle Erkennungsmodell ResNet50 in Version 1.0 verwendet. Als klassisches Deep-Learning-Netzwerk mit seiner komplexen 50-Schichten-Architektur mit verschiedenen Faltungs- und Residual-Schichten ist es immer noch ein sehr geeignetes Netzwerk für den Vergleich der erreichbaren Deep-Learning-Leistung. Da es in vielen Benchmarks verwendet wird, ist eine nahezu optimale Implementierung verfügbar, welche die maximale Leistung aus der GPU herausholt und dabei aufzeigt, wo die tatsächlichen Leistungsgrenzen der einzelnen GPUs liegen.
Die Testumgebung
Zum Testen verwendeten wir unseren AIME A4000 Server. Hierbei handelt es sich um eine technisch ausgereifte Plattform, um Hochleistungs-GPUs zu betreiben, da sie eine optimale Kühlung bietet und PCIe 4.0 x16-Steckplätze bereitgestellt wird, die die GPUs direkt mit der CPU verbinden. Die PCI-Konnektivität hat einen messbaren Einfluss auf die Deep Learning-Leistung, insbesondere bei Konfigurationen mit mehreren GPUs. Eine ausgeklügelte Kühlung ist notwendig, um maximale Leistung zu erzielen und auf Dauer zu halten.
Die technischen Daten zur Reproduktion unserer Benchmarks:
- AIME A4000, Epyc 7402 (24 Kerne), 128 GB ECC RAM
- Ubuntu 20.04
- NVIDIA Treiber Version 455.45
- CUDA 11.1.74
- CUDNN 8.0.5
- Tensorflow 1.15.4
Die für den Benchmark verwendeten Python-Skripte sind auf Github unter Tensorflow 1.x Benchmark verfügbar.
Single-GPU-Leistung
Das Ergebnis unserer Messungen wird mit der Anzahl der durchschnittlich verarbeiteten Bilder pro Sekunde angegeben, die über eine Dauer von 100 Batches mit der angegeben Batchgröße trainiert werden konnten.
Die NVIDIA Ampere-Generation ist hier eindeutig führend und die A100 deklassiert alle anderen Modelle.
Beim Training mit Float-16-Bit-Präzision erhöhen die A100 und V100 weiter ihren Vorsprung. Aber auch die RTX 3090 kann ihre Leistung im Vergleich zu Float-32-Bit-Berechnungen mehr als verdoppeln. Die GPU Berechnungen steigen hier auf das 167-fache der Geschwindigkeit einer 32-Kern-CPU, wodurch die Verwendung von GPUs für leistungsstarke Deep-Learning-Aufgaben obligatorisch wird.
Multi-GPU Deep-Learning Trainingsleistung
Die nächste Stufe zur Steigerung der Deep-Learning-Leistung besteht darin, die Arbeits- und Trainingslast auf mehrere GPUs zu verteilen. Der AIME A4000 server unterstützt bis zu 4 GPUs eines beliebigen Typs.
Deep Learning lässt sich über mehrere GPUs hinweg gut skalieren. Die Methode der Wahl für die Multi-GPU-Skalierung, die in mindestens 90% der Fälle eingesetzt wird, ist es den Batch auf die GPUs zu verteilen. Daher ist die effektive Batch-Size die Summe der Batchgrößen der verwendeten GPUs.
Dabei berechnet jede GPU die Propagations für die angelegten Eingaben des Batch-Bereichs. Die Ergebnisse jeder GPU werden dann ausgetauscht, gemittelt und die Gewichte des Modells werden entsprechend angepasst. Das Ergebniss muss wieder an alle GPUs zurück übertragen werden.
Nach der Berechnung eines Batches findet die Spitze an Kommunikationslast statt, in der die Ergebnisse der Batches gesammelt und die Gewichte angepasst werden. Dieser Vorgang muss abgeschlossen sein, bevor der nächste Batch gestartet werden kann. Während die GPUs an einem Batch arbeiten, findet kaum oder überhaupt keine Kommunikation zwischen den GPUs statt.
Bei dieser Standardlösung für die Multi-GPU-Skalierung muss sichergestellt sein, dass alle GPUs mit der gleichen Geschwindigkeit arbeiten, ansonsten ist die langsamste GPU der Engpass, auf den alle GPUs warten müssen. Daher ist das Mischen verschiedener GPU-Typen beim Skalieren nicht sinnvoll.
Die Trainingsleistung ins rechte Licht gerückt
Um ein besseres Bild davon zu erhalten, wie sich die Messung von Bildern pro Sekunde in Laufzeiten beim Trainieren solcher Netzwerke niederschlägt, sehen wir uns einen realen Anwendungsfall für das Trainieren eines solchen Netzwerks mit einem großen Datensatz an.
Beispielsweise besteht der ImageNet 2017-Datensatz aus 1.431.167 Bildern. Folgende Trainingszeiten sind somit nötig, um jedes Bild des Datensatzes einmal zu tranieren (1-Trainingsepoche):
Konfiguration | Float 32 Training | Float 16 Training |
---|---|---|
CPU(32 cores) | 27 Stunden | 27 Stunden |
Single RTX 2080TI | 69 Minuten | 29 Minuten |
Single RTX 3080 | 53 Minuten | 22 Minuten |
Single RTX 3080 TI | 45 Minuten | 21 Minuten |
Single RTX 3090 | 41 Minuten | 18 Minuten |
Single NVIDIA A100 | 23 Minuten | 8,5 Minuten |
4 x RTX 2080TI | 19 Minuten | 8 Minuten |
4 x Tesla V100 | 15 Minuten | 4,5 Minuten |
4 x RTX 3090 | 11,5 Minuten | 5 Minuten |
4 x NVIDIA A100 | 6,5 Minuten | 3 Minuten |
In der Regel sind mindestens 50 Trainingsepochen erforderlich, so dass ein Ergebnis erst zu bewerten ist, nach
Konfiguration | Float 32 Training | Float 16 Training |
---|---|---|
CPU(32 cores) | 55 Tage | 55 Tage |
Single RTX 2080TI | 57 Stunden | 24 Stunden |
Single RTX 3080 | 44 Stunden | 18 Stunden |
Single RTX 3080 TI | 38 Stunden | 17 Stunden |
Single RTX 3090 | 34 Stunden | 14,5 Stunden |
Single A100 | 19 Stunden | 8 Stunden |
4 x RTX 2080TI | 16 Stunden | 6,5 Stunden |
4 x Tesla V100 | 12 Stunden | 4 Stunden |
4 x RTX 3090 | 9,5 Stunden | 4 Stunden |
4 x NVIDIA A100 | 5,5 Stunden | 2,5 Stunden |
Dies zeigt, dass sich mit dem richtigen Setup die Wartezeit einer Trainingsaufgabe von Wochen auf den nächsten Arbeitstag oder sogar nur auf einige Stunden verkürzen lässt. Um keinen unnötigen Leerlauf bei der Entwicklung von Modellen zu haben, ist in den meisten Fällen eine Trainingsdauer erwünscht, die gewährleistet, daß das Training über Nacht durchgeführt werden kann und die Ergebnisse am nächsten Morgen vorliegen.
Schlussfolgerungen
Mixed Precision kann das Training um mehr als den Faktor 2 beschleunigen
Es zeigt sich, dass es sich für eine Leistungssteigerung lohnen kann, das Training von Float 32-Präzision auf Mixed Precision-Training umzustellen. Das Anpassen der Software an die jeweiligen Anforderungen könnte ein sehr effizienter Schritt sein, um die Leistung zu verdoppeln.
Multi-GPU-Skalierung ist mehr als machbar
Deep-Learning-Leistungsskalierung im Multi-GPU-Betrieb skaliert zumindest für bis zu 4 GPUs sehr gut. Die Verwendung von 2 GPUs übertrifft meistens die nächste leistungsstärkere GPU in Bezug auf Preis und Leistung.
Dies gilt insbesondere, wenn man zwei RTX 3090 mit einer NVIDIA A100 vergleicht.
Was ist die beste GPU für Deep Learning?
Wie in den meisten Fällen gibt es keine einfache Antwort auf diese Frage. Rechenleistung ist mit Sicherheit der wichtigste Aspekt einer GPU, die für Deep-Learning-Aufgaben verwendet wird, allerdings nicht der einzige Entscheidungsfaktor.
Es hängt also stark von den Anforderungen ab. Im Folgenden listen wir unsere Einschätzungen für die vielversprechendsten Deep-Learning-GPUs auf:
RTX 3080 TI
Diese Karte ist der eindeutige Preis-Leistungs-Sieger. Wer nach einer preisbewussten Lösung sucht, kann mit einem multi GPU-Setup in der High-End-Liga mit niedigeren Anschaffungskosten als einer einzelnen High-End-GPU mitspielen.
Mit den 12 GB GPU-Speicher hat die RTX 3080 TI einen klaren Vorteil gegenüber der RTX 3080 ohne TI und ist ein angemessener Ersatz für eine RTX 2080 TI. Aber mit den steigenden und anspruchsvolleren Deep-Learning-Modellgrößen werden die 12 GB Speicher wohl zukünftig auch bei der RTX 3080 TI zum Flaschenhals.
RTX 3090
Die RTX 3090 ist derzeit der eigentliche Nachfolger der RTX 2080 TI im Deep-Learning-Bereich. Mit seinem 24-GB-Speicher und einer deutlichen Leistungssteigerung zur RTX 2080 TI setzt sie den Maßstab für diese neue Generation von Deep-Learning-GPUs.
Ein dual RTX 3090-Setup kann ein 4x RTX 2080 TI-Setup bei den Deep-Learning-Berechnungszeiten bei niedrigerem Strombedarf und geringerem Preis übertreffen.
NVIDIA A100
Wenn die höchste Leistung oder höchste Leistungsdichte unabhängig vom Preis benötigt wird, ist die NVIDIA A100 die erste Wahl: Sie bietet in allen Kategorien die meiste Rechenleistung.
Die A100 hat im Vergleich zur Tesla V100 einen großen Leistungssprung gemacht, wodurch auch das Preis-Leistungs-Verhältnis wesentlich attraktiver wird.
Auch fällt der geringere Stromverbrauch von 250 Watt einer A100 im Vergleich zu 700 Watt eines dualen RTX 3090-Setups mit vergleichbarer Leistung in einen Bereich, in dem bei anhaltender Volllast der Unterschied bei den Energiekosten zu einem zu berücksichtigenden Faktor werden kann.
Bei Lösungen, für deren Ausführung eine Virtualisierung unter einem Hypervisor erforderlich ist, z. B. für Cloud-Dienste, ist die NVIDIA A100 derzeit die beste Option für High-End-Deep-Learning-Trainingsaufgaben.
Ein Quad-NVIDIA A100-Setup, wie es mit dem AIME A4000 möglich ist, katapultiert einen in den petaFLOPS HPC-Leistungsbereich.
Fragen oder Anmerkungen? Bitte kontaktieren Sie uns unter: hello@aime.info