PyTorch ist eine Open-Source-Machine-Learning-Bibliothek, die ursprünglich vom KI-Forschungslabor von Facebook entwickelt und erstmals 2016 veröffentlicht wurde. Sie ist der Nachfolger des Torch-Frameworks und bietet eine hochrangige Anwendungsprogrammierschnittstelle, die auf optimierten Implementierungen von Deep-Learning-Algorithmen auf niedriger Ebene aufbaut. Stand 2025 bleibt PyTorch eine der am weitesten verbreiteten Bibliotheken für künstliche Intelligenz-Forschung und -Produktion, neben Frameworks wie TensorFlow und Keras. Die Bibliothek wird seit September 2022 von der PyTorch Foundation, einer Tochtergesellschaft der Linux Foundation, verwaltet.
Geschichte
Die Ursprünge von PyTorch reichen bis zu Torch zurück, einer Machine-Learning-Bibliothek, die in C und Lua geschrieben wurde und 2001 vom Idiap Research Institute unter einer GNU General Public License veröffentlicht wurde. Um 2010 schrieben Forscher, darunter Ronan Collobert, Clement Farabet und Koray Kavukcuoglu, die Bibliothek als Torch7 neu, wobei sie das C-Backend vom Lua-Frontend trennten. Mitte 2016 refaktorierten Entwickler bei Facebook Torch7, um Frontend und Backend weiter zu entkoppeln, wobei sie Einflüsse aus der Autograd-Bibliothek und dem Chainer-Framework aufnahmen. Diese Arbeit führte zur Schaffung von PyTorch, das 2016 als Open-Source-Projekt veröffentlicht wurde. Die Entwicklung von Torch7 endete 2018, und seine Funktionalität wurde in PyTorch übernommen.
Im September 2017 starteten Meta und Microsoft das Open Neural Network Exchange (ONNX)-Projekt, um Interoperabilität zwischen Deep-Learning-Frameworks zu ermöglichen. ONNX erlaubt es, Modelle zwischen Frameworks zu konvertieren und für verschiedene Ausführungsanbieter zu optimieren, wie NVIDIA's TensorRT. Im März 2018 wurde Caffe2 in PyTorch integriert, wodurch Metas Deep-Learning-Bemühungen konsolidiert wurden. Die PyTorch-2.0-Version vom 15. März 2023 führte TorchDynamo ein, einen Compiler auf Python-Ebene, der die Codeausführung um bis zu zwei Mal beschleunigt, zusammen mit erheblichen Verbesserungen der Trainings- und Inferenzleistung auf großen Cloud-Plattformen.
Kernfunktionen
PyTorch ist um die Tensor-Datenstruktur herum aufgebaut, die ein homogenes mehrdimensionales Array ähnlich NumPy-Arrays ist. Tensoren können von zentralen Verarbeitungseinheiten (CPUs) oder Grafikverarbeitungseinheiten (GPUs) betrieben werden, mit Unterstützung für CUDA auf NVIDIA-Hardware, sowie AMD's ROCm und Apple's Metal-Framework. Das automatische Differenzierungssystem der Bibliothek, genannt Autograd, zeichnet Operationen auf Tensoren auf, um während des Vorwärtsdurchgangs einen gerichteten azyklischen Graphen (DAG) zu konstruieren. Wenn ein Verlust berechnet wird, durchläuft die Rückpropagierung diesen Graphen, um Gradienten zu berechnen, die zur Aktualisierung der Modellparameter verwendet werden.
Das torch.nn-Modul bietet eine umfassende Sammlung von Bausteinen für neuronale Netze, einschließlich verschiedener Schichttypen, Aktivierungsfunktionen und Verlustfunktionen. Modelle werden typischerweise definiert, indem man torch.nn.Module unterklassifiziert und die forward-Methode implementiert. Dieses modulare Design ermöglicht die flexible Konstruktion komplexer Architekturen, von einfachen Feedforward-Netzen bis zu transformerbasierten Modellen.
Modellserialisierung
PyTorch-Modelle können mit ihrem nativen Serialisierungsformat gespeichert und geladen werden, das ein ZIP64-Archiv ist, das die Modellgewichte in einer Python-Pickle-Datei enthält, zusammen mit Metadaten wie Byte-Reihenfolge. Die Dateierweiterungen .pt und .pth werden häufig für diese Dateien verwendet. Dieses Format ermöglicht das einfache Teilen und Bereitstellen trainierter Modelle in verschiedenen Umgebungen.
Beispiel
Der folgende Code demonstriert die Funktionalität von PyTorch auf niedriger Ebene. Er definiert ein einfaches neuronales Netz mit linearen Schichten unter Verwendung des torch.nn-Moduls und führt einen Vorwärtsdurchgang durch.
import torch
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self):
super(SimpleNet, self).__init__()
self.fc1 = nn.Linear(10, 5)
self.fc2 = nn.Linear(5, 1)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
model = SimpleNet()
input_tensor = torch.randn(3, 10)
output = model(input_tensor)
print(output)Siehe auch
- Vergleich von Deep-Learning-Software
- Vergleich von Machine-Learning-Software
- Differenzierbare Programmierung
- DeepSpeed
- Open-Source-Künstliche Intelligenz
- PyTorch Lightning
Referenzen
- PyTorch-Dokumentation. Verfügbar unter: https://pytorch.org/docs/stable/index.html
- PyTorch-GitHub-Repository. Verfügbar unter: https://github.com/pytorch/pytorch
- Paszke, A. et al. (2019). PyTorch: An Imperative Style, High-Performance Deep Learning Library. In Advances in Neural Information Processing Systems 32.