PyTorch 1.13 Offiziell Veröffentlicht: CUDA-Upgrade, Integration Mehrerer Bibliotheken, M1-Chip-Unterstützung

Inhaltseinführung: Vor Kurzem hat das PyTorch-Team im offiziellen Blog die Veröffentlichung von Pytorch 1.13 angekündigt. In diesem Artikel werden die vier Highlights der neuen Version im Detail vorgestellt.
Dieser Artikel wurde zuerst auf WeChat veröffentlicht: PyTorch Developer Community
Laut der offiziellen Einführung enthält PyTorch 1.13 die stabile Version von BetterTransformer, unterstützt CUDA 10.2 und 11.3 nicht mehr und hat die Migration auf CUDA 11.6 und 11.7 abgeschlossen. Darüber hinaus bietet die Beta-Version auch Unterstützung für den Apple M1-Chip und Functorch.
Zusammenfassung der Highlights von PyTorch 1.13:
-
Der BetterTransformer-Funktionssatz unterstützt die Fastpath-Ausführung allgemeiner Transformer-Modelle während der Inferenz, ohne das Modell zu ändern. Zu den Verbesserungen gehört auch die Beschleunigung des linearen Algebra-Kernels „add+matmul“ für in Transformer-Modellen häufig verwendete Größen. Außerdem sind verschachtelte Tensoren jetzt standardmäßig aktiviert.
-
Die alten CUDA-Versionen werden nicht mehr unterstützt und die neueste von Nvidia veröffentlichte CUDA-Version wird eingeführt. Dies ermöglicht C++17-Unterstützung für PyTorch und die neuen NVIDIA Open GPU-Kernelmodule.
-
functorch wurde von einem separaten Paket in ein direktes
import functorch
Importieren Sie PyTorch zur Verwendung, ohne es separat zu installieren. -
Durch Tests werden native Builds für Macs mit M1-Chip und eine bessere PyTorch-API-Unterstützung bereitgestellt.
Stabile Funktionen
1. BetterTransformer API
Der BetterTransformer-Funktionssatz unterstützt die Fastpath-Ausführung allgemeiner Transformer-Modelle während der Inferenz, ohne das Modell zu ändern.
Als Ergänzung beschleunigt PyTorch 1.13 auch den linearen Algebra-Kernel add+matmul für die im Transformer-Modell üblicherweise verwendete Größe.
Um die Leistung von NLP-Modellen zu verbessern,BetterTransformer in PyTorch 1.13 aktiviert standardmäßig verschachtelte Tensoren. Im Hinblick auf die Kompatibilität wird eine Maskenprüfung durchgeführt, um sicherzustellen, dass eine durchgängige Maske bereitgestellt werden kann.
Die Maskenprüfung von src_key_padding_mask im Transformer Encoder kann durch Festlegen von mask_check=False deaktiviert werden. Diese Einstellung kann die Verarbeitung beschleunigen, anstatt nur eine ausgerichtete Maske bereitzustellen.
Schließlich werden bessere Fehlermeldungen bereitgestellt, um die Diagnose falscher Eingaben zu vereinfachen und bessere Diagnosemethoden für Fastpath-Ausführungsfehler bereitzustellen.
Better Transformer ist direkt in die PyTorch TorchText-Bibliothek integriert. Dadurch können TorchText-Benutzer die Geschwindigkeit und Effizienz von BetterTransformer leichter nutzen.
2. Einführung von CUDA 11.6 und 11.7, keine Unterstützung mehr für CUDA 10.2 und 11.3
CUDA 11 ist die erste CUDA-Version, die C++17 unterstützt. Das Einstellen der Unterstützung für CUDA 10.2 ist ein wichtiger Schritt zur Weiterentwicklung der PyTorch-Unterstützung für C++17 und zur Verbesserung des PyTorch-Codes durch die Eliminierung veralteter CUDA 10.2-spezifischer Anweisungen.
Durch die Zurückziehung von CUDA 11.3 und die Einführung von 11.7 ist PyTorch kompatibler mit NVIDIA Open GPU-Kernelmodulen. Ein weiteres wichtiges Highlight ist die Unterstützung für Lazy Loading.
CUDA 11.7 wird mit cuDNN 8.5.0 geliefert, das eine Reihe von Optimierungen zur Beschleunigung von Transformer-basierten Modellen, zur Reduzierung der Bibliotheksgröße um 30% und zu verschiedenen Verbesserungen an der Runtime-Fusion-Engine enthält.
Beta-Funktionen
1. Funktorch
Ähnlich wie Google JAX ist functorch eine Bibliothek in PyTorch, die zusammensetzbare Vmap- (Vektorisierung) und Autodiff-Transformationen bereitstellt. Es unterstützt erweiterte Autodiff-Anwendungsfälle, die in PyTorch schwer auszudrücken sind, darunter:
-
Modellensemblierung
-
Effiziente Berechnung von Jacobi- und Hesse-Matrizen
-
Berechnen Sie Gradienten pro Probe oder andere Mengen pro Probe
PyTorch 1.13 verfügt über eine integrierte Functorch-Bibliothek, eine separate Installation ist nicht erforderlich. Nach der Installation von PyTorch über conda oder pip können Sie es in Ihrem Programm verwenden import functorch
.
2. Integrierter Intel VTune™ Profiler und ITT
Wenn PyTorch-Benutzer die zugrunde liegenden Leistungsmetriken verwenden möchten, um die Leistung jedes Operators auf der Intel-Plattform zu analysieren,Die Zeitleiste auf Operatorebene einer PyTorch-Skriptausführung kann im Intel VTune™ Profiler visualisiert werden.
with torch.autograd.profiler.emit_itt():
for i in range(10):
torch.itt.range_push('step_{}'.format(i))
model(input)
torch.itt.range_pop()
3. NNC: Unterstützung für BF16 und Channels hinzugefügt
Durch das Hinzufügen der Unterstützung für „Channels last“ und „BF16“ in NNC wurde die Graphmodus-Inferenzleistung von TorchScript auf x86-CPUs erheblich verbessert.
Auf Intel Cooper Lake-Prozessoren können diese beiden Optimierungen die Leistung visueller Modelle mehr als verdoppeln.
Durch das vorhandene TorchScript, Channels last und BF16 Autocast API, Es können Leistungsverbesserungen erzielt werden. Wie unten gezeigt, werden die Optimierungen in NNC auf den neuen PyTorch DL Compiler TorchInductor migriert:
import torch
import torchvision.models as models
model = models.resnet50(pretrained=True)
# Convert the model to channels-last
model = model.to(memory_format=torch.channels_last)
model.eval()
data = torch.rand(1, 3, 224, 224)
# Convert the data to channels-lastdata = data.to(memory_format=torch.channels_last)
# Enable autocast to run with BF16
with torch.cpu.amp.autocast(), torch.no_grad():
# Trace the model
model = torch.jit.trace(model, torch.rand(1, 3, 224, 224))
model = torch.jit.freeze(model)
# Run the traced model
model(data)
4. Unterstützung für Apple-Geräte mit M1-Chip hinzufügen
Seit Version 1.12 arbeitet PyTorch daran, native Builds für den M1-Chip von Apple bereitzustellen. PyTorch 1.13 verbessert die entsprechende API weiter.
PyTorch 1.13 wurde auf M1 macOS 12.6-Instanzen mit allen Untermodulen außer torch.distribution getestet. Diese verbesserten Tests beheben Dinge wie die CPP-Erweiterung und die Faltungskorrektheit bei bestimmten Eingaben.
Hinweis: Diese Funktion erfordert macOS 12 oder höher für den M1-Chip und verwendet natives Python (arm64).
Prototyp-Funktionen
1. ACL-Backend-Unterstützung für AWS Graviton
PyTorch 1.13 erzielt durch die Arm Compute Library (ACL) wesentliche Verbesserungen beim CV- und NLP-Argumentieren auf aarch64-CPUs. Dadurch kann das ACL-Backend PyTorch- und Torch-XLA-Module unterstützen. Zu den Highlights gehören:
-
Aktivieren Sie mkldnn+acl als Standard-Backend für aarch64 Torch Wheel
-
Aktivieren Sie den mkldnn-Matmul-Operator für Arch64-BF16-Geräte
-
Bringen Sie die TensorFlow xla+acl-Funktionalität zu torch-xla.
2. CUDA Desinfektionsmittel
Nach der Aktivierung beginnt der Sanitizer mit der Analyse der zugrunde liegenden CUDA-Operationen, die vom PyTorch-Code des Benutzers aufgerufen werden, um Datenkonfliktfehler zu erkennen.
Hinweis: Diese Fehler werden durch nicht synchronisierten Datenzugriff von verschiedenen CUDA-Streams verursacht.
Ähnlich wie beim Thread Sanitizer wird der gefundene Fehler zusammen mit dem Stacktrace des fehlerhaften Zugriffs ausgedruckt.
Beschädigte Daten in Anwendungen für maschinelles Lernen können leicht übersehen werden und Fehler sind manchmal nicht offensichtlich. Daher ist CUDA Sanitizer, das zum Erkennen und Lokalisieren von Fehlern verwendet wird, besonders wichtig.
3. Teilweise Unterstützung für Python 3.11
Linux-Binärdateien, die Python 3.11 unterstützen, stehen über pip zum Download bereit. Bei dieser Funktion handelt es sich jedoch nur um eine Vorschauversion und Funktionen wie Distributed, Profiler, FX und JIT werden nicht vollständig unterstützt.
Von 0 bis 1, lernen Sie das offizielle PyTorch-Tutorial
OpenBayes.com hat mehrere offizielle PyTorch-Tutorials auf Chinesisch veröffentlicht, darunter unter anderem NLP, CV, DL und andere Beispiele. Du kannstBesuchen Sie die Konsole und suchen Sie nach öffentlichen Ressourcen.
Führen Sie das PyTorch-Tutorial für Chinesisch aus, klicken Sie auf das Ende des Artikels, um den Originaltext zu lesen, oder besuchen Sie den folgenden Link:
https://openbayes.com/console/public/tutorials