Alle Messungen wurden mit Tensorflow in der Version 1.15 und mit für die jeweiligen GPUs optimierten Einstellungen durchgeführt. Die Ergebnisse können von älteren Benchmarks abweichen, da aktuelle Tensorflow-Versionen Verbesserungen beinhalten, die höhere Trainingsleistung und kürzere Turnaround-Zeiten erzielen. Auch die Leistung von Multi-GPU-Setups wird bewertet.
Übersicht der getesteten GPUs
Obwohl wir nur eine kleine Auswahl aller verfügbaren GPUs getestet haben, sind wir der Meinung, dass wir die GPUs abdecken, die sich aufgrund ihrer Rechenleistung, Speicherausbau und ihrer Kompatibilität mit aktuellen Deep-Learning-Frameworks im Jahr 2019 am besten für Deep-Learning-Training und -Entwicklungen eigneten.
GTX 1080TI
NVIDIAs klassische GPU für Deep Learning. 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 2080 TI
Die RTX 2080 TI 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.
Titan RTX
Basierend auf der preisgekrönten Turing™-Architektur bietet die Titan RTX mit ihren 576 Tensorkerne eine Leistung von 130 Tensor-TFLOPs und 24 GB GDDR6-Speicher.
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 sehr hoher Bandbreite.
Die beste 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 Backpropagations des Netzwerks parallel ausgeführt werden. Das Ergebnis jeder Backpropagation 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.
Die Grundregel besteht darin, die Batch-Size so lange zu erhöhen, bis der gesamte GPU-Speicher verwendet wird.
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 erst kürzlich für stabil erklärt wurde, ist XLA (Accelerated Linear Algebra). Mit XLA wird der Netzwerk-Graph optimiert, indem Teile des Netzwerks dynamisch in einzelne Kernel kompiliert werden, die direkt für 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 es verwenden zu können muss das 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.
Das volle Potenzial des Mixed-Precision-Lernens wird mit Tensor Flow 2.X besser ausgeschöpft und wird voraussichtlich der Leistungstrend für die Weiterentwicklung von Deep-Learning Frameworks sein.
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 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 R400 Server. Hierbei handelt es sich um eine technisch ausgereifte Plattform, um Hochleistungs-GPUs zu betreiben, da eine optimale Kühlung und PCI 3.0 x16-Steckplätze bereitgestellt werden, 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 R400, Threadripper 1950X, 64 GB RAM
- NVIDIA driver version 418.87
- CUDA 10.1.243
- CUDNN 7.6.4.38
- Tensorflow 1.15
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 trainiert werden konnten.
Im obigen Diagramm kann man eine bis zu 30-fache Beschleunigung im Vergleich zu einer 32-Kern-CPU sehen. Es besteht bereits ein deutlicher Abstand der neueren GPUs zur GTX 1080TI, die im Jahr 2017 vorgestellt wurde. Der Unterschied zwischen einer RTX 2080TI und der Tesla V100 beträgt bei der Leistung von float32 allerdings nur etwas mehr als 25%.
Beim Training mit Float-16-Bit-Präzision schiebt sich das Feld weiter auseinader. CPU und GTX 1080TI unterstützen die Float-16-Bit-Auflösung von Haus aus nicht und erzielen daher bei Verwendung einer niedrigeren Bit-Auflösung nur geringe Leistungssteigerungen.
Im Gegensatz dazu entfaltet die Tesla V100 ihr Potenzial und kann den Abstand zur RTX-GPUs vergrößern und mehr als das Dreifache der Float-32-Bit-Leistung liefern und fast das Fünffachen der Leistung einer GTX 1080TI.
Die RTX 2080TI und die Titan RTX können die Leistung im Vergleich zu Float-32-Bit-Berechnungen mindestens verdoppeln.
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 R400 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 Backpropagations 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 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 Bearbeitungszeiten und Wartezeiten 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 Bearbeitungszeiten sind somit nötig, um jedes Bild des Datensatzes einmal zu tranieren (1-Trainingsepoche):
Konfiguration | Float 32 Training | Float 16 Training |
---|---|---|
CPU(32 cores) | 26 Stunden | 26 Stunden |
Single RTX 2080TI | 69 Minuten | 29 Minuten |
Single Tesla V100 | 55 Minuten | 17 Minuten |
4 x RTX 2080TI | 19 Minuten | 8 Minuten |
4 x Tesla V100 | 15 Minuten | 4,5 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 Tesla V100 | 46 Stunden | 14 Stunden |
4 x RTX 2080TI | 16 Stunden | 6,5 Stunden |
4 x Tesla V100 | 12 Stunden | 4 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 Modelen 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.
Deep Learning GPU Preis-Leistungs-Vergleich
Ein weiterer sehr wichtiger Aspekt ist es, die erreichte Leistung einer GPU ins Verhältnis zum Preis zu setzen. Wir zeigen daher den aktuellen Verkaufspreis jeder GPU in Bezug auf die erreichbare Float-16-Bit-Leistung. Die Werte sind auf die effizienteste GPU normiert.
Schlussfolgerungen
Mixed Precision kann das Training um den Faktor 3 beschleunigen
Es zeigt sich, dass es sich für eine Leistungssteigerung lohnen kann, das Training von Float 32-Präzision auf Mixed Precsion-Training umzustellen. Ein bis zu dreifacher Leistungszuwachs durch Anpassung der Software, abhängig von Ihren Anforderungen, könnte ein sehr effizienter Schritt sein, um die Leistung zu verdreifachen.
Die Umstellung auf Mixed Precission ist fast schon notwendig, um das Potenzial der neuesten High-End-GPUs voll auszuschöpfen, da die Leistungssteigerung zu einer GTX 1080TI, einer drei Jahren alte Hardware, bei der Float 32 Performance nicht besonders beeindruckend ist .
Umgekehrt ist eine aktuelle GPU erforderlich um von einem Mixed Precission-Training zu profitieren und kann dann insgesamt mit einem mehr als vierfachen Leistungszuwachs belohnt werden, wenn man Beispielsweise von einer GTX 1080TI updated.
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 2080TI mit einer Titan RTX oder zwei Titan RTX mit einer Tesla V100 vergleicht.
Was ist die beste GPU für Deep Learning?
Wie in den meisten Fällen gibt es keine einfache Antwort auf die Frage. Rechenleistung ist mit Sicherheit der wichtigste Aspekte einer GPU, die für Deep-Learning-Aufgaben verwendet wird, allerdings nicht der einzigste Entscheidungsfaktor.
Es hängt also stark von den Anforderungen ab. Im Folgenden listen wir unsere Einschätzungen für die vielversprechendsten Deep-Learning-GPUs:
RTX 2080 TI
Diese Karte ist der eindeutige Preis-Leistungs-Sieger. Wenn Sie nach einer preisbewussten Lösung suchen, kann ein 4-GPU-Setup in der High-End-Liga mit Anschaffungskosten von weniger als einer einzelnen High-End-GPU eingesetzt werden. Der einzige Nachteil ist, dass die Karte in Virtualisierungsumgebungen nicht verwendbar ist - einer von NVIDIA auferlegten Einschränkung: Dieser GPU-Typ darf nicht in Cloud-Diensten verwendet werden. Aber für Workstations oder Inhouse-Server ist es eine der interessantesten GPUs.
Titan RTX
Der größere Bruder der RTX 2080 TI, ideal für den Fall, wenn viel GPU-Speicher benötigt wird. Mit ihren 24 GB Speicher kann sie selbst die anspruchsvollsten Modelle laden, die derzeit in der Forschung in der Entwicklung sind. Die zusätzliche Leistung kommt allerdings mit einem Preisaufschlag und die Titan RTX unterliegt ebenfalls der Einschränkung, die NVIDIA für die Verwendung in Cloud-Diensten auferlegt hat.
Tesla V100
Wenn die höchste Leistung unabhängig von Preis oder höchster Leistungsdichte benötigt wird, ist die Tesla V100 die erste Wahl: Sie bietet in allen Kategorien die meiste Rechenleistung. Auch Lösungen, für deren Ausführung eine Virtualisierung unter einem Hypervisor erforderlich ist, z. B. für Cloud-Dienste, ist sie derzeit die beste Option für High-End-Deep-Learning-Trainingsaufgaben.
Fragen oder Anmerkungen? Bitte kontaktieren Sie uns unter: hello@aime.info