PyTorch-Einführung
PyTorch ist eine quelloffene Python-Bibliothek für maschinelles Lernen, die auf der Torch-Bibliothek basiert, auf der untersten Ebene in C++ implementiert ist und in Bereichen der künstlichen Intelligenz wie Computer Vision und Verarbeitung natürlicher Sprache eingesetzt wird.
PyTorch wurde ursprünglich vom KI-Forschungsteam von Meta Platforms entwickelt und ist heute Teil der Linux Foundation.
Viele Deep-Learning-Softwarepakete bauen auf PyTorch auf, darunter Tesla Autopilot, Pyro von Uber, Transformers von Hugging Face, PyTorch Lightning und Catalyst.
PyTorch hat zwei Hauptmerkmale:
- Tensorberechnung ähnlich wie NumPy, die auf Hardwarebeschleunigern wie GPU oder MPS beschleunigt werden kann.
- Tiefe neuronale Netzwerke auf Basis eines automatischen Differenzierungssystems.
PyTorch enthält Untermodule wie torch.autograd, torch.nn und torch.optim.
PyTorch enthält eine Vielzahl von Verlustfunktionen, darunter MSE (mittlerer quadratischer Fehler = L2-Norm), Kreuzentropieverlust und negativer Log-Likelihood-Verlust (nützlich für Klassifikatoren), unter anderem.

PyTorch-Merkmale
-
Dynamische Berechnungsgraphen: Die Berechnungsgraphen von PyTorch sind dynamisch, das heißt, sie werden zur Laufzeit erstellt und können jederzeit geändert werden. Dies bietet große Flexibilität für Experimente und das Debugging, da Entwickler Code Zeile für Zeile ausführen und Zwischenergebnisse inspizieren können.
-
Automatische Differenzierung: Das automatische Differenzierungssystem von PyTorch ermöglicht Entwicklern die einfache Berechnung von Gradienten, was für das Training von Deep-Learning-Modellen entscheidend ist. Es berechnet automatisch die Gradienten der Verlustfunktion in Bezug auf die Modellparameter mithilfe des Backpropagation-Algorithmus.
-
Tensorberechnung: PyTorch bietet Tensoroperationen ähnlich wie NumPy, die auf CPU und GPU ausgeführt werden können, wodurch der Berechnungsprozess beschleunigt wird. Tensoren sind die grundlegende Datenstruktur in PyTorch, die zum Speichern und Bearbeiten von Daten verwendet wird.
-
Umfangreiche API: PyTorch bietet eine große Anzahl vordefinierter Schichten, Verlustfunktionen und Optimierungsalgorithmen, die alle gängige Komponenten zum Erstellen von Deep-Learning-Modellen sind.
-
Unterstützung mehrerer Sprachen: Obwohl PyTorch Python als Hauptschnittstelle verwendet, bietet es auch eine C++-Schnittstelle, die eine Integration und Kontrolle auf niedrigerer Ebene ermöglicht.
Dynamischer Berechnungsgraph
Eine der bemerkenswertesten Eigenschaften von PyTorch ist sein Mechanismus des dynamischen Berechnungsgraphen.
Im Gegensatz zu TensorFlows statischem Berechnungsgraphen erstellt PyTorch den Berechnungsgraphen während der Ausführung, was bedeutet, dass sich der Graph bei jeder Berechnung automatisch an die Form der Eingabedaten anpasst.
Vorteile des dynamischen Berechnungsgraphen:
- Flexibler, besonders geeignet für Szenarien, die bedingte Entscheidungen oder Rekursion erfordern.
- Praktisch für Debugging und Änderungen, da Zwischenergebnisse direkt eingesehen werden können.
- Näher am Python-Programmierstil und einfach zu erlernen.
Tensor und Autograd
Die zentrale Datenstruktur in PyTorch ist derTensor, eine mehrdimensionale Matrix, die Berechnungen auf CPU oder GPU effizient ausführen kann. Tensor-Operationen unterstützen den Autograd-Mechanismus, der automatische Gradientenberechnung während der Backpropagation ermöglicht, was für Gradientenabstiegs-Optimierungsalgorithmen im Deep Learning entscheidend ist.
Tensor:
- Unterstützt das Umschalten zwischen CPU und GPU.
- Bietet eine NumPy-ähnliche Schnittstelle und unterstützt elementweise Operationen.
- Unterstützt automatische Differenzierung, wodurch die Gradientenberechnung bequem wird.
Autograd:
- Die in PyTorch integrierte Engine für automatische Differenzierung kann alle Tensor-Operationen automatisch verfolgen und während der Backpropagation Gradienten berechnen.
- Durch
requires_grad-Attribut können Sie angeben, dass ein Tensor Gradientenberechnung erfordert. - Unterstützt effiziente Backpropagation, geeignet für das Training neuronaler Netzwerke.
Modelldefinition und Training
PyTorch bietettorch.nnModul, das Benutzern das Erben ermöglichtnn.ModuleKlasse zum Definieren neuronaler Netzwerkmodelle. Verwenden SieforwardFunktion zur Angabe der Vorwärtspropagation; automatische Backpropagation (durchautograd) und Gradientenberechnung werden ebenfalls intern von PyTorch übernommen.
Neuronales Netzwerkmodul (torch.nn):
- Bietet häufig verwendete Schichten (wie lineare Schichten, Faltungsschichten, Pooling-Schichten usw.).
- Unterstützt die Definition komplexer neuronaler Netzwerkarchitekturen (einschließlich Netzwerken mit mehreren Eingaben und Ausgaben).
- Kompatibel mit Optimierern (wie z. B.
torch.optim) zur gemeinsamen Verwendung.
GPU-Beschleunigung
PyTorch unterstützt vollständig die Ausführung auf der GPU, um das Training von Deep-Learning-Modellen zu beschleunigen. Durch eine einfache.to(device)Methode können Benutzer Modelle und Tensoren zur Berechnung auf die GPU übertragen. PyTorch unterstützt Multi-GPU-Training und kann die NVIDIA-CUDA-Technologie nutzen, um die Recheneffizienz erheblich zu verbessern.
GPU-Unterstützung:
- Wählt automatisch GPU oder CPU aus.
- Unterstützt die Beschleunigung durch CUDA.
- Unterstützt Multi-GPU-Parallelrechnen (
DataParallelodertorch.distributed)。
Ökosystem- und Community-Unterstützung
Als Open-Source-Projekt verfügt PyTorch über eine große Community und ein großes Ökosystem. Es wird nicht nur in der akademischen Welt breit genutzt, sondern auch in der Industrie umfassend eingesetzt, insbesondere in Bereichen wie Computer Vision und Verarbeitung natürlicher Sprache. PyTorch bietet außerdem viele Tools und Bibliotheken für Deep Learning, wie zum Beispiel:
- torchvision: Datensätze und Modelle für Computer-Vision-Aufgaben.
- torchtext: Datensätze und Vorverarbeitungswerkzeuge für Aufgaben der Verarbeitung natürlicher Sprache.
- torchaudio: ein Toolkit für die Audioverarbeitung.
- PyTorch Lightning: eine High-Level-Bibliothek, die PyTorch-Code vereinfacht und den Fokus auf schnelle Iteration in Forschung und Experimenten legt.
Vergleich mit anderen Frameworks
Aufgrund seiner Flexibilität, Benutzerfreundlichkeit und Community-Unterstützung ist PyTorch zum bevorzugten Framework für viele Deep-Learning-Forscher und -Entwickler geworden.
TensorFlow vs PyTorch
- Der dynamische Berechnungsgraph von PyTorch macht es flexibler und besser geeignet für schnelle Experimente und Forschung, während der statische Berechnungsgraph von TensorFlow mehr Spielraum für Optimierungen in Produktionsumgebungen bietet.
- PyTorch ist bequemer zum Debuggen, während TensorFlow bei der Bereitstellung ausgereifter ist und eine breitere Palette an Hardware und Plattformen unterstützt.
- In den letzten Jahren hat TensorFlow auch dynamische Berechnungsgraphen eingeführt (wie TensorFlow 2.x), wodurch sich die beiden in ihrer Funktionalität zunehmend annähern.
- Andere Deep-Learning-Frameworks wie Keras und Caffe haben ebenfalls gewisse Anwendungen, aber aufgrund seiner Flexibilität, Benutzerfreundlichkeit und Community-Unterstützung ist PyTorch zum bevorzugten Framework für viele Deep-Learning-Forscher und -Entwickler geworden.
| Merkmal | TensorFlow | PyTorch |
|---|---|---|
| Developer | Facebook (FAIR) | |
| Typ des Berechnungsgraphen | Statischer Berechnungsgraph (wird vor der Ausführung definiert) | Dynamischer Berechnungsgraph (wird bei der Definition ausgeführt) |
| Flexibilität | Niedrig (Berechnungsgraph wird zur Kompilierzeit erstellt und ist nicht einfach zu ändern) | Hoch (Berechnungsgraph wird zur Ausführungszeit dynamisch erstellt, einfach zu ändern und zu debuggen) |
| Debugging | Schwierig (erfordert die Verwendung vontf.debuggingoder externen Tools zum Debuggen) | Einfach (direktes Debuggen in Python möglich) |
| Benutzerfreundlichkeit | Gering (komplexer, mehr APIs, steilere Lernkurve) | Hoch (prägnante API, Syntax näher an Python, einfacher Einstieg) |
| Bereitstellung | Stark (unterstützt eine breite Palette an Hardware, wie TensorFlow Lite und TensorFlow.js) | Schwächer (relativ wenige Deployment-Tools und Plattformen, obwohl TensorFlow-Unterstützung vorhanden ist) |
| Community-Unterstützung | Sehr stark (ausgereifte und große Community, umfangreiche Tutorials und Dokumentation) | Sehr stark (aktive Community, besonders in der Wissenschaft, sich schnell entwickelndes Ökosystem) |
| Modelltraining | Unterstützt verteiltes Training und mehrere Geräte (wie CPU, GPU, TPU) | Unterstützt verteiltes Training, Multi-GPU, CPU und TPU |
| API-Level | High-Level-API: Keras; Low-Level-API: TensorFlow Core | High-Level-APIs: TorchVision, TorchText usw.; Low-Level-API: Torch |
| Leistung | Hoch (ausgereift in der Optimierung, geeignet für Produktionsumgebungen) | Hoch (geeignet für Forschung und Prototyping, auch die Produktionsleistung verbessert sich) |
| Automatische Differenzierung | Unterstützttf.GradientTapeImplementiert dynamische Differenzierung (komplexer) | UnterstütztautogradDynamische Differenzierung (prägnanter und intuitiver) |
| Tuning und Skalierbarkeit | Stark (unterstützt die Ausführung auf mehreren Plattformen, z. B. TensorFlow Serving usw.) | Schwächer (obwohl es in akademischen und experimentellen Umgebungen hervorsticht, ist die Unterstützung für Produktionsumgebungen relativ begrenzt) |
| Framework-Flexibilität | Geringer (TensorFlow 2.x führte dynamische Graph-Funktionen ein, ist aber immer noch nicht vollständig flexibel) | Hoch (dynamischer Graph bringt höhere Flexibilität) |
| Unterstützt mehrere Sprachen | Unterstützt mehrere Sprachen (Python, C++, Java, JavaScript usw.) | Unterstützt hauptsächlich Python (bietet aber auch eine C++-API) |
| Kompatibilität und Migration | TensorFlow 2.x ist gut mit älteren Versionen kompatibel | Geringe Kompatibilität mit TensorFlow, Migration ist schwierig |
PyTorch vs NumPy
| Funktionen | PyTorch | NumPy |
|---|---|---|
| Ziel | Auf Deep Learning spezialisiert | Allgemeines wissenschaftliches Rechnen |
| GPU-Unterstützung | Unterstützt CUDA nativ | Nicht direkt unterstützt |
| Automatische Differenzierung | Integrierte automatische Differenzierung | Erfordert manuelle Gradientenberechnung |
| Neuronale Netze | Reichhaltige Sammlung von Modulen für neuronale Netze | Muss von Grund auf selbst implementiert werden |
| Lernaufwand | Relativ hoch | Relativ gering |
Geschichte und Entwicklung von PyTorch
Der Vorgänger von PyTorch war Torch, ein auf der Sprache Lua basierendes Framework für wissenschaftliches Rechnen. Mit der wachsenden Beliebtheit von Python im maschinellen Lernen beschloss das Facebook-Team, die Kernideen von Torch nach Python zu portieren, was zur Entstehung von PyTorch führte.
- 2016: PyTorch Version 0.1 veröffentlicht
- 2017: PyTorch 0.2 führte Unterstützung für verteiltes Training ein
- 2018: PyTorch 1.0 wurde veröffentlicht und fügte Funktionen für die Produktionsbereitstellung hinzu
- 2019: PyTorch 1.3 führte Unterstützung für Mobilgeräte ein
- 2020: PyTorch 1.6 fügte automatisches Mixed-Precision-Training hinzu
- 2021: PyTorch 1.9 führte TorchScript und das C++-Frontend ein
- 2022: PyTorch 1.12 optimierte Leistung und Stabilität
- 2023: PyTorch 2.0 wurde veröffentlicht und führte einen Kompilierungsmodus ein, der die Leistung erheblich verbessert