00:00:00Das ist DeepSpeed, Microsofts Open-Source-Library, die direkt in PyTorch integriert wird und das Speicherproblem löst.
00:00:07Damit lassen sich Modelle, die normalerweise sofort abstürzen, auf einer einzigen GPU trainieren, ohne sie zu überlasten. Große Modelle scheitern nicht an mangelnder Geschwindigkeit.
00:00:14Sie scheitern, weil Optimizer-Zustände, Gradienten und Parameter den VRAM sprengen. DeepSpeeds Geheimnis ist ZeRO, das die Trainingszustände aufteilt (sharding).
00:00:23So speichert man nicht überall die gleichen Daten doppelt. Wir veröffentlichen ständig neue Videos, also abonniert am besten den Kanal.
00:00:30Legen wir direkt los. Da ich an einem Mac mit M4 Pro sitze, lasse ich alles in Google Colab laufen.
00:00:40Mir fehlen hier also die Nvidia-GPUs, was es etwas schwieriger macht, aber über Colab geht es trotzdem.
00:00:46Zuerst prüfe ich kurz meine GPUs, dann können wir alle nötigen Pakete per Pip installieren.
00:00:51Ich installiere PyTorch, Hugging Face und DeepSpeed. Danach mache ich mit „ds_report“ einen Check von CUDA und dem Compiler.
00:00:59Noch ein paar weitere Installationen, damit alles reibungslos läuft.
00:01:02Dann erstellen wir unsere JSON-Konfigurationsdatei für DeepSpeed. Diese Datei ist das Herzstück des Ganzen.
00:01:09Wir beginnen mit ZeRO Stage 2, wodurch Optimizer-Zustände und Gradienten über die GPUs verteilt werden.
00:01:14Das reduziert den Speicherverbrauch massiv, während die Modellparameter repliziert bleiben. Zerbrecht euch nicht den Kopf darüber, mich hat das wahnsinnig gemacht.
00:01:22Haltet euch einfach an die offizielle Dokumentation, ändert immer nur eine Sache gleichzeitig und widersteht dem Drang, willkürliche Configs hinzuzufügen.
00:01:28Die passende Konfiguration findet ihr sowohl bei Hugging Face als auch in der DeepSpeed-Doku.
00:01:34Auch den Großteil meines Python-Skripts habe ich aus diesen Quellen übernommen.
00:01:37Ich habe jedoch ein paar Anpassungen vorgenommen, damit mein System – speziell das Mac-Setup – besser damit klarkommt.
00:01:42Falls dieser Schritt fehlschlägt, stoppt hier. Die meisten DeepSpeed-Probleme liegen an CUDA-Konflikten, nicht am Modell selbst.
00:01:48Wir lassen das jetzt alles laufen und schauen zu, wie es funktioniert.
00:01:51Für dieses Beispiel verwende ich einen kleinen Datensatz, damit es schneller geht.
00:01:58Und da haben wir es – nach ein paar Minuten sehen wir die einzelnen Schritte und auch die GPU-Speicherspitzen.
00:02:03Zugegeben, der Training-Loss ist bei diesem Durchlauf nicht wirklich gesunken.
00:02:08Aber für bessere Ergebnisse könnten wir das Ganze optimieren oder einen größeren Datensatz nutzen.
00:02:13Hier ist der Punkt, an dem viele denken, sie hätten es geschafft, aber dann doch eine „Out of Memory“-Fehlermeldung bekommen.
00:02:16ZeRO arbeitet in Stufen. Jede Stufe beantwortet die Frage: Was darf ich aufhören, auf einer einzelnen GPU zu speichern?
00:02:24Stage 1 verteilt die Optimizer-Zustände, Stage 2 macht dasselbe zusätzlich für die Gradienten.
00:02:30Damit spart man bereits massiv an den Daten, die heimlich euren Speicher fressen. Dann gibt es noch ZeRO Stage 3.
00:02:36Das ist die wichtigste Stufe: Sie verteilt Optimizer-Zustände, Gradienten UND Parameter.
00:02:40Das bringt den größten Speichergewinn, aber selbst das reicht manchmal nicht aus.
00:02:45Wenn das Modell immer noch nicht passt, kann ZeRO-Infinity Daten auf die CPU oder sogar auf NVMe auslagern.
00:02:50Man tauscht zwar Geschwindigkeit gegen Skalierbarkeit ein, aber oft ist der eigentliche Erfolg, das Modell überhaupt zum Laufen zu bringen.
00:02:56Vielleicht denkt ihr jetzt: „Schön und gut, aber Speicher ist nicht mein einziges Problem.“ Stimmt, DeepSpeed unterstützt auch 3D-Parallelismus.
00:03:04Das umfasst Daten-, Pipeline- und Tensor-Parallelismus sowie native Unterstützung für Mixture-of-Experts-Modelle.
00:03:09So fressen euch spärlich besetzte (sparse) Modelle nicht bei der Rechenleistung auf.
00:03:12Hier bekommt man also echte Optionen. DeepSpeed lässt sich hervorragend mit Hugging Face und Accelerate kombinieren.
00:03:19Man muss also nicht alles von Grund auf neu bauen.
00:03:21Im Grunde pickt man sich raus, was man braucht. Benchmarks hängen natürlich stark vom jeweiligen Setup ab.
00:03:27Traut also nicht blind jeder hohen Zahl. Ich habe es ein paar Mal versucht.
00:03:30Aber wie gesagt, auf meinem M4 Pro konnte ich mit diesem Basismodell keine weiteren Optimierungen erzielen.
00:03:36Es ist schwer zu sagen, aber andere DeepSpeed-Projekte haben enorme Durchsatzsteigerungen gezeigt.
00:03:41Besonders wenn der Speicher der Flaschenhals war, kann das unter Windows oder Linux einen riesigen Unterschied machen.
00:03:46Am besten probiert ihr es einfach selbst aus. Startet mit den offiziellen Konfigurationen.
00:03:51So habe ich es gemacht: Leicht an den Mac angepasst und dann die CUDA-Probleme behoben.
00:03:56Achtet auf den RAM der CPU, wenn ihr Offloading aktiviert, und falls ihr später auf Multi-GPU umsteigt.
00:04:01DeepSpeed ist im Grunde der „Ich weigere mich, heute kein Speicher mehr zu haben“-Knopf.
00:04:07Sobald man ZeRO und Offloading versteht, lassen sich riesige Modelle praktisch auf jeder Hardware nutzen.
00:04:14Die Einrichtung kann am Anfang definitiv verwirrend sein.
00:04:17Abonniert den Kanal, wenn euch das GPU-Zeit gespart hat oder wenn ihr solche Entwickler-Tools liebt. Bis zum nächsten Video!