Jeder Data Scientist kennt das Problem: Man hat einige Machine Learning Modelle auf einer Stichprobe der Daten entwickelt und möchte die Trainingspipeline nun auf dem Gesamtdatenbestand anwenden. Was bis eben noch ein paar Minuten gedauert hat, dauert auf einmal Stunden oder gar Tage.
„Ich brauch mehr Power“ – Schnell wird der Weckruf nach besserer Hardware und höherer Leistung laut. Doch was genau benötige ich eigentlich um meine Modelle zu verschnellern und die Laufzeit des Machine Learning Tainings zu minimieren?
In diesem Artikel wird Dir aufgezeigt wo die Unterschiede zwischen GPU vs. CPU liegen und führt einen Performance-Vergleich zwischen GPU und CPU basierter Ausführung eines XGBoost Algorithmus durch.
GPU vs CPU – Das Bierzelt Beispiel
Du sitzt in einem Bierzelt und möchtest eine Maß Bier bestellen. Du hast die Auswahl zwischen zwei Typen von Kellnern.
Typ Flitzer (CPU): Dieser holt immer genau ein Bier von der Theke und bringt die Maß dem Gast. Dann geht er wieder zurück zur Theke und holt das nächste Bier.
Typ Schlepper (GPU): Diese Kellnerin nimmt sich gleich fünf Maß in jede Hand von der Theke und bringt sie den Gästen. Sobald sie am Tisch ankommt kann sie gleich mehreren Gästen ihr Bier austeilen.
Wenn Du alleine das Bierzelt besuchst ist der Typ Flitzer deine präferierte Wahl. Du bestellst Dein Bier und kriegst es auch recht schnell an Deinen Tisch gebracht. Solltest Du das Bierzelt in einer größeren Gruppe in das Bierzelt gehen, stellt der Typ Schlepper als die geeignete Wahl heraus. Es dauert zwar länger bis die Gesamtbestellung geliefert wird, aber dann werden bis zu 10 Bier parallel verteilt. Und ihr könnt alle gemeinsam Anstoßen. Vereinfacht dargestellt kann man sich den Typ Flitzer als CPU bezeichnen und den Typ Schlepper als GPU.
[cp_modal display=“inline“ id=“cp_id_e7a0b“][/cp_modal]
Diese Eigenschaften haben CPU und GPU.
CPUs (Central Processing Units) haben nur wenige Kerne, die ihre Prozesse nacheinander mit wenigen Threads gleichzeitig ausführen. Die CPU ist der Hauptprozessor eines PC kann optimierte und lange komplexe Aufgaben ausführen und sind latenzoptimiert.
GPUs (Graphics Processing Unit) weisen eine große Anzahl einfacher Kerne auf, die paralleles Rechnen durch Tausende von Threads gleichzeitig ermöglichen. Die GPU ist die Grafikkarte eines PC kann einfache Aufgaben parallelisiert durchführen und sind bandbreitenoptimiert. Es können auch mehrere GPUs gleichzeitig in Betrieb genommen werden.
Die Rolle von GPU bei künstlicher Intelligenz
In einer Zeit, in der künstliche Intelligenz und automatisiertem Machine Learning (AutoML) immer mehr Anwendung findet, ändert sich auch der Stellenwert von CPU und GPU. Manuell erzeugte Machine Learning Modelle rücken immer mehr in den Hintergrund und dem Thema experimentellen Machine Learning kommt eine zunehmende Bedeutung zu. Hierbei werden hunderte Modelle automatisiert trainiert und nach Ende der Experimentreihe das Beste Modell ausgewählt. Die GPU gilt als Herzstück des AutoML, einem wichtigen Teilgebiet der künstlichen Intelligenz.
CUDA: Was ist das?
Cuda steht für „Compute Unified Device Architecture“ und ist eine Technologie und Programmierschnittstelle die vom Grafikkarten-Hersteller NVidia entwickelt wurde. Es beschleunigt die Durchführung von Programmen in dem gewisse Programmteile von einer oder mehreren GPUs gelichzeitig berechnet werden. Mehr und mehr Projekte wie zum Beispiel rapids.ai beschäftigen sich mit Entwicklung von Anwendungen von GPU Data Science. Um das nachfolgende Code-Bespiel durchführen zu können, musst Du vorab die passende Cuda-Version installieren.
XGBoost- Du hast die Wahl: CPU oder GPU
Beim Trainieren von Machine-Learning oder anderen Deep Learning Modellen gibt es verschiedene Möglichkeiten wo der Code Deines Programms ausgeführt wird. Entweder wird der Quell-Code auf dem CPU-Chip ausgeführt, oder aber wird das Programm als Cuda-Code auf der GPU ausgeführt. Die Entwickler des XGboost-Packages haben ihr Paket bereits auf der Basis von CUDA entwickelt, so dass die Anwendung auf der Grafikkarte sehr einfach ist.
Praktisches Beispiel: XGBoost CPU vs. GPU
Datenbasis:
- Higgs Datensatz
- Training 1 Millionen Beobachtungen mit 30 Features
- Test 500.000 Beobachtungen mit 30 Features
Machine Learning Modell:
- XGBoost in Python
- Binäre Zielvariable (Objective: binary:logitraw)
- 500 Runden für das Boosting
GPU Ausführung
- Verwendete Grafikkarte: Nvidia RTX 2080ti
- Die Ausführung auf der GPU wird festgelegt durch „tree_method“=gpu_exact..
- Zur Auswahl stehen entweder gpu_hist oder gpu_exact.
- Die Zeit der Ausführung wird in der Variablen gpu_time gemessen.
CPU Ausführung
- Verwendete Prozessor: Intel (R) i9-9900 mit 8 physischen und 16 virtuellen Kernen
- Die Ausführung auf der CPU wird festgelegt durch „tree_method“=hist.
- Die Ausführung auf der CPU wird ebenfalls parallelisiert (über n_jobs=16) so dass alle Threads voll ausgelastet sind und wir die Ergebnisse nicht mit einer Single-Thread Ausführung vergleichen.
- Die Zeit der Ausführung wird in der Variablen cpu_time gemessen.
Performance Vergleich: XGBoost CPU vs. GPU
GPU: Nvidia RTX 2080ti | CPU: Intel (R) i9-9000 |
Laufzeit: 26.53 Sekunden | Laufzeit: 145.68 Sekunden |
- Die Durchführung des Trainings mit GPU war um den Faktor 5,4 schneller, als auf der CPU. Das entspricht einer Reduktion des Trainings von knapp 2,5 Minuten auf unter eine halbe Minute.
- Bei dem verwendeten CPU handelt es sich ebenfalls um einen leistungsstarken Intel-Prozessor der neunten Generation, der ebenfalls parallelisiert ausgeführt wurde.
- Beim Einsatz mehrerer Grafikkarten oder einem Benchmark-Vergleich zu einem schwächeren CPU würde der Faktor sogar auf über 20 ansteigen.
- Die Ergebnisse und das resultierende XGBoost-Modell ist inhaltlich identisch und zu 99,99% deckungsgleich.
Fazit und Ausblick von AUTOML
Durch die Ausführung von Machine-Learning Anwendungen auf GPU statt CPU Basis, lässt sich die Performance von Machine Learning Modellen signifikant verbessern!Entweder lassen sich die Laufzeiten reduzieren, oder es können einfach mehr Modelle in gleicher Zeit berechnet werden.
GPU-basiertes Machine Learning empfiehlt sich insbesondere bei AutoML Anwendungen oder überall wo viele oder intensive Trainings durchgeführt werden müssen. In Zukunft wird es deutlich mehr Open-Source Entwicklungen im Bereich von GPU-unterstützter Data Science geben und wir können daher zusammenfassen:
GPU ist das neue CPU für maschinelles Lernen!
Philipp Göller
[cp_modal display=“inline“ id=“cp_id_f28f3″][/cp_modal]