PyTorch ist ein Python-Paket, das zwei High-Level-Funktionen bietet:
Sie können Ihre bevorzugten Python-Pakete wie NumPy, SciPy und Cython wiederverwenden, um PyTorch bei Bedarf zu erweitern.
Unsere Trunk-Gesundheit (kontinuierliche Integrationssignale) finden Sie unter hud.pytorch.org.
Lernen Sie die Grundlagen von PyTorch
Auf granularer Ebene ist PyTorch eine Bibliothek, die aus den folgenden Komponenten besteht:
Komponente | Beschreibung |
---|---|
Fackel | Eine Tensor-Bibliothek wie NumPy mit starker GPU-Unterstützung |
Torch.autograd | Eine bandbasierte automatische Differenzierungsbibliothek, die alle differenzierbaren Tensor-Operationen in Torch unterstützt |
Torch.jit | Ein Kompilierungsstapel (TorchScript) zum Erstellen serialisierbarer und optimierbarer Modelle aus PyTorch-Code |
Fackel.nn | Eine Bibliothek für neuronale Netze, die tief in Autograd integriert ist und für maximale Flexibilität ausgelegt ist |
Taschenlampe.Mehrverarbeitung | Python-Mehrverarbeitung, aber mit magischer Speicherfreigabe von Fackeltensoren über Prozesse hinweg. Nützlich zum Laden von Daten und zum Hogwild-Training |
Torch.utils | DataLoader und andere Hilfsfunktionen zur Vereinfachung |
Normalerweise wird PyTorch entweder verwendet als:
Weitere Erläuterung:
Wenn Sie NumPy verwenden, haben Sie Tensoren (auch bekannt als ndarray) verwendet.
PyTorch stellt Tensoren bereit, die entweder auf der CPU oder der GPU laufen können und die Berechnungen enorm beschleunigen.
Wir bieten eine große Auswahl an Tensorroutinen zur Beschleunigung und Anpassung an Ihre wissenschaftlichen Berechnungsanforderungen wie Slicing, Indizierung, mathematische Operationen, lineare Algebra und Reduktionen. Und sie sind schnell!
PyTorch bietet eine einzigartige Möglichkeit, neuronale Netze aufzubauen: die Verwendung und Wiedergabe eines Tonbandgeräts.
Die meisten Frameworks wie TensorFlow, Theano, Caffe und CNTK haben eine statische Sicht auf die Welt. Man muss ein neuronales Netzwerk aufbauen und dieselbe Struktur immer wieder verwenden. Das Verhalten des Netzwerks zu ändern bedeutet, dass man bei Null anfangen muss.
Mit PyTorch verwenden wir eine Technik namens Reverse-Mode-Auto-Differenzierung, die es Ihnen ermöglicht, das Verhalten Ihres Netzwerks beliebig und ohne Verzögerung oder Overhead zu ändern. Unsere Inspiration stammt aus mehreren Forschungsarbeiten zu diesem Thema sowie aus aktuellen und früheren Arbeiten wie Torch-Autograd, Autograd, Chainer usw.
Diese Technik gibt es zwar nicht nur bei PyTorch, sie ist jedoch eine der bisher schnellsten Implementierungen davon. Sie erhalten das Beste an Geschwindigkeit und Flexibilität für Ihre verrückte Recherche.
PyTorch ist keine Python-Einbindung in ein monolithisches C++-Framework. Es ist so konzipiert, dass es tief in Python integriert werden kann. Sie können es auf natürliche Weise verwenden, wie Sie NumPy / SciPy / scikit-learn usw. verwenden würden. Sie können Ihre neuen neuronalen Netzwerkschichten in Python selbst schreiben, indem Sie Ihre bevorzugten Bibliotheken verwenden und Pakete wie Cython und Numba verwenden. Unser Ziel ist es, das Rad nicht neu zu erfinden, wo es angebracht ist.
PyTorch ist so konzipiert, dass es intuitiv, linear im Denken und einfach zu bedienen ist. Wenn Sie eine Codezeile ausführen, wird sie ausgeführt. Es gibt keine asynchrone Sicht auf die Welt. Wenn Sie einen Debugger aufrufen oder Fehlermeldungen und Stack-Traces erhalten, ist es einfach, diese zu verstehen. Der Stack-Trace zeigt genau auf die Stelle, an der Ihr Code definiert wurde. Wir hoffen, dass Sie nie stundenlang Ihren Code aufgrund fehlerhafter Stack-Traces oder asynchroner und undurchsichtiger Ausführungs-Engines debuggen müssen.
PyTorch hat einen minimalen Framework-Overhead. Wir integrieren Beschleunigungsbibliotheken wie Intel MKL und NVIDIA (cuDNN, NCCL), um die Geschwindigkeit zu maximieren. Im Kern sind die CPU- und GPU-Tensor- und neuronalen Netzwerk-Backends ausgereift und über Jahre hinweg getestet.
Daher ist PyTorch ziemlich schnell – egal, ob Sie kleine oder große neuronale Netze betreiben.
Die Speichernutzung in PyTorch ist im Vergleich zu Torch oder einigen der Alternativen äußerst effizient. Wir haben benutzerdefinierte Speicherzuweisungen für die GPU geschrieben, um sicherzustellen, dass Ihre Deep-Learning-Modelle maximal speichereffizient sind. Dadurch können Sie größere Deep-Learning-Modelle als bisher trainieren.
Das Schreiben neuer neuronaler Netzwerkmodule oder die Anbindung an die Tensor-API von PyTorch wurde so konzipiert, dass es unkompliziert und mit minimalen Abstraktionen möglich ist.
Sie können neue neuronale Netzwerkschichten in Python schreiben, indem Sie die Torch-API oder Ihre bevorzugten NumPy-basierten Bibliotheken wie SciPy verwenden.
Wenn Sie Ihre Ebenen in C/C++ schreiben möchten, bieten wir eine praktische Erweiterungs-API, die effizient ist und nur minimale Boilerplates benötigt. Es muss kein Wrapper-Code geschrieben werden. Ein Tutorial finden Sie hier und ein Beispiel hier.
Befehle zum Installieren von Binärdateien über Conda oder Pip Wheels finden Sie auf unserer Website: https://pytorch.org/get-started/locally/
Python-Räder für NVIDIAs Jetson Nano, Jetson TX1/TX2, Jetson Xavier NX/AGX und Jetson AGX Orin werden hier bereitgestellt und der L4T-Container wird hier veröffentlicht
Sie erfordern JetPack 4.2 und höher und werden von @dusty-nv und @ptrblck gewartet.
Wenn Sie von der Quelle installieren, benötigen Sie:
* PyTorch CI verwendet Visual C++ BuildTools, die in den Editionen Visual Studio Enterprise, Professional oder Community enthalten sind. Sie können die Build-Tools auch von https://visualstudio.microsoft.com/visual-cpp-build-tools/ installieren. Die Build-Tools werden standardmäßig nicht mit Visual Studio Code geliefert.
* Wir empfehlen dringend, eine Anaconda-Umgebung zu installieren. Sie erhalten eine hochwertige BLAS-Bibliothek (MKL) und kontrollierte Abhängigkeitsversionen unabhängig von Ihrer Linux-Distribution.
Ein Beispiel für die Umgebungseinrichtung ist unten dargestellt:
$ source < CONDA_INSTALL_DIR > /bin/activate
$ conda create -y -n < CONDA_NAME >
$ conda activate < CONDA_NAME >
$ source < CONDA_INSTALL_DIR > S cripts a ctivate.bat
$ conda create -y -n < CONDA_NAME >
$ conda activate < CONDA_NAME >
$ call " C:Program FilesMicrosoft Visual Studio<VERSION>CommunityVCAuxiliaryBuildvcvarsall.bat " x64
Wenn Sie mit CUDA-Unterstützung kompilieren möchten, wählen Sie eine unterstützte Version von CUDA aus unserer Support-Matrix aus und installieren Sie dann Folgendes:
Hinweis: Informationen zu cuDNN-Versionen mit den verschiedenen unterstützten CUDA-, CUDA-Treiber- und NVIDIA-Hardware finden Sie in der cuDNN-Supportmatrix
Wenn Sie die CUDA-Unterstützung deaktivieren möchten, exportieren Sie die Umgebungsvariable USE_CUDA=0
. Weitere potenziell nützliche Umgebungsvariablen finden Sie in setup.py
.
Wenn Sie für die Jetson-Plattformen von NVIDIA (Jetson Nano, TX1, TX2, AGX Xavier) bauen, finden Sie hier Anweisungen zur Installation von PyTorch für Jetson Nano
Wenn Sie mit ROCm-Unterstützung kompilieren möchten, installieren Sie
Standardmäßig erwartet das Build-System, dass ROCm in /opt/rocm
installiert ist. Wenn ROCm in einem anderen Verzeichnis installiert ist, muss die Umgebungsvariable ROCM_PATH
auf das ROCm-Installationsverzeichnis gesetzt werden. Das Build-System erkennt automatisch die AMD-GPU-Architektur. Optional kann die AMD-GPU-Architektur explizit mit der Umgebungsvariablen AMD GPU-Architektur PYTORCH_ROCM_ARCH
festgelegt werden
Wenn Sie die ROCm-Unterstützung deaktivieren möchten, exportieren Sie die Umgebungsvariable USE_ROCM=0
. Weitere potenziell nützliche Umgebungsvariablen finden Sie in setup.py
.
Wenn Sie mit Intel-GPU-Unterstützung kompilieren möchten, befolgen Sie diese
Wenn Sie die Intel-GPU-Unterstützung deaktivieren möchten, exportieren Sie die Umgebungsvariable USE_XPU=0
. Weitere potenziell nützliche Umgebungsvariablen finden Sie in setup.py
.
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
# if you are updating an existing checkout
git submodule sync
git submodule update --init --recursive
Gemeinsam
conda install cmake ninja
# Run this command on native Windows
conda install rust
# Run this command from the PyTorch directory after cloning the source code using the “Get the PyTorch Source“ section below
pip install -r requirements.txt
Unter Linux
pip install mkl-static mkl-include
# CUDA only: Add LAPACK support for the GPU if needed
conda install -c pytorch magma-cuda121 # or the magma-cuda* that matches your CUDA version from https://anaconda.org/pytorch/repo
# (optional) If using torch.compile with inductor/triton, install the matching version of triton
# Run from the pytorch directory after cloning
# For Intel GPU support, please explicitly `export USE_XPU=1` before running command.
make triton
Auf MacOS
# Add this package on intel x86 processor machines only
pip install mkl-static mkl-include
# Add these packages if torch.distributed is needed
conda install pkg-config libuv
Unter Windows
pip install mkl-static mkl-include
# Add these packages if torch.distributed is needed.
# Distributed package support on Windows is a prototype feature and is subject to changes.
conda install -c conda-forge libuv=1.39
Unter Linux
Wenn Sie PyTorch mit aktivierter neuer C++-ABI kompilieren möchten, führen Sie zunächst diesen Befehl aus:
export _GLIBCXX_USE_CXX11_ABI=1
Bitte beachten Sie , dass der PyTorch-Build mit XPU ab PyTorch 2.5 sowohl neue als auch alte C++-ABIs unterstützt. Bisher unterstützte XPU nur das neue C++ ABI. Wenn Sie mit Intel GPU-Unterstützung kompilieren möchten, befolgen Sie bitte die Anweisungen zur Intel GPU-Unterstützung.
Wenn Sie für AMD ROCm kompilieren, führen Sie zuerst diesen Befehl aus:
# Only run this if you're compiling for ROCm
python tools/amd_build/build_amd.py
Installieren Sie PyTorch
export CMAKE_PREFIX_PATH= " ${CONDA_PREFIX :- ' $(dirname $(which conda))/../ ' } : ${CMAKE_PREFIX_PATH} "
python setup.py develop
Auf macOS
python3 setup.py develop
Unter Windows
Wenn Sie Legacy-Python-Code erstellen möchten, lesen Sie bitte „Auf Legacy-Code und CUDA aufbauen“.
Nur-CPU-Builds
In diesem Modus werden PyTorch-Berechnungen auf Ihrer CPU und nicht auf Ihrer GPU ausgeführt
python setup.py develop
Hinweis zu OpenMP: Die gewünschte OpenMP-Implementierung ist Intel OpenMP (iomp). Um eine Verknüpfung mit iomp herzustellen, müssen Sie die Bibliothek manuell herunterladen und die Erstellungsumgebung einrichten, indem Sie CMAKE_INCLUDE_PATH
und LIB
anpassen. Die Anleitung hier ist ein Beispiel für die Einrichtung von MKL und Intel OpenMP. Ohne diese Konfigurationen für CMake wird die Microsoft Visual C OpenMP-Laufzeitumgebung (vcomp) verwendet.
CUDA-basierter Build
In diesem Modus nutzen PyTorch-Berechnungen Ihre GPU über CUDA für eine schnellere Zahlenverarbeitung
NVTX wird benötigt, um Pytorch mit CUDA zu erstellen. NVTX ist Teil der CUDA-Distribution und heißt dort „Nsight Compute“. Um es auf einem bereits installierten CUDA zu installieren, führen Sie die CUDA-Installation noch einmal aus und aktivieren Sie das entsprechende Kontrollkästchen. Stellen Sie sicher, dass CUDA mit Nsight Compute nach Visual Studio installiert wird.
Derzeit werden VS 2017/2019 und Ninja als Generator von CMake unterstützt. Wenn ninja.exe
in PATH
erkannt wird, wird Ninja als Standardgenerator verwendet, andernfalls wird VS 2017/2019 verwendet.
Wenn Ninja als Generator ausgewählt wird, wird die neueste MSVC als zugrunde liegende Toolchain ausgewählt.
Häufig werden zusätzliche Bibliotheken wie Magma, oneDNN, auch bekannt als MKLDNN oder DNNL, und Sccache benötigt. Zur Installation nutzen Sie bitte den Installationshelfer.
Für einige andere Umgebungsvariablenkonfigurationen können Sie auf das Skript build_pytorch.bat verweisen
cmd
:: Set the environment variables after you have downloaded and unzipped the mkl package,
:: else CMake would throw an error as `Could NOT find OpenMP`.
set CMAKE_INCLUDE_PATH = {Your directory}mklinclude
set LIB = {Your directory}mkllib; %LIB%
:: Read the content in the previous section carefully before you proceed.
:: [Optional] If you want to override the underlying toolset used by Ninja and Visual Studio with CUDA, please run the following script block.
:: "Visual Studio 2019 Developer Command Prompt" will be run automatically.
:: Make sure you have CMake >= 3.12 before you do this when you use the Visual Studio generator.
set CMAKE_GENERATOR_TOOLSET_VERSION = 14.27
set DISTUTILS_USE_SDK = 1
for /f " usebackq tokens=* " %i in (`"% ProgramFiles(x86) %Microsoft Visual StudioInstallervswhere.exe" -version [15^,17^) -products * -latest -property installationPath`) do call "% iVCAuxiliaryBuildvcvarsall.bat " x64 -vcvars_ver= %CMAKE_GENERATOR_TOOLSET_VERSION%
:: [Optional] If you want to override the CUDA host compiler
set CUDAHOSTCXX = C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.27.29110binHostX64x64cl.exe
python setup.py develop
Sie können die Konfiguration von cmake-Variablen optional (ohne vorherige Erstellung) anpassen, indem Sie wie folgt vorgehen. Mit einem solchen Schritt kann beispielsweise die Anpassung der vorab erkannten Verzeichnisse für CuDNN oder BLAS erfolgen.
Unter Linux
export CMAKE_PREFIX_PATH= " ${CONDA_PREFIX :- ' $(dirname $(which conda))/../ ' } : ${CMAKE_PREFIX_PATH} "
python setup.py build --cmake-only
ccmake build # or cmake-gui build
Auf macOS
export CMAKE_PREFIX_PATH= " ${CONDA_PREFIX :- ' $(dirname $(which conda))/../ ' } : ${CMAKE_PREFIX_PATH} "
MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py build --cmake-only
ccmake build # or cmake-gui build
Sie können auch ein vorgefertigtes Docker-Image vom Docker Hub abrufen und mit Docker v19.03+ ausführen
docker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest
Bitte beachten Sie, dass PyTorch Shared Memory verwendet, um Daten zwischen Prozessen zu teilen. Wenn Torch-Multiprocessing verwendet wird (z. B. für Multithread-Datenlader), reicht die standardmäßige Shared-Memory-Segmentgröße, mit der der Container läuft, nicht aus, und Sie sollten die Shared-Memory-Größe entweder mit erhöhen --ipc=host
oder --shm-size
Befehlszeilenoptionen für nvidia-docker run
.
HINWEIS: Muss mit einer Docker-Version > 18.06 erstellt werden
Die Dockerfile
wird zum Erstellen von Images mit CUDA 11.1-Unterstützung und cuDNN v8 bereitgestellt. Sie können die Make-Variable PYTHON_VERSION=xy
übergeben, um anzugeben, welche Python-Version von Miniconda verwendet werden soll, oder sie deaktiviert lassen, um die Standardversion zu verwenden.
make -f docker.Makefile
# images are tagged as docker.io/${your_docker_username}/pytorch
Sie können auch die Umgebungsvariable CMAKE_VARS="..."
übergeben, um zusätzliche CMake-Variablen anzugeben, die während des Builds an CMake übergeben werden sollen. Die Liste der verfügbaren Variablen finden Sie in setup.py.
make -f docker.Makefile
Um Dokumentation in verschiedenen Formaten zu erstellen, benötigen Sie Sphinx und das readthedocs-Theme.
cd docs/
pip install -r requirements.txt
Anschließend können Sie die Dokumentation erstellen, indem Sie make <format>
im Ordner docs/
ausführen. Führen Sie make
um eine Liste aller verfügbaren Ausgabeformate zu erhalten.
Wenn Sie einen Katex-Fehler erhalten, führen Sie npm install katex
aus. Wenn es weiterhin besteht, versuchen Sie es npm install -g katex
Hinweis: Wenn Sie
nodejs
mit einem anderen Paketmanager (z. B.conda
) installiert haben, installiertnpm
wahrscheinlich eine Version vonkatex
, die nicht mit Ihrer Version vonnodejs
kompatibel ist, und die Erstellung von Dokumenten schlägt fehl. Eine Kombination von Versionen, von denen bekannt ist, dass sie funktioniert, ist[email protected]
und[email protected]
. Um Letzteres mitnpm
zu installieren, können Sienpm install -g [email protected]
ausführen
Installationsanweisungen und Binärdateien für frühere PyTorch-Versionen finden Sie auf unserer Website.
Drei Hinweise für den Einstieg:
Normalerweise gibt es von PyTorch drei Nebenversionen pro Jahr. Bitte teilen Sie uns mit, wenn Sie auf einen Fehler stoßen, indem Sie ein Problem melden.
Wir freuen uns über alle Beiträge. Wenn Sie planen, Fehlerbehebungen beizusteuern, tun Sie dies bitte ohne weitere Diskussion.
Wenn Sie vorhaben, neue Features, Hilfsfunktionen oder Erweiterungen zum Kern beizutragen, öffnen Sie bitte zunächst ein Problem und besprechen Sie die Funktion mit uns. Das Versenden einer PR ohne Diskussion kann dazu führen, dass die PR abgelehnt wird, da wir den Kern möglicherweise in eine andere Richtung lenken, als Sie vielleicht wissen.
Weitere Informationen zum Beitragen zu Pytorch finden Sie auf unserer Beitragsseite. Weitere Informationen zu PyTorch-Releases finden Sie auf der Release-Seite.
PyTorch ist ein Community-Projekt, an dem mehrere erfahrene Ingenieure und Forscher mitwirken.
PyTorch wird derzeit von Soumith Chintala, Gregory Chanan, Dmytro Dzhulgakov, Edward Yang und Nikita Shulga betreut, wobei Hunderte talentierter Personen in unterschiedlicher Form und mit unterschiedlichen Mitteln wichtige Beiträge leisten. In einer nicht erschöpfenden, aber wachsenden Liste sind zu nennen: Trevor Killeen, Sasank Chilamkurthy, Sergey Zagoruyko, Adam Lerer, Francisco Massa, Alykhan Tejani, Luca Antiga, Alban Desmaison, Andreas Koepf, James Bradbury, Zeming Lin, Yuandong Tian, Guillaume Lample, Marat Dukhan, Natalia Gimelshein, Christian Sarofeen, Martin Raison, Edward Yang, Zachary Devito.
Hinweis: Dieses Projekt hat nichts mit Hughperkins/Pytorch mit demselben Namen zu tun. Hugh leistet einen wertvollen Beitrag zur Torch-Community und hat bei vielen Dingen mit Torch und PyTorch geholfen.
PyTorch verfügt über eine BSD-ähnliche Lizenz, wie in der LICENSE-Datei zu finden.