Heim  >  Artikel  >  Technologie-Peripheriegeräte  >  Eine Codezeile, Elixiere doppelt so schnell herstellen! PyTorch 2.0 kommt überraschend heraus, LeCun leitet es begeistert weiter

Eine Codezeile, Elixiere doppelt so schnell herstellen! PyTorch 2.0 kommt überraschend heraus, LeCun leitet es begeistert weiter

王林
王林nach vorne
2023-04-13 08:49:021404Durchsuche

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.

Eine Codezeile, Elixiere doppelt so schnell herstellen! PyTorch 2.0 kommt überraschend heraus, LeCun leitet es begeistert weiter

Derzeit befindet sich PyTorch 2.0 noch in der Testphase und die erste stabile Version wird voraussichtlich Anfang März 2023 verfügbar sein.

Eine Codezeile, Elixiere doppelt so schnell herstellen! PyTorch 2.0 kommt überraschend heraus, LeCun leitet es begeistert weiter

PyTorch 2.x: Schneller, pythonischer!

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.

Eine Codezeile, Elixiere doppelt so schnell herstellen! PyTorch 2.0 kommt überraschend heraus, LeCun leitet es begeistert weiter

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

AOTAutograd

  • überlastet die Autograd-Engine von PyTorch als Trace-Autodiff zum Generieren eines Lookahead-Backtrace.

PrimTorch

  • fasst mehr als 2000 PyTorch-Operatoren in einem geschlossenen Satz von etwa 250 primitiven Operatoren zusammen, anhand derer Entwickler ein vollständiges PyTorch-Backend erstellen können. Die Hürde beim Schreiben von PyTorch-Funktionalität oder Backends wird erheblich gesenkt.

TorchInductor

  • Ein Deep-Learning-Compiler, der schnellen Code für mehrere Beschleuniger und Backends generieren kann. Für Nvidias GPUs nutzt es OpenAI Triton als Schlüsselbaustein.

Es ist erwähnenswert, dass TorchDynamo, AOTAutograd, PrimTorch und TorchInductor alle in Python geschrieben sind und dynamische Formen unterstützen.

  • Schnellere Trainingsgeschwindigkeit

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:

  • 46 Modelle von HuggingFace Transformers
  • 61 Modelle von TIMM: Ross Wightman Collection of hochmoderne PyTorch-Bildmodelle
  • 56 Modelle von TorchBench: eine Reihe beliebter Codebibliotheken von Github

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.

Eine Codezeile, Elixiere doppelt so schnell herstellen! PyTorch 2.0 kommt überraschend heraus, LeCun leitet es begeistert weiter

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 verkleinern

Das Bild zusammenstellen

# 🎜🎜#Unter anderem ist das Erhalten des Diagramms eine schwierigere Herausforderung beim Erstellen des PyTorch-Compilers.
  • TorchDynamo

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.

Eine Codezeile, Elixiere doppelt so schnell herstellen! PyTorch 2.0 kommt überraschend heraus, LeCun leitet es begeistert weiter

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.

Die Ergebnisse zeigen, dass TorchDynamo die Diagrammerfassung in 99 % der Fälle korrekt und sicher durchführen kann, mit vernachlässigbarem Overhead.

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.

TorchInductors Kern-IR auf Schleifenebene enthält nur etwa 50 Operatoren und ist in Python implementiert, was eine einfache Erweiterung ermöglicht.

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.

PrimTorch

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:

  • Prim ops verfügt über etwa 250 Operatoren, die für Compiler geeignet sind. Da sie niedrig genug sind, müssen sie nur zusammengeführt werden, um eine gute Leistung zu erzielen.
  • ATen ops verfügt über etwa 750 typische Operatoren, die für die Ausgabe im Ist-Zustand geeignet sind. Diese eignen sich für Backends, die bereits auf ATen-Ebene integriert oder nicht kompiliert sind, und stellen so die Leistung von Low-Level-Operator-Sets wie Prim Ops wieder her.

Eine Codezeile, Elixiere doppelt so schnell herstellen! PyTorch 2.0 kommt überraschend heraus, LeCun leitet es begeistert weiter

Dynamische Formen

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.

Eine Codezeile, Elixiere doppelt so schnell herstellen! PyTorch 2.0 kommt überraschend heraus, LeCun leitet es begeistert weiter

Abschließend hofft das Team in der Roadmap für PyTorch 2.x, das Kompilierungsmodell hinsichtlich Leistung und Skalierbarkeit weiter voranzutreiben.

Eine Codezeile, Elixiere doppelt so schnell herstellen! PyTorch 2.0 kommt überraschend heraus, LeCun leitet es begeistert weiter

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen