Am 2. Dezember wurde PyTorch 2.0 offiziell veröffentlicht!
Dieses Update bringt nicht nur die Leistung von PyTorch auf ein neues Niveau, sondern bietet auch Unterstützung für dynamische Formen und Verteilung.
Darüber hinaus wird die 2.0-Serie auch einen Teil des PyTorch-Codes von C++ zurück nach Python verschieben.
Derzeit befindet sich PyTorch 2.0 noch in der Testphase und die erste stabile Version wird voraussichtlich Anfang März 2023 verfügbar sein.
In den letzten Jahren hat PyTorch Innovationen und Iterationen von 1.0 bis zur aktuellen Version 1.13 vorgenommen und ist zur neu gegründeten PyTorch Foundation gewechselt, um Teil der Linux Foundation zu werden.
Die Herausforderung bei der aktuellen Version von PyTorch besteht darin, dass der Eager-Modus Schwierigkeiten hat, mit der ständig wachsenden GPU-Bandbreite und verrückteren Modellarchitekturen Schritt zu halten.
Die Geburt von PyTorch 2.0 wird die Art und Weise, wie PyTorch auf Compiler-Ebene ausgeführt wird, grundlegend verändern und verbessern.
Wie wir alle wissen, stammt (Py) in PyTorch von der Open-Source-Programmiersprache Python, die in der Datenwissenschaft weit verbreitet ist.
Der Code von PyTorch verwendet jedoch nicht vollständig Python, sondern gibt einen Teil davon an C++ weiter.
In der zukünftigen 2.x-Serie plant das PyTorch-Projektteam jedoch, den Code für Torch.nn zurück nach Python zu verschieben.
Da es sich bei PyTorch 2.0 darüber hinaus um eine vollständig ergänzende (und optionale) Funktion handelt, ist 2.0 zu 100 % abwärtskompatibel.
Mit anderen Worten, die Codebasis ist dieselbe, die API ist dieselbe und die Art und Weise, Modelle zu schreiben, ist dieselbe. Mehr technischer Support
PrimTorch
TorchInductor
Es ist erwähnenswert, dass TorchDynamo, AOTAutograd, PrimTorch und TorchInductor alle in Python geschrieben sind und dynamische Formen unterstützen.
Durch die Einführung eines neuen Kompilierungsmodus „torch.compile“ kann PyTorch 2.0 das Modelltraining mit nur einer Codezeile beschleunigen.
Hier sind keine Tricks erforderlich, führen Sie einfach Torch.compile() aus und fertig:
opt_module = torch.compile(module)
Um diese Technologien zu verifizieren, erstellte das Team sorgfältig Testbenchmarks, einschließlich Bildklassifizierung, Objekterkennung, Bildgenerierung und anderer Aufgaben sowie verschiedener NLP-Aufgaben, wie z. B. Sprachmodellierung und Beantwortung von Fragen , Sequenzklassifizierung, Empfehlungssysteme und verstärkendes Lernen. Darunter lassen sich diese Benchmarks in drei Kategorien einteilen:
Die Testergebnisse zeigen, dass bei diesen 163 Open-Source-Modellen aus den Bereichen Vision, NLP und anderen Bereichen die Trainingsgeschwindigkeit um 38–76 % verbessert wurde.
Vergleich zur NVIDIA A100 GPU#🎜🎜 ## 🎜🎜#
Darüber hinaus führte das Team auch Benchmark-Tests mit einigen beliebten Open-Source-PyTorch-Modellen durch und erzielte erhebliche Geschwindigkeitssteigerungen von 30 % auf das Zweifache.Entwickler Sylvain Gugger sagte: „Mit nur einer Codezeile kann PyTorch 2.0 beim Training von Transformers-Modellen eine 1,5- bis 2,0-fache Beschleunigung erzielen. Das ist das Spannendste.“ Sache seit dem Aufkommen des gemischten Präzisionstrainings!
Das Bild aufnehmen
Das Bild zusammenstellen
# 🎜🎜#Unter anderem ist das Erhalten des Diagramms eine schwierigere Herausforderung beim Erstellen des PyTorch-Compilers.Am Anfang davon Jahr begann das Team mit der Arbeit an TorchDynamo, einem Ansatz, der eine in PEP-0523 eingeführte CPython-Funktion namens Framework Evaluation API verwendet.
Zu diesem Zweck wählte das Team einen datengesteuerten Ansatz, um die Wirksamkeit von TorchDynamo bei der Diagrammerfassung zu überprüfen – indem es mehr als 7.000 Github-Projekte verwendete, die in PyTorch-Projekt als geschrieben wurden ein Validierungssatz.TorchInductor
Für das neue Compiler-Backend von PyTorch 2.0 ging das Team davon aus, wie Benutzer schreiben können Hochleistung Inspiriert von benutzerdefinierten Kerneln: die zunehmende Verwendung der Triton-Sprache.
TorchInductor verwendet Pythonic-definierte Loop-by-Loop-Level-IR, um PyTorch-Modelle automatisch generiertem Triton-Code auf der GPU und C++/OpenMP auf der CPU zuzuordnen.
AOTAutograd
Um das Training zu beschleunigen, müssen Sie nicht nur Code auf Benutzerebene erfassen, sondern auch Backpropagation .
AOTAutograd kann den Erweiterungsmechanismus „torch_dispatch“ von PyTorch verwenden, um die Autograd-Engine zu verfolgen, die Rückausbreitung „im Voraus“ zu erfassen und dann TorchInductor zum Beschleunigen der Vorwärts- und Rückwärtskanäle zu verwenden.
PyTorch hat mehr als 1200 Operatoren. Es gibt mehr als 2.000 Überladungen. Daher wird das Schreiben von Back-End- oder domänenübergreifenden Funktionen zu einer energieaufwändigen Aufgabe.
Im PrimTorch-Projekt definierte das Team zwei kleinere und stabilere Operatorsätze:
Bei der Betrachtung dessen, was zur Unterstützung der Allgemeingültigkeit im PyTorch-Code erforderlich ist, bestand eine wichtige Anforderung darin, dynamische Formen zu unterstützen und es dem Modell zu ermöglichen, Tensoren unterschiedlicher Größe zu akzeptieren, ohne die Form bei jeder Änderung zu ändern eine Neukompilierung verursachen.
Wenn dynamische Formen nicht unterstützt werden, besteht eine übliche Problemumgehung darin, sie auf die nächste Potenz von 2 aufzufüllen. Wie wir jedoch aus der folgenden Tabelle ersehen können, verursacht es einen erheblichen Leistungsaufwand und führt auch zu deutlich längeren Kompilierungszeiten.
Mit der Unterstützung dynamischer Formen hat PyTorch 2.0 jetzt eine bis zu 40 % höhere Leistung als Eager erreicht.
Abschließend hofft das Team in der Roadmap für PyTorch 2.x, das Kompilierungsmodell hinsichtlich Leistung und Skalierbarkeit weiter voranzutreiben.
Das obige ist der detaillierte Inhalt vonEine Codezeile, Elixiere doppelt so schnell herstellen! PyTorch 2.0 kommt überraschend heraus, LeCun leitet es begeistert weiter. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!