PyTorch
| |
---|---|
Basisdaten
| |
Entwickler | Adam Paszke, Sam Gross, Soumith Chintala, Gregory Chanan |
Erscheinungsjahr | 2016 |
Aktuelle Version | 2.5.0[1] (17. Oktober 2024) |
Betriebssystem | Linux, MacOS, Windows |
Programmiersprache | Python, C, CUDA |
Lizenz | Open Source |
pytorch.org |
PyTorch ist eine auf Maschinelles Lernen ausgerichtete Open-Source-Programmbibliothek für die Programmiersprache Python, basierend auf der in Lua geschriebenen Bibliothek Torch, die bereits seit 2002 existiert.[2][3][4] Entwickelt wurde PyTorch vom Facebook-Forschungsteam für künstliche Intelligenz.[5][6][7] Im September 2022 wurde Pytorch mittels der neugegründeten Pytorch Foundation Teil der Linux Foundation.[8]
Mit der Programmbibliothek lassen sich zum einen mit GPUs beschleunigte Tensor-Analysen erstellen und zum anderen Neuronale Netze auf Basis eines bandbasierten Autograd-Systems erstellen. Dabei lassen sich bewährte Python-Bibliotheken wie NumPy, SciPy und Cython nutzen. Beim Deep Learning zeichnet sich die Programmbibliothek durch viel Flexibilität und eine hohe Geschwindigkeit aus.[9] ONNX zum Austausch von Modellen mit anderen Programmbibliotheken wird unterstützt. TorchScript-Dokumente können durch einen Compiler in PyTorch-Modelle umgewandelt werden. TorchScript kann unabhängig von Python ausgeführt werden und ist seit der Version 1.2 in PyTorch enthalten.[10][11]
Die im Oktober 2019 erschienene 1.3-Version ermöglicht die Nutzung von PyTorch auf den mobilen Plattformen Android und iOS (PyTorch Mobile). Ein 8-Bit-Quantisierungsmodell soll ebenfalls das Deployment auf Servern und Edge-Geräten effizienter gestalten. Da die traditionelle Implementierung von Tensoren Mängel auswies, können Tensoren seit der Version 1.3 auch als Named Tensors benannt werden.[12] Mit der Version 1.4 von Januar 2020 wurde Pruning für künstliche neuronale Netze und ein paralleles Training von Modellen mit Remote Procedure Call ergänzt. Des Weiteren wurde eine Anbindung zu Java hinzugefügt.[13] Seit der Version 1.5, die Mitte April 2020 erschienen ist, wird TorchServe als Open-Source-Server für PyTorch verwendet. Neben Facebook ist dabei auch der Cloud-Anbieter Amazon Web Services (kurz: AWS) an dem Dienst beteiligt. Ebenfalls lässt sich seit der Version eine C++-Frontend-API verwenden.[14]
PyTorch setzt sich aus mehreren Bibliotheken und Plattformen zusammen, die für Maschinelles Lernen eingesetzt werden.[15] Nachfolgend eine Liste der einzelnen Elemente von PyTorch mit einer Übersicht der wichtigsten Funktionen:[16]
Wichtige Bibliotheken in PyTorch für Maschinelles Lernen sind torchvision für die Bilderkennung, torchtext für die Texterkennung und torchaudio für die Sprach- und Audioerkennung.[11]
Das folgende Programm zeigt die Funktionalität der Bibliothek anhand eines einfachen Beispiels.
import torch
dtype = torch.float
device = torch.device("cpu") # Hiermit werden alle Berechnungen auf der CPU ausgeführt
# device = torch.device("cuda:0") # Hiermit werden alle Berechnungen auf der GPU ausgeführt
# Erstellung eines Tensors und Befüllung des Tensors mit Zufallszahlen
a = torch.randn(2,3,device=device,dtype=dtype)
print(a) # Ausgabe des Tensors A
# Ausgabe: tensor([[-1.1884, 0.8498, -1.7129],
# [-0.8816, 0.1944, 0.5847]])
# Erstellung eines Tensors und Befüllung des Tensors mit Zufallszahlen
b = torch.randn(2,3,device=device,dtype=dtype)
print(b) # Ausgabe des Tensors B
# Ausgabe: tensor([[ 0.7178, -0.8453, -1.3403],
# [ 1.3262, 1.1512, -1.7070]])
print(a*b) # Ausgabe einer Multiplikation der beiden Tensoren
# Ausgabe: tensor([[-0.8530, -0.7183, 2.58],
# [-1.1692, 0.2238, -0.9981]])
print(a.sum()) # Ausgabe der Summe aller Elemente im Tensor A
# Ausgabe: tensor(-2.1540)
print(a[2,3]) # Ausgabe des Elements in der dritten Spalte der zweiten Zeile
# Ausgabe: tensor(0.5847)
print(a.min()) # Ausgabe des Minimumwertes im Tensor A
# Ausgabe: tensor(-1.7129)
PyTorch verwendet eine automatische Differenzierungsmethode. Es zeichnet Vorwärtsberechnungen auf und spielt diese dann rückwärts ab, um Gradienten zu berechnen. Diese Methode ist besonders beim Aufbau neuronaler Netze nützlich, da man hiermit differenzielle Parameterkorrekturen parallel zu einem Vorwärtsdurchlauf berechnen kann.
Torch.optim ist ein Modul, das mehrere Optimierungsalgorithmen implementiert, die beim Aufbau neuronaler Netze verwendet werden. Die meisten der am häufigsten verwendeten Methoden wurden implementiert.
Das Autograd-Modul von PyTorch erleichtert das Definieren von Berechnungsgraphen und das Arbeiten mit Gradienten, ist jedoch möglicherweise zu niedrig, um komplexe neuronale Netze zu definieren. Eine Abstraktion auf höherer Ebene für solche Anwendungen ist das nn-Modul.