Ein besonderer Dank gilt Less Wright, Partner Engineer bei Meta AI, für die Überprüfung des Beitrags und seine hilfreichen Anmerkungen.
Dieser Beitrag zur Gestaltung effizienter künstlicher Intelligenz (KI) ist der zweite in der Reihe „Summer of Open Source“. Diese Serie soll eine Handvoll nützlicher Ressourcen und Weiterbildungsinhalte für Bereiche zur Verfügung stellen, in denen Open-Source-Projekte in Meta und darüber hinaus Wirkung zeigen. Begleite uns bei der Erkundung weiterer Bereiche, in denen Meta Open Source die Branche durch das Teilen von innovativen, skalierbaren Tools weiter voranbringt.
Seit seiner Erstveröffentlichung 2016 wird PyTorch in der Deep-Learning-Community weit verbreitet eingesetzt und ist heute über seine Verwendung in Produktionsszenarien zunehmend stärker in der Forschung verankert. In einer spannenden Zeit für maschinelles Lernen (ML) und künstliche Intelligenz (KI), in der kontinuierlich neuartige Methoden und Anwendungsfälle für KI-Modelle entwickelt werden, hat PyTorch nun das nächste Kapitel in seiner Geschichte erreicht: den Schritt in die neu gegründete, unabhängige PyTorch Foundation unter dem Dach der Linux Foundation. Die Foundation ist mit einem vielfältigen Vorstand ausgestattet, zu dem Vertreter von AMD, Amazon Web Services, Google Cloud, Microsoft Azure und Nvidia gehören, und der im Laufe der Zeit erweitert werden soll. Zu ihrer Mission gehört das Fördern der Akzeptanz von KI-Tools über anbieterneutrale Projekte und das öffentliche Verfügbarmachen von Open-Source-Tools, -Bibliotheken und anderen Komponenten. Der Schritt in die Foundation wird PyTorch und seiner Open-Source-Community zudem helfen, den Weg vom Prototyping zur Produktion für KI und ML zu verkürzen.
PyTorch ist ein tolles Beispiel für die Leistungsfähigkeit von Open Source. Als eines der frühen Open-Source-Frameworks für Deep Learning hat PyTorch Menschen aus diversen Fachbereichen eine Möglichkeit geboten, mit Deep Learning zu experimentieren und ihre Arbeiten in vielfältigen Bereichen anzuwenden. PyTorch unterstützt zahlreiche Projekte: von Experimenten bei Suchanwendungen über die Entwicklung autonomer Fahrzeuge bis hin zum Bodenradar. Und das sind nur einige Beispiele aus der jüngeren Zeit. Die Kombination aus einer vielseitigen Bibliothek von KI-Tools und der Open-Source-Community ermöglicht es, Technologien in großem Umfang und für viele verschiedene Anwendungen schnell zu verbessern und anzupassen.
Da KI immer breiter eingesetzt wird, werden auch die Modelle immer größer, um immer komplexere Probleme zu bewältigen. Das heißt aber auch, dass die Ressourcen, die für das Training dieser Modelle benötigt werden, substanziell zugenommen haben. Zum Glück haben viele Menschen in der Entwickler*innen-Community den Bedarf an Modellen erkannt, die weniger Ressourcen benötigen – sowohl aus praktischer als auch aus ökologischer Sicht. In diesem Beitrag beschäftigen wir uns damit, warum Quantisierung und andere Arten der Modellkomprimierung Katalysten für eine effiziente KI sein können.
In diesem Beitrag geht es vor allem um einige fortgeschrittene und erweiterte Funktionen von PyTorch. Wenn du neu bist und gerne loslegen möchtest oder wenn du dich schon gut auskennst, aber gerade eine andere Bibliothek verwendest, machst du dich am besten zunächst mit ein paar Grundlagen vertraut. Wirf einen Blick in den Anfängerleitfaden zu PyTorch, der eine Einführung in einen kompletten ML-Workflow mit dem Fashion MNIST-Datensatz beinhaltet.
Hier sind einige weitere Ressourcen, die sich PyTorch-Neulinge einmal ansehen sollten:
Es gibt viele Wege zu einer effizienteren KI. Die Codesignierung von Hardware und Software zur Optimierung für KI kann höchst effektiv sein, aber die Entwicklung maßgeschneiderter Hardware-Software-Lösungen erfordert viel Zeit und Ressourcen. Schnellere und kleinere Architekturen zu schaffen, ist ein weiterer Weg zur Effizienz, aber viele dieser Architekturen büßen im Vergleich zu größeren Modellen an Genauigkeit ein, zumindest für den Moment. Ein simplerer Ansatz beruht darauf, Wege zu finden, die Ressourcen zu reduzieren, die für Training und Pflege existierender Modelle benötigt werden. Eine Möglichkeit, die PyTorch dafür bietet, ist die Modellkomprimierung mittels Quantisierung.
Quantisierung ist eine mathematische Technik, die etwa zur Erstellung von verlustbehafteten digitalen Musikdateien und zur Konvertierung analoger in digitale Signale genutzt wird. Indem mathematische Berechnungen mit verringerter Präzision durchgeführt werden, ermöglicht die Quantisierung auf vielen Hardwareplattformen eine signifikant höhere Leistung. Warum also Quantisierung nutzen, um KI effizienter zu machen? Die Ergebnisse zeigen, dass diese relativ simple Technik in bestimmten Fällen zu drastischen Beschleunigungen (2- bis 4-fach) bei der Modellinferenz führen kann.
Die Parameter, aus denen ein Deep-Learning-Modell gebildet ist, sind in der Regel Dezimalzahlen mit Gleitkommagenauigkeit, wobei jeder Parameter entweder 16 oder 32 Bits Speicher benötigt. Bei Verwendung von Quantisierung werden Zahlen häufig in INT4 oder INT8 konvertiert, wodurch nur 4 oder 8 Bits besetzt werden. Dadurch wird der Speicherbedarf von Modellen verringert. Außerdem setzen die Chiphersteller eine spezielle Arithmetik ein, die Rechenvorgänge mit Ganzzahlen schneller macht als solche mit Dezimalzahlen.
Es gibt 3 Quantisierungsmethoden, die für Trainingsmodelle genutzt werden können: dynamisch, statisch und quantisierungsbewusstes Training (Quantize-Aware Training, QAT). Die untenstehende Tabelle enthält eine kurze Übersicht der jeweiligen Vorteile und Schwachstellen. Lies den Blogbeitrag Praktische Quantisierung in PyTorch, um zu erfahren, wie du sie alle in deine KI-Workflows integrieren kannst.
Quantisierungsmethode | Vorteile | Schwachstellen |
---|---|---|
| Zusätzlicher Overhead bei jeder Weiterleitung | |
| Erfordert gegebenenfalls regelmäßige Rekalibrierung gegen Distribution Drift | |
Quantize-Aware Training (QAT) |
| Hohe Rechenkosten |
Quantisierung ist nicht die einzige Methode, PyTorch-gestützte KI effizienter zu machen. Es gibt regelmäßige Funktionsupdates und unten findest du ein paar weitere Wege, wie PyTorch KI-Workflows verbessern kann:
Inferenzmodus: Dieser Modus kann zum Schreiben von PyTorch-Code verwendet werden, wenn du den Code nur für die Inferenz nutzt. Im Inferenzmodus sind einige der Annahmen beim Arbeiten mit Tensoren abgeändert, um die Inferenz zu beschleunigen. Wenn du PyTorch sagst, dass du später für bestimmte Anwendungen keine Tensoren nutzen wirst (in diesem Fall autograd), nimmt es Anpassungen vor, damit der Code in diesen spezifischen Szenarien schneller läuft.
Niedrige Genauigkeit: Quantisierung funktioniert nur zum Zeitpunkt der Inferenz, also nachdem du dein Modell trainiert hast. Für den Trainingsprozess selbst verwendet PyTorch AMP (Automatic Mixed Precision Training), um das beste Format abhängig von den verwendeten Tensoren zu ermitteln (FP16, FP32 oder BF16). Deep Learning mit niedriger Genauigkeit in PyTorch bietet mehrere Vorteile. Es kann dabei helfen, die Modellgröße, den Speicherbedarf für das Modelltraining sowie den Strombedarf für den Modellbetrieb zu reduzieren. Mehr dazu erfährst du in diesem Tutorial zur Verwendung von AMP mit CUDA-fähigen GPUs.
Channels Last: Wenn es um Vision-Modelle geht, ist NHWC, auch bekannt als Channels Last, ein schnelleres Tensor-Speicherformat in PyTorch. Daten im Channels-Last-Format zu speichern, beschleunigt die Vorgänge in PyTorch. Das Formatieren von Input-Tensoren als Channels Last reduziert den Overhead, der für die Konvertierung zwischen verschiedenen Formattypen erforderlich ist. Das führt zu einer beschleunigten Inferenz.
Für Inferenz optimieren: Dieser TorchScript-Prototyp implementiert einige generische Optimierungen, die Modelle in allen Umgebungen beschleunigen sollten, und kann außerdem Modelle mit build-spezifischen Einstellungen für die Inferenz vorbereiten. Zu den primären Anwendungsfällen zählen aktuell Vision-Modelle auf CPUs (und GPUs). Da es sich hier um einen Prototyp handelt, stößt du möglicherweise auf Probleme. Diese kannst du im PyTorch GitHub-Repository melden.
Im PyTorch-Blog werden regelmäßig neuartige Methoden zur Beschleunigung von KI-Workflows vorgestellt. So bleibst du technisch immer auf dem neuesten Stand. Kürzlich ging es zum Beispiel um BetterTransformer, wodurch Speedup und Durchsatz bei Transformer-Modellen in gängigen Ausführungsszenarien um bis zu das 2-fache gesteigert werden können. Wenn du daran interessiert bist, wie bestimmte Funktionen in PyTorch implementiert werden, findest du auf der Rezepteseite eine Suche, in der du nach Kategorien wie Modelloptimierung, Verteiltes Training und Interpretierbarkeit filtern kannst. Dieser Beitrag bietet nur einen kleinen Vorgeschmack darauf, auf welche Weise Tools wie PyTorch Open Source und KI voranbringen.
Um dich auf dem Laufenden zu halten, was künstliche Intelligenz und maschinelles Lernen bei Meta Open Source betrifft, besuche unsere Open-Source-Seite, abonniere unseren YouTube-Kanal oder folge uns auf Facebook, Twitter und LinkedIn.